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
288079d581eSLawrence TangerrorTypeValid & 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}
374079d581eSLawrence Tangtype & string & A GUID indicating the type of processor error defined in this structure. See \texttt{edk/Cper.h} in the library repository for the defined GUID values.\\
375079d581eSLawrence Tang\hline
376079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
377079d581eSLawrence Tang\hline
378079d581eSLawrence 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.\\
379079d581eSLawrence Tang\hline
380079d581eSLawrence TangtargetAddressID & uint64 & Identifies the target address associated with the error.\\
381079d581eSLawrence Tang\hline
382079d581eSLawrence TangrequestorID & uint64 & Identifies the requestor associated with the error.\\
383079d581eSLawrence Tang\hline
384079d581eSLawrence TangresponderID & uint64 & Identifies the responder associated with the error.\\
385079d581eSLawrence Tang\hline
386079d581eSLawrence TanginstructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
387079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info structure field table.}
388079d581eSLawrence Tang
389079d581eSLawrence Tang% IA32/x64 Processor Error Info Validation structure.
390079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Info Validation Structure}
391079d581eSLawrence Tang\label{subsection:ia32x64processorerrorinfovalidationstructure}
392079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
393079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorinfovalidationstructure}
394079d581eSLawrence TangcheckInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
395079d581eSLawrence Tang\hline
396079d581eSLawrence TangtargetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
397079d581eSLawrence Tang\hline
398079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
399079d581eSLawrence Tang\hline
400079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
401079d581eSLawrence Tang\hline
402079d581eSLawrence TanginstructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
403079d581eSLawrence Tang\hline
404079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info validation structure field table.}
405079d581eSLawrence Tang
406079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Cache/TLB Error)
407079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
408079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
409079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
410079d581eSLawrence TangThe GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
411079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
412079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
413079d581eSLawrence Tang\hline
414079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
415079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
416079d581eSLawrence Tang\hline
417079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
418079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
419079d581eSLawrence Tang\hline
420079d581eSLawrence Tanglevel & uint64 & The cache/TLB level at which the error occurred.\\
421079d581eSLawrence Tang\hline
422079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
423079d581eSLawrence Tang\hline
424079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
425079d581eSLawrence Tang\hline
426079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
427079d581eSLawrence Tang\hline
428079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
429079d581eSLawrence Tang\hline
430079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
431079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
432079d581eSLawrence Tang
433079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Bus Error)
434079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
435079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfobusstructure}
436079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
437079d581eSLawrence TangThe GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
438079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
439079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
440079d581eSLawrence Tang\hline
441079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
442079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
443079d581eSLawrence Tang\hline
444079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
445079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
446079d581eSLawrence Tang\hline
447079d581eSLawrence Tanglevel & uint64 & The bus heirarchy level at which the error occurred.\\
448079d581eSLawrence Tang\hline
449079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
450079d581eSLawrence Tang\hline
451079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
452079d581eSLawrence Tang\hline
453079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
454079d581eSLawrence Tang\hline
455079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
456079d581eSLawrence Tang\hline
457079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
458079d581eSLawrence Tang\hline
459079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation.\\
460079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation.\\
461079d581eSLawrence Tang\hline
462079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
463079d581eSLawrence Tang\hline
464079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space the error was in.\\
465079d581eSLawrence TangaddressSpace.name  & string & The human readable name, if available, of the address space the error was in.\\
466079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
467079d581eSLawrence Tang
468079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check Error)
469079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
470079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
471079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
472079d581eSLawrence TangThe GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
473079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
474079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
475079d581eSLawrence Tang\hline
476079d581eSLawrence TangerrorType.value & uint64 & The raw value of the type of operation that caused the error.\\
477079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
478079d581eSLawrence Tang\hline
479079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
480079d581eSLawrence Tang\hline
481079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
482079d581eSLawrence Tang\hline
483079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
484079d581eSLawrence Tang\hline
485079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
486079d581eSLawrence Tang\hline
487079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
488079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
489079d581eSLawrence Tang
490079d581eSLawrence Tang% IA32/x64 Processor Error Check Info Validation structure.
491079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
492079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
493079d581eSLawrence 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.
494079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
495079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
496079d581eSLawrence Tang\hline
497079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
498079d581eSLawrence Tang\hline
499079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
500079d581eSLawrence Tang\hline
501079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
502079d581eSLawrence Tang\hline
503079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
504079d581eSLawrence Tang\hline
505079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
506079d581eSLawrence Tang\hline
507079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
508079d581eSLawrence Tang\hline
509079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
510079d581eSLawrence Tang\hline
511079d581eSLawrence 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.}\\
512079d581eSLawrence Tang\hline
513079d581eSLawrence 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.}\\
514079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) validation structure field table.}
515079d581eSLawrence Tang
516079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
517079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
518079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
519079d581eSLawrence 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.
520079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
521079d581eSLawrence TangerrorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
522079d581eSLawrence Tang\hline
523079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
524079d581eSLawrence Tang\hline
525079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
526079d581eSLawrence Tang\hline
527079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
528079d581eSLawrence Tang\hline
529079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
530079d581eSLawrence Tang\hline
531079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
532079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check) validation structure field table.}
533079d581eSLawrence Tang
534079d581eSLawrence Tang% IA32/x64 Processor Context Info structure.
535079d581eSLawrence Tang\subsection{IA32/x64 Processor Context Info Structure}
536079d581eSLawrence Tang\label{subsection:ia32x64processorcontextinfostructure}
537079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
538079d581eSLawrence Tang\jsontable{table:ia32x64processorcontextinfostructure}
539079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
540079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
541079d581eSLawrence Tang\hline
542079d581eSLawrence TangregisterArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
543079d581eSLawrence Tang\hline
544079d581eSLawrence TangmsrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
545079d581eSLawrence Tang\hline
546079d581eSLawrence TangmmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
547079d581eSLawrence Tang\hline
548079d581eSLawrence 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}.\\
549079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Context Info structure field table.}
550079d581eSLawrence Tang
551079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
552079d581eSLawrence Tang\subsection{IA32/x64 IA32 Register State Structure}
553079d581eSLawrence Tang\label{subsection:ia32x64ia32registerstatestructure}
554079d581eSLawrence 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".
555079d581eSLawrence Tang\jsontable{table:ia32x64ia32registerstatestructure}
556079d581eSLawrence Tangeax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
557079d581eSLawrence Tang\hline
558079d581eSLawrence Tangebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
559079d581eSLawrence Tang\hline
560079d581eSLawrence Tangecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
561079d581eSLawrence Tang\hline
562079d581eSLawrence Tangedx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
563079d581eSLawrence Tang\hline
564079d581eSLawrence Tangesi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
565079d581eSLawrence Tang\hline
566079d581eSLawrence Tangedi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
567079d581eSLawrence Tang\hline
568079d581eSLawrence Tangebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
569079d581eSLawrence Tang\hline
570079d581eSLawrence Tangesp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
571079d581eSLawrence Tang\hline
572079d581eSLawrence Tangcs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
573079d581eSLawrence Tang\hline
574079d581eSLawrence Tangds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
575079d581eSLawrence Tang\hline
576079d581eSLawrence Tangss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
577079d581eSLawrence Tang\hline
578079d581eSLawrence Tanges & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
579079d581eSLawrence Tang\hline
580079d581eSLawrence Tangfs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
581079d581eSLawrence Tang\hline
582079d581eSLawrence Tanggs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
583079d581eSLawrence Tang\hline
584079d581eSLawrence Tangeflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
585079d581eSLawrence Tang\hline
586079d581eSLawrence Tangeip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
587079d581eSLawrence Tang\hline
588079d581eSLawrence Tangcr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
589079d581eSLawrence Tang\hline
590079d581eSLawrence Tangcr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
591079d581eSLawrence Tang\hline
592079d581eSLawrence Tangcr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
593079d581eSLawrence Tang\hline
594079d581eSLawrence Tangcr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
595079d581eSLawrence Tang\hline
596079d581eSLawrence Tangcr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
597079d581eSLawrence Tang\hline
598079d581eSLawrence Tanggdtr & uint64 & The GDTR register.\\
599079d581eSLawrence Tang\hline
600079d581eSLawrence Tangidtr & uint64 & The IDTR register.\\
601079d581eSLawrence Tang\hline
602079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
603079d581eSLawrence Tang\hline
604079d581eSLawrence Tangtr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
605079d581eSLawrence Tang\jsontableend{IA32/x64 IA32 Register State structure field table.}
606079d581eSLawrence Tang
607079d581eSLawrence Tang% IA32/x64 x64 Register State structure
608079d581eSLawrence Tang\subsection{IA32/x64 x64 Register State Structure}
609079d581eSLawrence Tang\label{subsection:ia32x64x64registerstatestructure}
610079d581eSLawrence 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".
611079d581eSLawrence Tang\jsontable{table:ia32x64x64registerstatestructure}
612079d581eSLawrence Tangrax & uint64 & The RAX register.\\
613079d581eSLawrence Tang\hline
614079d581eSLawrence Tangrbx & uint64 & The RBX register.\\
615079d581eSLawrence Tang\hline
616079d581eSLawrence Tangrcx & uint64 & The RCX register.\\
617079d581eSLawrence Tang\hline
618079d581eSLawrence Tangrdx & uint64 & The RDX register.\\
619079d581eSLawrence Tang\hline
620079d581eSLawrence Tangrsi & uint64 & The RSI register.\\
621079d581eSLawrence Tang\hline
622079d581eSLawrence Tangrdi & uint64 & The RDI register.\\
623079d581eSLawrence Tang\hline
624079d581eSLawrence Tangrbp & uint64 & The RBP register.\\
625079d581eSLawrence Tang\hline
626079d581eSLawrence Tangrsp & uint64 & The RSP register.\\
627079d581eSLawrence Tang\hline
628079d581eSLawrence Tangr8 & uint64 & The R8 register.\\
629079d581eSLawrence Tang\hline
630079d581eSLawrence Tangr9 & uint64 & The R9 register.\\
631079d581eSLawrence Tang\hline
632079d581eSLawrence Tangr10 & uint64 & The R10 register.\\
633079d581eSLawrence Tang\hline
634079d581eSLawrence Tangr11 & uint64 & The R11 register.\\
635079d581eSLawrence Tang\hline
636079d581eSLawrence Tangr12 & uint64 & The R12 register.\\
637079d581eSLawrence Tang\hline
638079d581eSLawrence Tangr13 & uint64 & The R13 register.\\
639079d581eSLawrence Tang\hline
640079d581eSLawrence Tangr14 & uint64 & The R14 register.\\
641079d581eSLawrence Tang\hline
642079d581eSLawrence Tangr15 & uint64 & The R15 register.\\
643079d581eSLawrence Tang\hline
644079d581eSLawrence Tangcs & uint64 & The CS register.\\
645079d581eSLawrence Tang\hline
646079d581eSLawrence Tangds & uint64 & The DS register.\\
647079d581eSLawrence Tang\hline
648079d581eSLawrence Tangss & uint64 & The SS register.\\
649079d581eSLawrence Tang\hline
650079d581eSLawrence Tanges & uint64 & The ES register.\\
651079d581eSLawrence Tang\hline
652079d581eSLawrence Tangfs & uint64 & The FS register.\\
653079d581eSLawrence Tang\hline
654079d581eSLawrence Tanggs & uint64 & The GS register.\\
655079d581eSLawrence Tang\hline
656079d581eSLawrence Tangrflags & uint64 & The RFLAGS register.\\
657079d581eSLawrence Tang\hline
658079d581eSLawrence Tangeip & uint64 & The EIP register.\\
659079d581eSLawrence Tang\hline
660079d581eSLawrence Tangcr0 & uint64 & The CR0 register.\\
661079d581eSLawrence Tang\hline
662079d581eSLawrence Tangcr1 & uint64 & The CR1 register.\\
663079d581eSLawrence Tang\hline
664079d581eSLawrence Tangcr2 & uint64 & The CR2 register.\\
665079d581eSLawrence Tang\hline
666079d581eSLawrence Tangcr3 & uint64 & The CR3 register.\\
667079d581eSLawrence Tang\hline
668079d581eSLawrence Tangcr4 & uint64 & The CR4 register.\\
669079d581eSLawrence Tang\hline
670079d581eSLawrence Tangcr8 & uint64 & The CR8 register.\\
671079d581eSLawrence Tang\hline
672079d581eSLawrence Tanggdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
673079d581eSLawrence Tang\hline
674079d581eSLawrence Tanggdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
675079d581eSLawrence Tang\hline
676079d581eSLawrence Tangidtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
677079d581eSLawrence Tang\hline
678079d581eSLawrence Tangidtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
679079d581eSLawrence Tang\hline
680079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
681079d581eSLawrence Tang\hline
682079d581eSLawrence Tangtr & uint64 & The TR register.\\
683079d581eSLawrence Tang\jsontableend{IA32/x64 x64 Register State structure field table.}
684079d581eSLawrence Tang
685079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
686079d581eSLawrence Tang\subsection{IA32/x64 Unformatted Register State Structure}
687079d581eSLawrence Tang\label{subsection:ia32x64unformattedregisterstatestructure}
688079d581eSLawrence 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".
689079d581eSLawrence Tang\jsontable{table:ia32x64unformattedregisterstatestructure}
690079d581eSLawrence Tangdata & string & A base64-formatted binary representation of the register array.\\
691079d581eSLawrence Tang\jsontableend{IA32/x64 Unformatted Register State structure field table.}
692079d581eSLawrence Tang
693079d581eSLawrence Tang% ARM processor error section.
694079d581eSLawrence Tang\section{ARM Processor Error Section}
695079d581eSLawrence Tang\label{section:armprocessorerrorsection}
696079d581eSLawrence 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 \}\}}.
697079d581eSLawrence Tang\jsontable{table:armprocessorerrorsection}
698079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Validation structure, as defined in Subsection \ref{subsection:armprocessorerrorvalidationstructure}.\\
699079d581eSLawrence Tang\hline
700079d581eSLawrence TangerrorInfoNum & int & The number of error info structures attached to this error.\\
701079d581eSLawrence Tang\hline
702079d581eSLawrence TangcontextInfoNum & int & The number of context info structures attached to this error.\\
703079d581eSLawrence Tang\hline
704079d581eSLawrence TangsectionLength & uint64 & The total size (in bytes) of this error section.\\
705079d581eSLawrence Tang\hline
706079d581eSLawrence TangerrorAffinity.value & int & The raw value of the error affinity for this error.\\
707079d581eSLawrence 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.\\
708079d581eSLawrence Tang\hline
709079d581eSLawrence TangmpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
710079d581eSLawrence Tang\hline
711079d581eSLawrence TangmidrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
712079d581eSLawrence Tang\hline
713079d581eSLawrence Tangrunning & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
714079d581eSLawrence Tang\hline
715079d581eSLawrence 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.\\
716079d581eSLawrence Tang\hline
717079d581eSLawrence TangerrorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
718079d581eSLawrence Tang\hline
719079d581eSLawrence TangcontextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
720079d581eSLawrence Tang\hline
721079d581eSLawrence TangvendorSpecificInfo.data & string (\textbf{optional}) & If it exists, a base64-encoded binary representation of any attached vendor specific information.\\
722079d581eSLawrence Tang\jsontableend{ARM Processor Error structure field table.}
723079d581eSLawrence Tang
724079d581eSLawrence Tang% ARM Processor Error Validation structure
725079d581eSLawrence Tang\subsection{ARM Processor Error Validation Structure}
726079d581eSLawrence Tang\label{subsection:armprocessorerrorvalidationstructure}
727079d581eSLawrence TangThis structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
728079d581eSLawrence Tang\jsontable{table:armprocessorerrorvalidationstructure}
729079d581eSLawrence TangmpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
730079d581eSLawrence Tang\hline
731079d581eSLawrence TangerrorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
732079d581eSLawrence Tang\hline
733079d581eSLawrence TangrunningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
734079d581eSLawrence Tang\hline
735079d581eSLawrence TangvendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
736079d581eSLawrence Tang\jsontableend{ARM Processor Error validation structure field table.}
737079d581eSLawrence Tang
738079d581eSLawrence Tang% ARM Processor Error Info structure
739079d581eSLawrence Tang\subsection{ARM Processor Error Info Structure}
740079d581eSLawrence Tang\label{subsection:armprocessorerrorinfostructure}
741079d581eSLawrence TangThis structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
742079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfostructure}
743079d581eSLawrence Tangversion & int & The version of the structure that is implemented.\\
744079d581eSLawrence Tang\hline
745079d581eSLawrence Tanglength & int & The length of the structure, in bytes. For version 0, this is 32.\\
746079d581eSLawrence Tang\hline
747079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
748079d581eSLawrence Tang\hline
749079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type this error info describes.\\
750079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type this error info describes.\\
751079d581eSLawrence Tang\hline
752079d581eSLawrence 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.\\
753079d581eSLawrence TangmultipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
754079d581eSLawrence Tang\hline
755079d581eSLawrence Tangflags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
756079d581eSLawrence Tang\hline
757079d581eSLawrence TangerrorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}. Which structure this is depends on the \texttt{errorType.value} field.\\
758079d581eSLawrence Tang\hline
759079d581eSLawrence TangvirtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
760079d581eSLawrence Tang\hline
761079d581eSLawrence TangphysicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
762079d581eSLawrence Tang\jsontableend{ARM Processor Error Info structure field table.}
763079d581eSLawrence Tang
764079d581eSLawrence Tang% ARM Processor Error Info Validation structure
765079d581eSLawrence Tang\subsection{ARM Processor Error Info Validation Structure}
766079d581eSLawrence Tang\label{subsection:armprocessorerrorinfovalidationstructure}
767079d581eSLawrence TangThis structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
768079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfovalidationstructure}
769079d581eSLawrence TangmultipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
770079d581eSLawrence Tang\hline
771079d581eSLawrence TangflagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
772079d581eSLawrence Tang\hline
773079d581eSLawrence TangerrorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
774079d581eSLawrence Tang\hline
775079d581eSLawrence TangvirtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
776079d581eSLawrence Tang\hline
777079d581eSLawrence TangphysicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
778079d581eSLawrence Tang\jsontableend{ARM Processor Error Info validation structure field table.}
779079d581eSLawrence Tang
780079d581eSLawrence Tang% ARM Processor Error Info Validation structure
781079d581eSLawrence Tang\subsection{ARM Processor Error Info Flags Structure}
782079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoflagsstructure}
783079d581eSLawrence TangThis structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
784079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoflagsstructure}
785079d581eSLawrence TangfirstErrorCaptured & boolean & Whether this is the first error captured.\\
786079d581eSLawrence Tang\hline
787079d581eSLawrence TanglastErrorCaptured & boolean & Whether this is the last error captured.\\
788079d581eSLawrence Tang\hline
789079d581eSLawrence Tangpropagated & boolean & Whether the error has propagated.\\
790079d581eSLawrence Tang\hline
791079d581eSLawrence 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.\\
792079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Flags structure field table.}
793079d581eSLawrence Tang
794079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) structure
795079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Information Structure}
796079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
797079d581eSLawrence TangThis structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
798079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
799079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
800079d581eSLawrence Tang\hline
801079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
802079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
803079d581eSLawrence Tang\hline
804079d581eSLawrence Tangoperation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
805079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
806079d581eSLawrence Tang\hline
807079d581eSLawrence Tanglevel & int & The cache/TLB level that the error occurred at.\\
808079d581eSLawrence Tang\hline
809079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
810079d581eSLawrence Tang\hline
811079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
812079d581eSLawrence Tang\hline
813079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
814079d581eSLawrence Tang\hline
815079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
816079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
817079d581eSLawrence Tang
818079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) validation structure
819079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
820079d581eSLawrence Tang\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
821079d581eSLawrence 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.
822079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
823079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
824079d581eSLawrence Tang\hline
825079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
826079d581eSLawrence Tang\hline
827079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
828079d581eSLawrence Tang\hline
829079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
830079d581eSLawrence Tang\hline
831079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
832079d581eSLawrence Tang\hline
833079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
834079d581eSLawrence Tang\hline
835079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
836079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB validation structure field table.}
837079d581eSLawrence Tang
838079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) structure
839079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Information Structure}
840079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
841079d581eSLawrence TangThis structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
842079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
843079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
844079d581eSLawrence Tang\hline
845079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error.\\
846079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error.\\
847079d581eSLawrence Tang\hline
848079d581eSLawrence Tangoperation.value & uint64 & The raw value of the bus operation that caused the error.\\
849079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
850079d581eSLawrence Tang\hline
851079d581eSLawrence Tanglevel & int & The affinity level that the bus error occurred at.\\
852079d581eSLawrence Tang\hline
853079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
854079d581eSLawrence Tang\hline
855079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
856079d581eSLawrence Tang\hline
857079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
858079d581eSLawrence Tang\hline
859079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
860079d581eSLawrence Tang\hline
861079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
862079d581eSLawrence Tang\hline
863079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
864079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
865079d581eSLawrence Tang\hline
866079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
867079d581eSLawrence TangaddressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
868079d581eSLawrence Tang\hline
869079d581eSLawrence TangmemoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
870079d581eSLawrence Tang\hline
871079d581eSLawrence TangaccessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
872079d581eSLawrence TangaccessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
873079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus Information structure field table.}
874079d581eSLawrence Tang
875079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) validation structure
876079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Validation Structure}
877079d581eSLawrence Tang\label{subsection:armprocessorerrorinfobusvalidationstructure}
878079d581eSLawrence 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.
879079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfobusvalidationstructure}
880079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
881079d581eSLawrence Tang\hline
882079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
883079d581eSLawrence Tang\hline
884079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
885079d581eSLawrence Tang\hline
886079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
887079d581eSLawrence Tang\hline
888079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
889079d581eSLawrence Tang\hline
890079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
891079d581eSLawrence Tang\hline
892079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
893079d581eSLawrence Tang\hline
894079d581eSLawrence TangparticipationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
895079d581eSLawrence Tang\hline
896079d581eSLawrence TangtimedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
897079d581eSLawrence Tang\hline
898079d581eSLawrence TangaddressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
899079d581eSLawrence Tang\hline
900079d581eSLawrence TangmemoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
901079d581eSLawrence Tang\hline
902079d581eSLawrence TangaccessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
903079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus validation structure field table.}
904079d581eSLawrence Tang
905079d581eSLawrence Tang% ARM Processor Context Info structure
906079d581eSLawrence Tang\subsection{ARM Processor Context Info Structure}
907079d581eSLawrence Tang\label{subsection:armprocessorcontextinfostructure}
908079d581eSLawrence TangThis structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
909079d581eSLawrence Tang\jsontable{table:armprocessorcontextinfostructure}
910079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
911079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
912079d581eSLawrence Tang\hline
913079d581eSLawrence TangregisterArraySize & uint64 & The size of the attached register array, in bytes.\\
914079d581eSLawrence Tang\hline
915079d581eSLawrence 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.\\
916079d581eSLawrence Tang\jsontableend{ARM Processor Context Info structure field table.}
917079d581eSLawrence Tang
918079d581eSLawrence Tang% ARM AARCH32 General Purpose Registers structure
919079d581eSLawrence Tang\subsection{ARM AARCH32 General Purpose Registers Structure}
920079d581eSLawrence Tang\label{subsection:armaarch32gprstructure}
921079d581eSLawrence 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.
922079d581eSLawrence Tang\jsontable{table:armaarch32gprstructure}
923079d581eSLawrence Tangr0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
924079d581eSLawrence Tang\hline
925079d581eSLawrence Tangr1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
926079d581eSLawrence Tang\hline
927079d581eSLawrence Tangr2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
928079d581eSLawrence Tang\hline
929079d581eSLawrence Tangr3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
930079d581eSLawrence Tang\hline
931079d581eSLawrence Tangr4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
932079d581eSLawrence Tang\hline
933079d581eSLawrence Tangr5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
934079d581eSLawrence Tang\hline
935079d581eSLawrence Tangr6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
936079d581eSLawrence Tang\hline
937079d581eSLawrence Tangr7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
938079d581eSLawrence Tang\hline
939079d581eSLawrence Tangr8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
940079d581eSLawrence Tang\hline
941079d581eSLawrence Tangr9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
942079d581eSLawrence Tang\hline
943079d581eSLawrence Tangr10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
944079d581eSLawrence Tang\hline
945079d581eSLawrence Tangr11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
946079d581eSLawrence Tang\hline
947079d581eSLawrence Tangr12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
948079d581eSLawrence Tang\hline
949079d581eSLawrence Tangr13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
950079d581eSLawrence Tang\hline
951079d581eSLawrence Tangr14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
952079d581eSLawrence Tang\hline
953079d581eSLawrence Tangr15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
954079d581eSLawrence Tang\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
955079d581eSLawrence Tang
956079d581eSLawrence Tang% ARM AARCH32 EL1 Context Registers structure
957079d581eSLawrence Tang\subsection{ARM AARCH32 EL1 Context Registers Structure}
958079d581eSLawrence Tang\label{subsection:armaarch32el1contextregistersstructure}
959079d581eSLawrence 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.
960079d581eSLawrence Tang\jsontable{table:armaarch32el1contextregistersstructure}
961079d581eSLawrence Tangdfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
962079d581eSLawrence Tang\hline
963079d581eSLawrence Tangdfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
964079d581eSLawrence Tang\hline
965079d581eSLawrence Tangifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
966079d581eSLawrence Tang\hline
967079d581eSLawrence Tangisr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
968079d581eSLawrence Tang\hline
969079d581eSLawrence Tangmair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
970079d581eSLawrence Tang\hline
971079d581eSLawrence Tangmair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
972079d581eSLawrence Tang\hline
973079d581eSLawrence Tangmidr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
974079d581eSLawrence Tang\hline
975079d581eSLawrence Tangmpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
976079d581eSLawrence Tang\hline
977079d581eSLawrence Tangnmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
978079d581eSLawrence Tang\hline
979079d581eSLawrence Tangprrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
980079d581eSLawrence Tang\hline
981079d581eSLawrence Tangsctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
982079d581eSLawrence Tang\hline
983079d581eSLawrence Tangspsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
984079d581eSLawrence Tang\hline
985079d581eSLawrence Tangspsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
986079d581eSLawrence Tang\hline
987079d581eSLawrence Tangspsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
988079d581eSLawrence Tang\hline
989079d581eSLawrence Tangspsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
990079d581eSLawrence Tang\hline
991079d581eSLawrence Tangspsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
992079d581eSLawrence Tang\hline
993079d581eSLawrence Tangspsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
994079d581eSLawrence Tang\hline
995079d581eSLawrence Tangtpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
996079d581eSLawrence Tang\hline
997079d581eSLawrence Tangtpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
998079d581eSLawrence Tang\hline
999079d581eSLawrence Tangtpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1000079d581eSLawrence Tang\hline
1001079d581eSLawrence Tangttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1002079d581eSLawrence Tang\hline
1003079d581eSLawrence Tangttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1004079d581eSLawrence Tang\hline
1005079d581eSLawrence Tangttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1006079d581eSLawrence Tang\hline
1007079d581eSLawrence Tangdacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1008079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
1009079d581eSLawrence Tang
1010079d581eSLawrence Tang% ARM AARCH32 EL2 Context Registers structure
1011079d581eSLawrence Tang\subsection{ARM AARCH32 EL2 Context Registers Structure}
1012079d581eSLawrence Tang\label{subsection:armaarch32el2contextregistersstructure}
1013079d581eSLawrence 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.
1014079d581eSLawrence Tang\jsontable{table:armaarch32el2contextregistersstructure}
1015079d581eSLawrence Tangelr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1016079d581eSLawrence Tang\hline
1017079d581eSLawrence Tanghamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1018079d581eSLawrence Tang\hline
1019079d581eSLawrence Tanghamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1020079d581eSLawrence Tang\hline
1021079d581eSLawrence Tanghcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1022079d581eSLawrence Tang\hline
1023079d581eSLawrence Tanghcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1024079d581eSLawrence Tang\hline
1025079d581eSLawrence Tanghdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1026079d581eSLawrence Tang\hline
1027079d581eSLawrence Tanghifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1028079d581eSLawrence Tang\hline
1029079d581eSLawrence Tanghpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1030079d581eSLawrence Tang\hline
1031079d581eSLawrence Tanghsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1032079d581eSLawrence Tang\hline
1033079d581eSLawrence Tanghtcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1034079d581eSLawrence Tang\hline
1035079d581eSLawrence Tanghtpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1036079d581eSLawrence Tang\hline
1037079d581eSLawrence Tanghttbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1038079d581eSLawrence Tang\hline
1039079d581eSLawrence Tangspsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1040079d581eSLawrence Tang\hline
1041079d581eSLawrence Tangvtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1042079d581eSLawrence Tang\hline
1043079d581eSLawrence Tangvttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1044079d581eSLawrence Tang\hline
1045079d581eSLawrence Tangdacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1046079d581eSLawrence Tang\hline
1047079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
1048079d581eSLawrence Tang
1049079d581eSLawrence Tang% ARM AARCH32 Secure Registers structure
1050079d581eSLawrence Tang\subsection{ARM AARCH32 Secure Registers Structure}
1051079d581eSLawrence Tang\label{subsection:armaarch32secureregistersstructure}
1052079d581eSLawrence 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.
1053079d581eSLawrence Tang\jsontable{table:armaarch32secureregistersstructure}
1054079d581eSLawrence Tangsctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1055079d581eSLawrence Tang\hline
1056079d581eSLawrence Tangspsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1057079d581eSLawrence Tang\jsontableend{ARM AARCH32 Secure Registers structure field table.}
1058079d581eSLawrence Tang
1059079d581eSLawrence Tang% ARM AARCH64 General Purpose Registers structure
1060079d581eSLawrence Tang\subsection{ARM AARCH64 General Purpose Registers Structure}
1061079d581eSLawrence Tang\label{subsection:armaarch64gprstructure}
1062079d581eSLawrence 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.
1063079d581eSLawrence Tang\jsontable{table:armaarch64gprstructure}
1064079d581eSLawrence Tangx0 & uint64 & Register X0.\\
1065079d581eSLawrence Tang\hline
1066079d581eSLawrence Tangx1 & uint64 & Register X1.\\
1067079d581eSLawrence Tang\hline
1068079d581eSLawrence Tangx2 & uint64 & Register X2.\\
1069079d581eSLawrence Tang\hline
1070079d581eSLawrence Tangx3 & uint64 & Register X3.\\
1071079d581eSLawrence Tang\hline
1072079d581eSLawrence Tangx4 & uint64 & Register X4.\\
1073079d581eSLawrence Tang\hline
1074079d581eSLawrence Tangx5 & uint64 & Register X5.\\
1075079d581eSLawrence Tang\hline
1076079d581eSLawrence Tangx6 & uint64 & Register X6.\\
1077079d581eSLawrence Tang\hline
1078079d581eSLawrence Tangx7 & uint64 & Register X7.\\
1079079d581eSLawrence Tang\hline
1080079d581eSLawrence Tangx8 & uint64 & Register X8.\\
1081079d581eSLawrence Tang\hline
1082079d581eSLawrence Tangx9 & uint64 & Register X9.\\
1083079d581eSLawrence Tang\hline
1084079d581eSLawrence Tangx10 & uint64 & Register X10.\\
1085079d581eSLawrence Tang\hline
1086079d581eSLawrence Tangx11 & uint64 & Register X11.\\
1087079d581eSLawrence Tang\hline
1088079d581eSLawrence Tangx12 & uint64 & Register X12.\\
1089079d581eSLawrence Tang\hline
1090079d581eSLawrence Tangx13 & uint64 & Register X13.\\
1091079d581eSLawrence Tang\hline
1092079d581eSLawrence Tangx14 & uint64 & Register X14.\\
1093079d581eSLawrence Tang\hline
1094079d581eSLawrence Tangx15 & uint64 & Register X15.\\
1095079d581eSLawrence Tang\hline
1096079d581eSLawrence Tangx16 & uint64 & Register X16.\\
1097079d581eSLawrence Tang\hline
1098079d581eSLawrence Tangx17 & uint64 & Register X17.\\
1099079d581eSLawrence Tang\hline
1100079d581eSLawrence Tangx18 & uint64 & Register X18.\\
1101079d581eSLawrence Tang\hline
1102079d581eSLawrence Tangx19 & uint64 & Register X19.\\
1103079d581eSLawrence Tang\hline
1104079d581eSLawrence Tangx20 & uint64 & Register X20.\\
1105079d581eSLawrence Tang\hline
1106079d581eSLawrence Tangx21 & uint64 & Register X21.\\
1107079d581eSLawrence Tang\hline
1108079d581eSLawrence Tangx22 & uint64 & Register X22.\\
1109079d581eSLawrence Tang\hline
1110079d581eSLawrence Tangx23 & uint64 & Register X23.\\
1111079d581eSLawrence Tang\hline
1112079d581eSLawrence Tangx24 & uint64 & Register X24.\\
1113079d581eSLawrence Tang\hline
1114079d581eSLawrence Tangx25 & uint64 & Register X25.\\
1115079d581eSLawrence Tang\hline
1116079d581eSLawrence Tangx26 & uint64 & Register X26.\\
1117079d581eSLawrence Tang\hline
1118079d581eSLawrence Tangx27 & uint64 & Register X27.\\
1119079d581eSLawrence Tang\hline
1120079d581eSLawrence Tangx28 & uint64 & Register X28.\\
1121079d581eSLawrence Tang\hline
1122079d581eSLawrence Tangx29 & uint64 & Register X29.\\
1123079d581eSLawrence Tang\hline
1124079d581eSLawrence Tangx30 & uint64 & Register X30.\\
1125079d581eSLawrence Tang\hline
1126079d581eSLawrence Tangsp & uint64 & Register SP.\\
1127079d581eSLawrence Tang\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
1128079d581eSLawrence Tang
1129079d581eSLawrence Tang% ARM AARCH64 EL1 Context Registers structure
1130079d581eSLawrence Tang\subsection{ARM AARCH64 EL1 Context Registers Structure}
1131079d581eSLawrence Tang\label{subsection:armaarch64el1contextregistersstructure}
1132079d581eSLawrence 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.
1133079d581eSLawrence Tang\jsontable{table:armaarch64el1contextregistersstructure}
1134079d581eSLawrence Tangelr\_el1 & uint64 & Register ELR (EL1).\\
1135079d581eSLawrence Tang\hline
1136079d581eSLawrence Tangesr\_el1 & uint64 & Register ESR (EL1).\\
1137079d581eSLawrence Tang\hline
1138079d581eSLawrence Tangfar\_el1 & uint64 & Register FAR (EL1).\\
1139079d581eSLawrence Tang\hline
1140079d581eSLawrence Tangisr\_el1 & uint64 & Register ISR (EL1).\\
1141079d581eSLawrence Tang\hline
1142079d581eSLawrence Tangmair\_el1 & uint64 & Register MAIR (EL1).\\
1143079d581eSLawrence Tang\hline
1144079d581eSLawrence Tangmidr\_el1 & uint64 & Register MIDR (EL1).\\
1145079d581eSLawrence Tang\hline
1146079d581eSLawrence Tangmpidr\_el1 & uint64 & Register MPIDR (EL1).\\
1147079d581eSLawrence Tang\hline
1148079d581eSLawrence Tangsctlr\_el1 & uint64 & Register SCTLR (EL1).\\
1149079d581eSLawrence Tang\hline
1150079d581eSLawrence Tangsp\_el0 & uint64 & Register SP (EL0).\\
1151079d581eSLawrence Tang\hline
1152079d581eSLawrence Tangsp\_el1 & uint64 & Register SP (EL1).\\
1153079d581eSLawrence Tang\hline
1154079d581eSLawrence Tangspsr\_el1 & uint64 & Register SPSR (EL1).\\
1155079d581eSLawrence Tang\hline
1156079d581eSLawrence Tangtcr\_el1 & uint64 & Register TCR (EL1).\\
1157079d581eSLawrence Tang\hline
1158079d581eSLawrence Tangtpidr\_el0 & uint64 & Register TPIDR (EL0).\\
1159079d581eSLawrence Tang\hline
1160079d581eSLawrence Tangtpidr\_el1 & uint64 & Register TPIDR (EL1).\\
1161079d581eSLawrence Tang\hline
1162079d581eSLawrence Tangtpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
1163079d581eSLawrence Tang\hline
1164079d581eSLawrence Tangttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
1165079d581eSLawrence Tang\hline
1166079d581eSLawrence Tangttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
1167079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
1168079d581eSLawrence Tang
1169079d581eSLawrence Tang% ARM AARCH64 EL2 Context Registers structure
1170079d581eSLawrence Tang\subsection{ARM AARCH64 EL2 Context Registers Structure}
1171079d581eSLawrence Tang\label{subsection:armaarch64el2contextregistersstructure}
1172079d581eSLawrence 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.
1173079d581eSLawrence Tang\jsontable{table:armaarch64el2contextregistersstructure}
1174079d581eSLawrence Tangelr\_el2 & uint64 & Register ELR (EL2).\\
1175079d581eSLawrence Tang\hline
1176079d581eSLawrence Tangesr\_el2 & uint64 & Register ESR (EL2).\\
1177079d581eSLawrence Tang\hline
1178079d581eSLawrence Tangfar\_el2 & uint64 & Register FAR (EL2).\\
1179079d581eSLawrence Tang\hline
1180079d581eSLawrence Tanghacr\_el2 & uint64 & Register HACR (EL2).\\
1181079d581eSLawrence Tang\hline
1182079d581eSLawrence Tanghcr\_el2 & uint64 & Register HCR (EL2).\\
1183079d581eSLawrence Tang\hline
1184079d581eSLawrence Tanghpfar\_el2 & uint64 & Register HPFAR (EL2).\\
1185079d581eSLawrence Tang\hline
1186079d581eSLawrence Tangmair\_el2 & uint64 & Register MAIR (EL2).\\
1187079d581eSLawrence Tang\hline
1188079d581eSLawrence Tangsctlr\_el2 & uint64 & Register SCTLR (EL2).\\
1189079d581eSLawrence Tang\hline
1190079d581eSLawrence Tangsp\_el2 & uint64 & Register SP (EL2).\\
1191079d581eSLawrence Tang\hline
1192079d581eSLawrence Tangspsr\_el2 & uint64 & Register SPSR (EL2).\\
1193079d581eSLawrence Tang\hline
1194079d581eSLawrence Tangtcr\_el2 & uint64 & Register TCR (EL2).\\
1195079d581eSLawrence Tang\hline
1196079d581eSLawrence Tangtpidr\_el2 & uint64 & Register TPIDR (EL2).\\
1197079d581eSLawrence Tang\hline
1198079d581eSLawrence Tangttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
1199079d581eSLawrence Tang\hline
1200079d581eSLawrence Tangvtcr\_el2 & uint64 & Register VTCR (EL2).\\
1201079d581eSLawrence Tang\hline
1202079d581eSLawrence Tangvttbr\_el2 & uint64 & Register VTTBR (EL2).\\
1203079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
1204079d581eSLawrence Tang
1205079d581eSLawrence Tang% ARM AARCH64 EL3 Context Registers structure
1206079d581eSLawrence Tang\subsection{ARM AARCH64 EL3 Context Registers Structure}
1207079d581eSLawrence Tang\label{subsection:armaarch64el3contextregistersstructure}
1208079d581eSLawrence 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.
1209079d581eSLawrence Tang\jsontable{table:armaarch64el3contextregistersstructure}
1210079d581eSLawrence Tangelr\_el3 & uint64 & Register ELR (EL3).\\
1211079d581eSLawrence Tang\hline
1212079d581eSLawrence Tangesr\_el3 & uint64 & Register ESR (EL3).\\
1213079d581eSLawrence Tang\hline
1214079d581eSLawrence Tangfar\_el3 & uint64 & Register FAR (EL3).\\
1215079d581eSLawrence Tang\hline
1216079d581eSLawrence Tangmair\_el3 & uint64 & Register MAIR (EL3).\\
1217079d581eSLawrence Tang\hline
1218079d581eSLawrence Tangsctlr\_el3 & uint64 & Register SCTLR (EL3).\\
1219079d581eSLawrence Tang\hline
1220079d581eSLawrence Tangsp\_el3 & uint64 & Register SP (EL3).\\
1221079d581eSLawrence Tang\hline
1222079d581eSLawrence Tangspsr\_el3 & uint64 & Register SPSR (EL3).\\
1223079d581eSLawrence Tang\hline
1224079d581eSLawrence Tangtcr\_el3 & uint64 & Register TCR (EL3).\\
1225079d581eSLawrence Tang\hline
1226079d581eSLawrence Tangtpidr\_el3 & uint64 & Register TPIDR (EL3).\\
1227079d581eSLawrence Tang\hline
1228079d581eSLawrence Tangttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
1229079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
1230079d581eSLawrence Tang
1231079d581eSLawrence Tang% ARM AARCH64 Miscellaneous Registers structure
1232079d581eSLawrence Tang\subsection{ARM AARCH64 Miscellaneous Registers Structure}
1233079d581eSLawrence Tang\label{subsection:armmiscregistersstructure}
1234079d581eSLawrence 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.
1235079d581eSLawrence Tang\jsontable{table:armmiscregistersstructure}
1236079d581eSLawrence TangmrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
1237079d581eSLawrence Tang\hline
1238079d581eSLawrence TangmrsEncoding.crm & uint64 & MRS Encoding CRm.\\
1239079d581eSLawrence Tang\hline
1240079d581eSLawrence TangmrsEncoding.crn & uint64 & MRS Encoding CRn.\\
1241079d581eSLawrence Tang\hline
1242079d581eSLawrence TangmrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
1243079d581eSLawrence Tang\hline
1244079d581eSLawrence TangmrsEncoding.o0 & uint64 & MRS Encoding O0.\\
1245079d581eSLawrence Tang\hline
1246079d581eSLawrence Tangvalue & uint64 & Value of the single register.\\
1247079d581eSLawrence Tang\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
1248079d581eSLawrence Tang
1249079d581eSLawrence Tang% ARM AARCH64 Unknown Registers structure
1250079d581eSLawrence Tang\subsection{ARM AARCH64 Unknown Registers Structure}
1251079d581eSLawrence Tang\label{subsection:armunknownregistersstructure}
1252079d581eSLawrence 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).
1253079d581eSLawrence Tang\jsontable{table:armunknownregistersstructure}
1254079d581eSLawrence Tangdata & string & A base64 representation of the unknown binary register array data.\\
1255079d581eSLawrence Tang\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
1256079d581eSLawrence Tang
1257079d581eSLawrence Tang% Memory error section.
1258079d581eSLawrence Tang\section{Memory Error Section}
1259079d581eSLawrence Tang\label{section:memoryerrorsection}
1260079d581eSLawrence 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 \}\}}.
1261079d581eSLawrence Tang\jsontable{table:memoryerrorsection}
1262079d581eSLawrence TangvalidationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\
1263079d581eSLawrence Tang\hline
1264079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1265079d581eSLawrence Tang\hline
1266079d581eSLawrence 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.\\
1267079d581eSLawrence Tang\hline
1268079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1269079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1270079d581eSLawrence Tang\hline
1271079d581eSLawrence Tangextended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\
1272079d581eSLawrence Tangextended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\
1273079d581eSLawrence Tangextended.chipIdentification & int & The ID of the related chip.\\
1274079d581eSLawrence Tang\hline
1275079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1276079d581eSLawrence Tang\hline
1277079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1278079d581eSLawrence Tang\hline
1279079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1280079d581eSLawrence Tang\hline
1281079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1282079d581eSLawrence Tang\hline
1283079d581eSLawrence TangmoduleRank & uint64 & The module or rank number of the offending memory error location.\\
1284079d581eSLawrence Tang\hline
1285079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1286079d581eSLawrence Tang\hline
1287079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1288079d581eSLawrence Tang\hline
1289079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1290079d581eSLawrence Tang\hline
1291079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1292079d581eSLawrence Tang\hline
1293079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1294079d581eSLawrence Tang\hline
1295079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1296079d581eSLawrence Tang\hline
1297079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1298079d581eSLawrence Tang\hline
1299079d581eSLawrence TangrankNumber & uint64 & The rank number of the memory error location.\\
1300079d581eSLawrence Tang\hline
1301079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1302079d581eSLawrence Tang\hline
1303079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1304079d581eSLawrence Tang\jsontableend{Memory Error structure field table.}
1305079d581eSLawrence Tang
1306079d581eSLawrence Tang% Memory error validation structure.
1307079d581eSLawrence Tang\subsection{Memory Error Validation Structure}
1308079d581eSLawrence Tang\label{subsection:memoryerrorvalidationstructure}
1309079d581eSLawrence TangThis structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields.
1310079d581eSLawrence Tang\jsontable{table:memoryerrorvalidationstructure}
1311079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1312079d581eSLawrence Tang\hline
1313079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1314079d581eSLawrence Tang\hline
1315079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1316079d581eSLawrence Tang\hline
1317079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1318079d581eSLawrence Tang\hline
1319079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1320079d581eSLawrence Tang\hline
1321079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1322079d581eSLawrence Tang\hline
1323079d581eSLawrence 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.\\
1324079d581eSLawrence Tang\hline
1325079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1326079d581eSLawrence Tang\hline
1327079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1328079d581eSLawrence Tang\hline
1329079d581eSLawrence TangmemoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1330079d581eSLawrence Tang\hline
1331079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1332079d581eSLawrence Tang\hline
1333079d581eSLawrence TangrankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1334079d581eSLawrence Tang\hline
1335079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1336079d581eSLawrence Tang\hline
1337079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1338079d581eSLawrence Tang\hline
1339079d581eSLawrence TangextendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1340079d581eSLawrence Tang\hline
1341079d581eSLawrence TangbankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1342079d581eSLawrence Tang\hline
1343079d581eSLawrence TangbankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1344079d581eSLawrence Tang\hline
1345079d581eSLawrence TangchipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1346079d581eSLawrence Tang\jsontableend{Memory Error validation structure field table.}
1347079d581eSLawrence Tang
1348079d581eSLawrence Tang% Memory error normal bank addressing structure.
1349079d581eSLawrence Tang\subsection{Memory Error Standard Bank Address Structure}
1350079d581eSLawrence Tang\label{subsection:memoryerrorstandardbankaddressstructure}
1351079d581eSLawrence 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".
1352079d581eSLawrence Tang\jsontable{table:memoryerrorstandardbankaddressstructure}
1353079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1354079d581eSLawrence Tang\jsontableend{Memory Error Standard Bank Address structure field table.}
1355079d581eSLawrence Tang
1356079d581eSLawrence Tang% Memory error address/group bank addressing structure.
1357079d581eSLawrence Tang\subsection{Memory Error Address/Group Bank Address Structure}
1358079d581eSLawrence Tang\label{subsection:memoryerroraddressgroupbankaddressstructure}
1359079d581eSLawrence 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".
1360079d581eSLawrence Tang\jsontable{table:memoryerroraddressgroupbankaddressstructure}
1361079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1362079d581eSLawrence Tang\hline
1363079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1364079d581eSLawrence Tang\jsontableend{Memory Error Address/Group Bank Address structure field table.}
1365079d581eSLawrence Tang
1366079d581eSLawrence Tang% Memory error 2 section.
1367079d581eSLawrence Tang\section{Memory Error 2 Section}
1368079d581eSLawrence Tang\label{section:memoryerror2section}
1369079d581eSLawrence 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 \}\}}.
1370079d581eSLawrence Tang\jsontable{table:memoryerror2section}
1371079d581eSLawrence TangvalidationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\
1372079d581eSLawrence Tang\hline
1373079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1374079d581eSLawrence Tang\hline
1375079d581eSLawrence 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.\\
1376079d581eSLawrence Tang\hline
1377079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1378079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1379079d581eSLawrence Tang\hline
1380079d581eSLawrence Tangstatus.value & int & The raw value of the memory error status.\\
1381079d581eSLawrence Tangstatus.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\
1382079d581eSLawrence Tang\hline
1383079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1384079d581eSLawrence Tang\hline
1385079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1386079d581eSLawrence Tang\hline
1387079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1388079d581eSLawrence Tang\hline
1389079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1390079d581eSLawrence Tang\hline
1391079d581eSLawrence Tangmodule & uint64 & The module of the offending memory error location.\\
1392079d581eSLawrence Tang\hline
1393079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1394079d581eSLawrence Tang\hline
1395079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1396079d581eSLawrence Tang\hline
1397079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1398079d581eSLawrence Tang\hline
1399079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1400079d581eSLawrence Tang\hline
1401079d581eSLawrence Tangrank & uint64 & The rank number of the error location.\\
1402079d581eSLawrence Tang\hline
1403079d581eSLawrence TangchipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\
1404079d581eSLawrence Tang\hline
1405079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1406079d581eSLawrence Tang\hline
1407079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1408079d581eSLawrence Tang\hline
1409079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1410079d581eSLawrence Tang\hline
1411079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1412079d581eSLawrence Tang\hline
1413079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1414079d581eSLawrence Tang\jsontableend{Memory Error 2 structure field table.}
1415079d581eSLawrence Tang
1416079d581eSLawrence Tang% Memory error 2 validation structure.
1417079d581eSLawrence Tang\subsection{Memory Error 2 Validation Structure}
1418079d581eSLawrence Tang\label{subsection:memoryerror2validationstructure}
1419079d581eSLawrence TangThis structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields.
1420079d581eSLawrence Tang\jsontable{table:memoryerror2validationstructure}
1421079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1422079d581eSLawrence Tang\hline
1423079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1424079d581eSLawrence Tang\hline
1425079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1426079d581eSLawrence Tang\hline
1427079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1428079d581eSLawrence Tang\hline
1429079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1430079d581eSLawrence Tang\hline
1431079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1432079d581eSLawrence Tang\hline
1433079d581eSLawrence 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.\\
1434079d581eSLawrence Tang\hline
1435079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1436079d581eSLawrence Tang\hline
1437079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1438079d581eSLawrence Tang\hline
1439079d581eSLawrence TangcolumnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1440079d581eSLawrence Tang\hline
1441079d581eSLawrence TangrankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1442079d581eSLawrence Tang\hline
1443079d581eSLawrence TangbitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1444079d581eSLawrence Tang\hline
1445079d581eSLawrence TangchipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1446079d581eSLawrence Tang\hline
1447079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1448079d581eSLawrence Tang\hline
1449079d581eSLawrence TangstatusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1450079d581eSLawrence Tang\hline
1451079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1452079d581eSLawrence Tang\hline
1453079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1454079d581eSLawrence Tang\hline
1455079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1456079d581eSLawrence Tang\hline
1457079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1458079d581eSLawrence Tang\hline
1459079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1460079d581eSLawrence Tang\hline
1461079d581eSLawrence TangbankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1462079d581eSLawrence Tang\hline
1463079d581eSLawrence TangbankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1464079d581eSLawrence Tang\jsontableend{Memory Error 2 validation structure field table.}
1465079d581eSLawrence Tang
1466079d581eSLawrence Tang% Memory error 2 normal bank addressing structure.
1467079d581eSLawrence Tang\subsection{Memory Error 2 Standard Bank Address Structure}
1468079d581eSLawrence Tang\label{subsection:memoryerror2standardbankaddressstructure}
1469079d581eSLawrence 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".
1470079d581eSLawrence Tang\jsontable{table:memoryerror2standardbankaddressstructure}
1471079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1472079d581eSLawrence Tang\jsontableend{Memory Error 2 Standard Bank Address structure field table.}
1473079d581eSLawrence Tang
1474079d581eSLawrence Tang% Memory error 2 address/group bank addressing structure.
1475079d581eSLawrence Tang\subsection{Memory Error 2 Address/Group Bank Address Structure}
1476079d581eSLawrence Tang\label{subsection:memoryerror2addressgroupbankaddressstructure}
1477079d581eSLawrence 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".
1478079d581eSLawrence Tang\jsontable{table:memoryerror2addressgroupbankaddressstructure}
1479079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1480079d581eSLawrence Tang\hline
1481079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1482079d581eSLawrence Tang\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.}
1483079d581eSLawrence Tang
1484079d581eSLawrence Tang% PCIe error section.
1485079d581eSLawrence Tang\section{PCIe Error Section}
1486079d581eSLawrence Tang\label{section:pcieerrorsection}
1487079d581eSLawrence 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 \}\}}.
1488079d581eSLawrence Tang\jsontable{table:pcieerrorsection}
1489079d581eSLawrence TangvalidationBits & object & A PCIe Error Validation structure as defined in Subsection \ref{subsection:pcieerrorvalidationstructure}.\\
1490079d581eSLawrence Tang\hline
1491079d581eSLawrence TangportType.value & uint64 & The raw value of the port type for this error.\\
1492079d581eSLawrence TangportType.name & string & The human readable name, if available, of the port type for this error.\\
1493079d581eSLawrence Tang\hline
1494079d581eSLawrence Tangversion.major & int & The major version number for the PCIe specification supported.\\
1495079d581eSLawrence Tangversion.minor & int & The minor version number for the PCIe specification supported.\\
1496079d581eSLawrence Tang\hline
1497079d581eSLawrence TangcommandStatus.commandRegister & uint64 & The PCI command register value.\\
1498079d581eSLawrence TangcommandStatus.statusRegister & uint64 & The PCI status register value.\\
1499079d581eSLawrence Tang\hline
1500079d581eSLawrence TangdeviceID & object & A PCIe Device ID structure as defined in Subsection \ref{subsection:pciedeviceidstructure}.\\
1501079d581eSLawrence Tang\hline
1502079d581eSLawrence TangdeviceSerialNumber & uint64 & The serial number of the device.\\
1503079d581eSLawrence Tang\hline
1504079d581eSLawrence TangbridgeControlStatus.secondaryStatusRegister & uint64 & The bridge secondary status register. \emph{This field is valid for bridges only.}\\
1505079d581eSLawrence Tang\hline
1506079d581eSLawrence TangbridgeControlStatus.controlRegister & uint64 & The bridge control register. \emph{This field is valid for bridges only.}\\
1507079d581eSLawrence Tang\hline
1508079d581eSLawrence 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).\\
1509079d581eSLawrence Tang\hline
1510079d581eSLawrence TangaerInfo & object & A PCIe AER Extended Capability structure, as defined in Subsection \ref{subsection:pcieaerecstructure}.\\
1511079d581eSLawrence Tang\jsontableend{PCIe Error structure field table.}
1512079d581eSLawrence Tang
1513079d581eSLawrence Tang% PCIe error validation structure.
1514079d581eSLawrence Tang\subsection{PCIe Error Validation Structure}
1515079d581eSLawrence Tang\label{subsection:pcieerrorvalidationstructure}
1516079d581eSLawrence TangThis structure describes which fields within a PCIe Error section (\ref{section:pcieerrorsection}) are valid, using boolean fields.
1517079d581eSLawrence Tang\jsontable{table:pcieerrorvalidationstructure}
1518079d581eSLawrence TangportTypeValid & boolean & Whether the "portType" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1519079d581eSLawrence Tang\hline
1520079d581eSLawrence TangversionValid & boolean & Whether the "version" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1521079d581eSLawrence Tang\hline
1522079d581eSLawrence TangcommandStatusValid & boolean & Whether the "commandStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1523079d581eSLawrence Tang\hline
1524079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1525079d581eSLawrence Tang\hline
1526079d581eSLawrence TangdeviceSerialNumberValid & boolean & Whether the "deviceSerialNumber" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1527079d581eSLawrence Tang\hline
1528079d581eSLawrence TangbridgeControlStatusValid & boolean & Whether the "bridgeControlStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1529079d581eSLawrence Tang\hline
1530079d581eSLawrence TangcapabilityStructureStatusValid & boolean & Whether the "capabilityStructure" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1531079d581eSLawrence Tang\hline
1532079d581eSLawrence TangaerInfoValid & boolean & Whether the "aerInfo" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1533079d581eSLawrence Tang\hline
1534079d581eSLawrence Tang\jsontableend{PCIe Error validation structure field table.}
1535079d581eSLawrence Tang
1536079d581eSLawrence Tang% PCIe Device ID structure.
1537079d581eSLawrence Tang\subsection{PCIe Device ID Structure}
1538079d581eSLawrence Tang\label{subsection:pciedeviceidstructure}
1539079d581eSLawrence TangThis structure describes a PCIe device ID, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1540079d581eSLawrence Tang\jsontable{table:pciedeviceidstructure}
1541079d581eSLawrence TangvendorID & uint64 & The vendor ID of the PCIe device.\\
1542079d581eSLawrence Tang\hline
1543079d581eSLawrence TangdeviceID & uint64 & The device ID of the PCIe device.\\
1544079d581eSLawrence Tang\hline
1545079d581eSLawrence TangclassCode & uint64 & The class code of the PCIe device.\\
1546079d581eSLawrence Tang\hline
1547079d581eSLawrence TangfunctionNumber & uint64 & The function number of the PCIe device.\\
1548079d581eSLawrence Tang\hline
1549079d581eSLawrence TangdeviceNumber & uint64 & The device number of the PCIe device.\\
1550079d581eSLawrence Tang\hline
1551079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the PCIe device.\\
1552079d581eSLawrence Tang\hline
1553079d581eSLawrence TangprimaryOrDeviceBusNumber & uint64 & The root port/bridge primary bus number or device bus number of the PCIe device.\\
1554079d581eSLawrence Tang\hline
1555079d581eSLawrence TangsecondaryBusNumber & uint64 & The root port/bridge secondary bus number of the PCIe device.\\
1556079d581eSLawrence Tang\hline
1557079d581eSLawrence TangslotNumber & uint64 & The slot number of the PCIe device.\\
1558079d581eSLawrence Tang\jsontableend{PCIe Device ID structure field table.}
1559079d581eSLawrence Tang
1560079d581eSLawrence Tang% PCIe Advanced Error Reporting Extended Capability structure.
1561079d581eSLawrence Tang\subsection{PCIe AER Extended Capability Structure}
1562079d581eSLawrence Tang\label{subsection:pcieaerecstructure}
1563079d581eSLawrence TangThis structure describes a PCIe Advanced Error Reporting Extended Capability structure, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1564079d581eSLawrence Tang\jsontable{table:pcieaerecstructure}
1565079d581eSLawrence TangcapabilityID & uint64 & The capability ID for this AER structure.\\
1566079d581eSLawrence Tang\hline
1567079d581eSLawrence TangcapabilityVersion & uint64 & The capability structure version for this AER structure.\\
1568079d581eSLawrence Tang\hline
1569079d581eSLawrence TanguncorrectableErrorStatusRegister & uint64 & The uncorrectable error status register value.\\
1570079d581eSLawrence Tang\hline
1571079d581eSLawrence TanguncorrectableErrorMaskRegister & uint64 & The uncorrectable error mask register value.\\
1572079d581eSLawrence Tang\hline
1573079d581eSLawrence TanguncorrectableErrorSeverityRegister & uint64 & The uncorrectable error severity register value.\\
1574079d581eSLawrence Tang\hline
1575079d581eSLawrence TangcorrectableErrorStatusRegister & uint64 & The correctable error status register value.\\
1576079d581eSLawrence Tang\hline
1577079d581eSLawrence TangcorrectableErrorMaskRegister & uint64 & The correctable error mask register value.\\
1578079d581eSLawrence Tang\hline
1579079d581eSLawrence TangaeccReg & uint64 & The AECC register value.\\
1580079d581eSLawrence Tang\hline
1581079d581eSLawrence TangheaderLogRegister & string & A base64-encoded binary dump of the header log register.\\
1582079d581eSLawrence Tang\hline
1583079d581eSLawrence TangrootErrorCommand & uint64 & The root error command.\\
1584079d581eSLawrence Tang\hline
1585079d581eSLawrence TangrootErrorStatus & uint64 & The root error status.\\
1586079d581eSLawrence Tang\hline
1587079d581eSLawrence TangerrorSourceIDRegister & uint64 & The error source ID register.\\
1588079d581eSLawrence Tang\hline
1589079d581eSLawrence TangcorrectableErrorSourceIDRegister & uint64 & The correctable error source ID register.\\
1590079d581eSLawrence Tang\jsontableend{PCIe AER Extended Capability structure field table.}
1591079d581eSLawrence Tang
1592079d581eSLawrence Tang% PCI/PCI-X Bus error section.
1593079d581eSLawrence Tang\section{PCI/PCI-X Bus Error Section}
1594079d581eSLawrence Tang\label{section:pcibuserrorsection}
1595079d581eSLawrence 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 \}\}}.
1596079d581eSLawrence Tang\jsontable{table:pcibuserrorsection}
1597079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Bus Error Validation structure, as described in Subsection \ref{subsection:pcibuserrorvalidationstructure}.\\
1598079d581eSLawrence Tang\hline
1599079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1600079d581eSLawrence Tang\hline
1601079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type for this bus error.\\
1602079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type for this bus error.\\
1603079d581eSLawrence Tang\hline
1604079d581eSLawrence TangbusID.busNumber & int & The bus number of this bus ID.\\
1605079d581eSLawrence TangbusID.segmentNumber & int & The segment number of this bus ID.\\
1606079d581eSLawrence Tang\hline
1607079d581eSLawrence TangbusAddress & uint64 & The memory or I/O address on the bus at the time of the error.\\
1608079d581eSLawrence Tang\hline
1609079d581eSLawrence TangbusData & uint64 & Data on the bus at the time of the error.\\
1610079d581eSLawrence Tang\hline
1611079d581eSLawrence TangbusCommandType & string & The type of command at the time of the error. Either "PCI" or "PCI-X".\\
1612079d581eSLawrence Tang\hline
1613079d581eSLawrence TangbusRequestorID & uint64 & The PCI bus requestor ID for the error.\\
1614079d581eSLawrence Tang\hline
1615079d581eSLawrence TangbusCompleterID & uint64 & The PCI bus completer ID for the error.\\
1616079d581eSLawrence Tang\hline
1617079d581eSLawrence TangtargetID & uint64 & The PCI bus intended target ID for the error.\\
1618079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error structure field table.}
1619079d581eSLawrence Tang
1620079d581eSLawrence Tang% PCI/PCI-X Bus error validation structure.
1621079d581eSLawrence Tang\subsection{PCI/PCI-X Bus Error Validation Structure}
1622079d581eSLawrence Tang\label{subsection:pcibuserrorvalidationstructure}
1623079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) are valid, using boolean fields.
1624079d581eSLawrence Tang\jsontable{table:pcibuserrorvalidationstructure}
1625079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1626079d581eSLawrence Tang\hline
1627079d581eSLawrence TangerrorTypeValid & boolean & Whether the "errorType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1628079d581eSLawrence Tang\hline
1629079d581eSLawrence TangbusIDValid & boolean & Whether the "busID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1630079d581eSLawrence Tang\hline
1631079d581eSLawrence TangbusAddressValid & boolean & Whether the "busAddress" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1632079d581eSLawrence Tang\hline
1633079d581eSLawrence TangbusDataValid & boolean & Whether the "busData" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1634079d581eSLawrence Tang\hline
1635079d581eSLawrence TangcommandValid & boolean & Whether the "busCommandType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1636079d581eSLawrence Tang\hline
1637079d581eSLawrence TangrequestorIDValid & boolean & Whether the "busRequestorID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1638079d581eSLawrence Tang\hline
1639079d581eSLawrence TangcompleterIDValid & boolean & Whether the "busCompleterID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1640079d581eSLawrence Tang\hline
1641079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1642079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error validation structure field table.}
1643079d581eSLawrence Tang
1644079d581eSLawrence Tang% PCI/PCI-X Component error section.
1645079d581eSLawrence Tang\section{PCI/PCI-X Component Error Section}
1646079d581eSLawrence Tang\label{section:pcicomponenterrorsection}
1647079d581eSLawrence 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 \}\}}.
1648079d581eSLawrence Tang\jsontable{table:pcicomponenterrorsection}
1649079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Component Error Validation structure, as defined in Subsection \ref{subsection:pcicomponenterrorvalidationstructure}.\\
1650079d581eSLawrence Tang\hline
1651079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1652079d581eSLawrence Tang\hline
1653079d581eSLawrence TangidInfo & object & A PCI/PCI-X Component ID structure, as defined in Subsection \ref{subsection:pcicomponentidstructure}.\\
1654079d581eSLawrence Tang\hline
1655079d581eSLawrence TangmemoryNumber & uint64 & The number of PCI/PCI-X component memory mapped register address/data pair values are present in this structure.\\
1656079d581eSLawrence Tang\hline
1657079d581eSLawrence TangioNumber & uint64 & The number of PCI/PCI-X component programmed I/O register address/data pair values are present in this structure.\\
1658079d581eSLawrence Tang\hline
1659079d581eSLawrence 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}.\\
1660079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error structure field table.}
1661079d581eSLawrence Tang
1662079d581eSLawrence Tang% PCI/PCI-X Component error validation structure.
1663079d581eSLawrence Tang\subsection{PCI/PCI-X Component Error Validation Structure}
1664079d581eSLawrence Tang\label{subsection:pcicomponenterrorvalidationstructure}
1665079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) are valid, using boolean fields.
1666079d581eSLawrence Tang\jsontable{table:pcicomponenterrorvalidationstructure}
1667079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1668079d581eSLawrence Tang\hline
1669079d581eSLawrence TangidInfoValid & boolean & Whether the "idInfo" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1670079d581eSLawrence Tang\hline
1671079d581eSLawrence TangmemoryNumberValid & boolean & Whether the "memoryNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1672079d581eSLawrence Tang\hline
1673079d581eSLawrence TangioNumberValid & boolean & Whether the "ioNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1674079d581eSLawrence Tang\hline
1675079d581eSLawrence TangregisterDataPairsValid & boolean & Whether the "registerDataPairs" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1676079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error validation structure field table.}
1677079d581eSLawrence Tang
1678079d581eSLawrence Tang% PCI/PCI-X Component ID structure.
1679079d581eSLawrence Tang\subsection{PCI/PCI-X Component ID Structure}
1680079d581eSLawrence Tang\label{subsection:pcicomponentidstructure}
1681079d581eSLawrence 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}).
1682079d581eSLawrence Tang\jsontable{table:pcicomponentidstructure}
1683079d581eSLawrence TangvendorID & uint64 & The vendor ID of this PCI/PCI-X component.\\
1684079d581eSLawrence Tang\hline
1685079d581eSLawrence TangdeviceID & uint64 & The device ID of this PCI/PCI-X component.\\
1686079d581eSLawrence Tang\hline
1687079d581eSLawrence TangclassCode & uint64 & The class code of this PCI/PCI-X component.\\
1688079d581eSLawrence Tang\hline
1689079d581eSLawrence TangfunctionNumber & uint64 & The function number of this PCI/PCI-X component.\\
1690079d581eSLawrence Tang\hline
1691079d581eSLawrence TangdeviceNumber & uint64 & The device number of this PCI/PCI-X component.\\
1692079d581eSLawrence Tang\hline
1693079d581eSLawrence TangbusNumber & uint64 & The bus number of this PCI/PCI-X component.\\
1694079d581eSLawrence Tang\hline
1695079d581eSLawrence TangsegmentNumber & uint64 & The segment number of this PCI/PCI-X component.\\
1696079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component ID structure field table.}
1697079d581eSLawrence Tang
1698079d581eSLawrence Tang% PCI/PCI-X Component Register Pair structure.
1699079d581eSLawrence Tang\subsection{PCI/PCI-X Component Register Pair Structure}
1700079d581eSLawrence Tang\label{subsection:pcicomponentregisterpairstructure}
1701079d581eSLawrence 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.
1702079d581eSLawrence Tang\jsontable{table:pcicomponentregisterpairstructure}
1703079d581eSLawrence TangfirstHalf & uint64 & The first 8 bytes of the 16 byte register pair structure.\\
1704079d581eSLawrence Tang\hline
1705079d581eSLawrence TangsecondHalf & uint64 & The second 8 bytes of the 16 byte register pair structure.\\
1706079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Register Pair structure field table.}
1707079d581eSLawrence Tang
1708079d581eSLawrence Tang% Firmware error section.
1709079d581eSLawrence Tang\section{Firmware Error Section}
1710079d581eSLawrence Tang\label{section:firmwareerrorsection}
1711079d581eSLawrence 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 \}\}}.
1712079d581eSLawrence Tang\jsontable{table:firmwareerrorsection}
1713079d581eSLawrence TangerrorRecordType.value & uint64 & The raw value of the type of firmware error record this is.\\
1714079d581eSLawrence TangerrorRecordType.name & string & The human readable name, if available, of the type of firmware error record this is.\\
1715079d581eSLawrence Tang\hline
1716079d581eSLawrence Tangrevision & int & The header revision of this record. For the referenced UEFI specification, this value is 2.\\
1717079d581eSLawrence Tang\hline
1718079d581eSLawrence 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.\\
1719079d581eSLawrence Tang\hline
1720079d581eSLawrence 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.\\
1721079d581eSLawrence Tang\jsontableend{Firmware Error structure field table.}
1722079d581eSLawrence Tang
1723079d581eSLawrence Tang% Generic DMAr error section.
1724079d581eSLawrence Tang\section{Generic DMAr Error Section}
1725079d581eSLawrence Tang\label{section:dmargenericerrorsection}
1726079d581eSLawrence 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 \}\}}.
1727079d581eSLawrence Tang\jsontable{table:dmargenericerrorsection}
1728079d581eSLawrence TangrequesterID & int & The device ID associated with the fault condition.\\
1729079d581eSLawrence Tang\hline
1730079d581eSLawrence TangsegmentNumber & int & The segment number associated with the device.\\
1731079d581eSLawrence Tang\hline
1732079d581eSLawrence TangfaultReason.value & uint64 & The raw value of the reason for the fault.\\
1733079d581eSLawrence TangfaultReason.name & string & The human readable name, if available, of the reason for the fault.\\
1734079d581eSLawrence TangfaultReason.description & string & A human readable description, if available, of the reason for the fault.\\
1735079d581eSLawrence Tang\hline
1736079d581eSLawrence TangaccessType.value & uint64 & The raw value of the access type that caused the fault.\\
1737079d581eSLawrence TangaccessType.name & string & The human readable name, if available, of the access type that caused the fault.\\
1738079d581eSLawrence Tang\hline
1739079d581eSLawrence TangaddressType.value & uint64 & The raw value of the addressing type that caused the fault.\\
1740079d581eSLawrence TangaddressType.name & string & The human readable name, if available, of the addressing type that caused the fault.\\
1741079d581eSLawrence Tang\hline
1742079d581eSLawrence TangarchitectureType.value & uint64 & The raw value of the DMAr architecture type.\\
1743079d581eSLawrence TangarchitectureType.name & string & The human readable name, if available, of the DMAr architecture type.\\
1744079d581eSLawrence Tang\hline
1745079d581eSLawrence TangdeviceAddress & uint64 & The 64-bit device virtual address contained in the faulted DMA request.\\
1746079d581eSLawrence Tang\jsontableend{Generic DMAr Error structure field table.}
1747079d581eSLawrence Tang
1748079d581eSLawrence Tang% VT-d DMAr error section.
1749079d581eSLawrence Tang\section{VT-d DMAr Error Section}
1750079d581eSLawrence Tang\label{section:vtddmarerrorsection}
1751079d581eSLawrence 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 \}\}}.
1752079d581eSLawrence Tang\jsontable{table:vtddmarerrorsection}
1753079d581eSLawrence Tangversion & int & Version register value as defined in the VT-d specification.\\
1754079d581eSLawrence Tang\hline
1755079d581eSLawrence Tangrevision & int & Revision field in VT-d specific DMA remapping reporting structure.\\
1756079d581eSLawrence Tang\hline
1757079d581eSLawrence TangoemID & uint64 & OEM ID field in VT-d specific DMA remapping reporting structure.\\
1758079d581eSLawrence Tang\hline
1759079d581eSLawrence TangcapabilityRegister & uint64 & Value of VT-d capability register.\\
1760079d581eSLawrence Tang\hline
1761079d581eSLawrence TangextendedCapabilityRegister & uint64 & Value of VT-d extended capability register.\\
1762079d581eSLawrence Tang\hline
1763079d581eSLawrence TangglobalCommandRegister & uint64 & Value of VT-d global command register.\\
1764079d581eSLawrence Tang\hline
1765079d581eSLawrence TangglobalStatusRegister & uint64 & Value of VT-d global status register.\\
1766079d581eSLawrence Tang\hline
1767079d581eSLawrence TangfaultStatusRegister & uint64 & Value of VT-d fault status register.\\
1768079d581eSLawrence Tang\hline
1769079d581eSLawrence TangfaultRecord & object & A VT-d DMAR Fault Record structure, as defined in Subsection \ref{subsection:vtddmarfaultrecordstructure}.\\
1770079d581eSLawrence Tang\hline
1771079d581eSLawrence TangrootEntry & string & A base64-represented binary dump of the root entry table for the associated requester ID.\\
1772079d581eSLawrence Tang\hline
1773079d581eSLawrence TangcontextEntry & string & A base64-represented binary dump of the context entry table for the associated requester ID.\\
1774079d581eSLawrence Tang\hline
1775079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & The page table entry for the device virtual address in page level 6.\\
1776079d581eSLawrence Tang\hline
1777079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & The page table entry for the device virtual address in page level 5.\\
1778079d581eSLawrence Tang\hline
1779079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & The page table entry for the device virtual address in page level 4.\\
1780079d581eSLawrence Tang\hline
1781079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & The page table entry for the device virtual address in page level 3.\\
1782079d581eSLawrence Tang\hline
1783079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & The page table entry for the device virtual address in page level 2.\\
1784079d581eSLawrence Tang\hline
1785079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & The page table entry for the device virtual address in page level 1.\\
1786079d581eSLawrence Tang\jsontableend{VT-d DMAr Error structure field table.}
1787079d581eSLawrence Tang
1788079d581eSLawrence Tang% VT-d DMAR Fault Record structure.
1789079d581eSLawrence Tang\subsection{VT-d DMAR Fault Record Structure}
1790079d581eSLawrence Tang\label{subsection:vtddmarfaultrecordstructure}
1791079d581eSLawrence TangThis structure describes a fault record, which forms part of a single VT-d DMAr Error section (\ref{section:vtddmarerrorsection}).
1792079d581eSLawrence Tang\jsontable{table:vtddmarfaultrecordstructure}
1793079d581eSLawrence TangfaultInformation & uint64 & Fault information field as defined in the VT-d specification.\\
1794079d581eSLawrence Tang\hline
1795079d581eSLawrence TangsourceIdentifier & uint64 & Identifier of the source of the VT-d fault.\\
1796079d581eSLawrence Tang\hline
1797079d581eSLawrence TangprivelegeModeRequested & boolean & Whether privelege mode was requested.\\
1798079d581eSLawrence Tang\hline
1799079d581eSLawrence TangexecutePermissionRequested & boolean & Whether execute permission was requested.\\
1800079d581eSLawrence Tang\hline
1801079d581eSLawrence TangpasidPresent & boolean & Whether the "pasidValue" field contains valid data.\\
1802079d581eSLawrence Tang\hline
1803079d581eSLawrence TangfaultReason & uint64 & The reason for the VT-d fault, as defined in the VT-d specification.\\
1804079d581eSLawrence Tang\hline
1805079d581eSLawrence TangpasidValue & uint64 & The PASID associated with the fault.\\
1806079d581eSLawrence Tang\hline
1807079d581eSLawrence TangaddressType & uint64 & The addressing type of the fault, as defined by the VT-d specification.\\
1808079d581eSLawrence Tang\hline
1809079d581eSLawrence Tangtype.value & uint64 & The raw value of the type of VT-d fault record.\\
1810079d581eSLawrence Tangtype.name & string & The human readable name, if available, of the type of VT-d fault record.\\
1811079d581eSLawrence Tang\jsontableend{VT-d DMAR Fault Record structure field table.}
1812079d581eSLawrence Tang
1813079d581eSLawrence Tang% IOMMU DMAr error section.
1814079d581eSLawrence Tang\section{IOMMU DMAr Error Section}
1815079d581eSLawrence Tang\label{section:iommudmarerrorsection}
1816079d581eSLawrence 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 \}\}}.
1817079d581eSLawrence Tang\jsontable{table:iommudmarerrorsection}
1818079d581eSLawrence Tangrevision & int & The IOMMU specification revision.\\
1819079d581eSLawrence Tang\hline
1820079d581eSLawrence TangcontrolRegister & uint64 & The IOMMU control register value.\\
1821079d581eSLawrence Tang\hline
1822079d581eSLawrence TangstatusRegister & uint64 & The IOMMU status register value.\\
1823079d581eSLawrence Tang\hline
1824079d581eSLawrence TangeventLogEntry & string & A base-64 binary dump of the IOMMU fault-related event log entry, as defined in the IOMMU specification.\\
1825079d581eSLawrence Tang\hline
1826079d581eSLawrence TangdeviceTableEntry & string & A base-64 representation of the value from the device table for a given requester ID.\\
1827079d581eSLawrence Tang\hline
1828079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & Page table entry for device virtual address in page level 6.\\
1829079d581eSLawrence Tang\hline
1830079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & Page table entry for device virtual address in page level 5.\\
1831079d581eSLawrence Tang\hline
1832079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & Page table entry for device virtual address in page level 4.\\
1833079d581eSLawrence Tang\hline
1834079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & Page table entry for device virtual address in page level 3.\\
1835079d581eSLawrence Tang\hline
1836079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & Page table entry for device virtual address in page level 2.\\
1837079d581eSLawrence Tang\hline
1838079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & Page table entry for device virtual address in page level 1.\\
1839079d581eSLawrence Tang\jsontableend{IOMMU DMAr Error structure field table.}
1840079d581eSLawrence Tang
1841079d581eSLawrence Tang% CCIX PER error section.
1842079d581eSLawrence Tang\section{CCIX PER Error Section}
1843079d581eSLawrence Tang\label{section:ccixpererrorsection}
1844079d581eSLawrence 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 \}\}}.
1845079d581eSLawrence Tang\jsontable{table:ccixpererrorsection}
1846079d581eSLawrence Tanglength & uint64 & The length (in bytes) of the entire structure.\\
1847079d581eSLawrence Tang\hline
1848079d581eSLawrence TangvalidationBits & object & A CCIX PER Validation structure as described in Subsection \ref{subsection:ccixpervalidationstructure}.\\
1849079d581eSLawrence Tang\hline
1850079d581eSLawrence 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.\\
1851079d581eSLawrence Tang\hline
1852079d581eSLawrence TangccixPortID & int & The CCIX Port ID that reported this error.\\
1853079d581eSLawrence Tang\hline
1854079d581eSLawrence 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).\\
1855079d581eSLawrence Tang\jsontableend{CCIX PER Error structure field table.}
1856079d581eSLawrence Tang
1857079d581eSLawrence Tang% CCIX PER Validation structure.
1858079d581eSLawrence Tang\subsection{CCIX PER Validation Structure}
1859079d581eSLawrence Tang\label{subsection:ccixpervalidationstructure}
1860079d581eSLawrence TangThis structure describes which fields are valid in a CCIX PER Error section (\ref{section:ccixpererrorsection}) using boolean fields.
1861079d581eSLawrence Tang\jsontable{table:ccixpervalidationstructure}
1862079d581eSLawrence TangccixSourceIDValid & boolean & Whether the "ccixSourceID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1863079d581eSLawrence Tang\hline
1864079d581eSLawrence TangccixPortIDValid & boolean & Whether the "ccixPortID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1865079d581eSLawrence Tang\hline
1866079d581eSLawrence TangccixPERLogValid & boolean & Whether the "ccixPERLog" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1867079d581eSLawrence Tang\jsontableend{CCIX PER validation structure field table.}
1868079d581eSLawrence Tang
1869079d581eSLawrence Tang% CXL Protocol error section.
1870079d581eSLawrence Tang\section{CXL Protocol Error Section}
1871079d581eSLawrence Tang\label{section:cxlprotocolerrorsection}
1872079d581eSLawrence 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 \}\}}.
1873079d581eSLawrence Tang\jsontable{table:cxlprotocolerrorsection}
1874079d581eSLawrence TangvalidationBits & object & A CXL Protocol Validation structure as defined in Subsection \ref{subsection:cxlprotocolvalidationstructure}.\\
1875079d581eSLawrence Tang\hline
1876079d581eSLawrence TangagentType.value & uint64 & The raw value of the detecting CXL agent type.\\
1877079d581eSLawrence TangagentType.name & string & The human readable name, if available, of the CXL agent type.\\
1878079d581eSLawrence Tang\hline
1879079d581eSLawrence TangagentAddress & object & One of the structures described in Subsection \ref{subsection:cxlprotocoldeviceagentaddressstructure} or Subsection \ref{subsection:cxlprotocolrcrbaddressstructure}. Included structure is dependent on the \texttt{agentType.value} field.\\
1880079d581eSLawrence Tang\hline
1881079d581eSLawrence TangdeviceID & object & A CXL Device ID structure, as defined in Subsection \ref{subsection:cxlprotocoldeviceidstructure}.\\
1882079d581eSLawrence Tang\hline
1883079d581eSLawrence 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).\\
1884079d581eSLawrence Tang\hline
1885079d581eSLawrence TangcapabilityStructure & string & A base64-encoded binary dump of the CXL device's PCIe capability structure. This could either be a PCIe 1.1 Capability Structure (36-byte, padded to 60 bytes), or a PCIe 2.0 Capability Structure (60-byte). Only included if the detecting device is a CXL device (field \texttt{agentType.value} has value 0).\\
1886079d581eSLawrence Tang\hline
1887079d581eSLawrence TangdvsecLength & int & Length (in bytes) of the CXL DVSEC structure.\\
1888079d581eSLawrence Tang\hline
1889079d581eSLawrence TangerrorLogLength & int & Length (in bytes) of the CXL Error Log structure.\\
1890079d581eSLawrence Tang\hline
1891079d581eSLawrence 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.\\
1892079d581eSLawrence Tang\hline
1893079d581eSLawrence 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.\\
1894079d581eSLawrence Tang\jsontableend{CXL Protocol Error structure field table.}
1895079d581eSLawrence Tang
1896079d581eSLawrence Tang% CXL Protocol Validation structure.
1897079d581eSLawrence Tang\subsection{CXL Protocol Validation Structure}
1898079d581eSLawrence Tang\label{subsection:cxlprotocolvalidationstructure}
1899079d581eSLawrence TangThis structure describes which fields are valid in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) using boolean fields.
1900079d581eSLawrence Tang\jsontable{table:cxlprotocolvalidationstructure}
1901079d581eSLawrence TangcxlAgentTypeValid & boolean & Whether the "cxlAgentType" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1902079d581eSLawrence Tang\hline
1903079d581eSLawrence TangcxlAgentAddressValid & boolean & Whether the "cxlAgentAddress" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1904079d581eSLawrence Tang\hline
1905079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1906079d581eSLawrence Tang\hline
1907079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1908079d581eSLawrence Tang\hline
1909079d581eSLawrence TangcapabiltyStructureValid & boolean & Whether the "capabilityStructure" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1910079d581eSLawrence Tang\hline
1911079d581eSLawrence TangcxlDVSECValid & boolean & Whether the "cxlDVSEC" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1912079d581eSLawrence Tang\hline
1913079d581eSLawrence TangcxlErrorLogValid & boolean & Whether the "cxlErrorLog" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1914079d581eSLawrence Tang\jsontableend{CXL Protocol validation structure field table.}
1915079d581eSLawrence Tang
1916079d581eSLawrence Tang% CXL Protocol Device Agent Address structure.
1917079d581eSLawrence Tang\subsection{CXL Protocol Device Agent Address Structure}
1918079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceagentaddressstructure}
1919079d581eSLawrence 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".
1920079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceagentaddressstructure}
1921079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL device.\\
1922079d581eSLawrence Tang\hline
1923079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL device.\\
1924079d581eSLawrence Tang\hline
1925079d581eSLawrence TangbusNumber & uint64 & The bus number of the CXL device.\\
1926079d581eSLawrence Tang\hline
1927079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the CXL device.\\
1928079d581eSLawrence Tang\jsontableend{CXL Protocol Device Agent Address structure field table.}
1929079d581eSLawrence Tang
1930079d581eSLawrence Tang% CXL Protocol RCRB Base Address structure.
1931079d581eSLawrence Tang\subsection{CXL Protocol RCRB Base Address Structure}
1932079d581eSLawrence Tang\label{subsection:cxlprotocolrcrbaddressstructure}
1933079d581eSLawrence 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".
1934079d581eSLawrence Tang\jsontable{table:cxlprotocolrcrbaddressstructure}
1935079d581eSLawrence Tangvalue & uint64 & The CXL port RCRB base address.\\
1936079d581eSLawrence Tang\jsontableend{CXL Protocol RCRB Base Address structure field table.}
1937079d581eSLawrence Tang
1938079d581eSLawrence Tang% CXL Protocol Device ID structure.
1939079d581eSLawrence Tang\subsection{CXL Protocol Device ID Structure}
1940079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceidstructure}
1941079d581eSLawrence TangThis structure describes the ID of a CXL device, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}).
1942079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceidstructure}
1943079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL device.\\
1944079d581eSLawrence Tang\hline
1945079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL device.\\
1946079d581eSLawrence Tang\hline
1947079d581eSLawrence TangsubsystemVendorID & uint64 & The subsystem vendor ID of the CXL device.\\
1948079d581eSLawrence Tang\hline
1949079d581eSLawrence TangsubsystemDeviceID & uint64 & The subsystem device ID of the CXL device.\\
1950079d581eSLawrence Tang\hline
1951079d581eSLawrence TangclassCode & uint64 & The class code of the CXL device.\\
1952079d581eSLawrence Tang\hline
1953079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL device.\\
1954079d581eSLawrence Tang\jsontableend{CXL Protocol Device ID structure field table.}
1955079d581eSLawrence Tang
1956079d581eSLawrence Tang% CXL Component error section.
1957079d581eSLawrence Tang\section{CXL Component Error Section}
1958079d581eSLawrence Tang\label{section:cxlcomponenterrorsection}
1959079d581eSLawrence 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:\\
1960079d581eSLawrence Tang\begin{itemize}
1961079d581eSLawrence Tang    \item CXL General Media Error (\texttt{\{ 0xfbcd0a77, 0xc260, 0x417f, \{ 0x85, 0xa9, 0x08, 0x8b, 0x16, 0x21, 0xeb, 0xa6 \}\}})\\
1962079d581eSLawrence Tang    \item CXL DRAM Event Error (\texttt{\{ 0x601dcbb3, 0x9c06, 0x4eab, \{ 0xb8, 0xaf, 0x4e, 0x9b, 0xfb, 0x5c, 0x96, 0x24 \}\}})\\
1963079d581eSLawrence Tang    \item CXL Memory Module Error (\texttt{\{ 0xfe927475, 0xdd59, 0x4339, \{ 0xa5, 0x86, 0x79, 0xba, 0xb1, 0x13, 0xb7, 0x74 \}\}})\\
1964079d581eSLawrence Tang    \item CXL Physical Switch Error (\texttt{\{ 0x77cf9271, 0x9c02, 0x470b, \{ 0x9f, 0xe4, 0xbc, 0x7b, 0x75, 0xf2, 0xda, 0x97 \}\}})\\
1965079d581eSLawrence Tang    \item CXL Virtual Switch Error (\texttt{\{ 0x40d26425, 0x3396, 0x4c4d, \{ 0xa5, 0xda, 0x3d, 0x47, 0x26, 0x3a, 0xf4, 0x25 \}\}})\\
1966079d581eSLawrence Tang    \item CXL MLD Port Error (\texttt{\{ 0x8dc44363, 0x0c96, 0x4710, \{ 0xb7, 0xbf, 0x04, 0xbb, 0x99, 0x53, 0x4c, 0x3f \}\}})\\
1967079d581eSLawrence Tang\end{itemize}
1968079d581eSLawrence Tang\jsontable{table:cxlcomponenterrorsection}
1969079d581eSLawrence TangvalidationBits & object & A CXL Component Validation structure as described in Subsection \ref{subsection:cxlcomponentvalidationstructure}.\\
1970079d581eSLawrence Tang\hline
1971079d581eSLawrence TangdeviceID & object & A CXL Component Device ID structure as described in Subsection \ref{subsection:cxlcomponentdeviceidstructure}.\\
1972079d581eSLawrence Tang\hline
1973079d581eSLawrence TangdeviceSerial & uint64 & The serial of the CXL component.\\
1974079d581eSLawrence Tang\hline
1975079d581eSLawrence 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.\\
1976079d581eSLawrence Tang\jsontableend{CXL Component Error structure field table.}
1977079d581eSLawrence Tang
1978079d581eSLawrence Tang% CXL Component Validation structure.
1979079d581eSLawrence Tang\subsection{CXL Component Validation Structure}
1980079d581eSLawrence Tang\label{subsection:cxlcomponentvalidationstructure}
1981079d581eSLawrence TangThis structure describes which fields are valid in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}) using boolean fields.
1982079d581eSLawrence Tang\jsontable{table:cxlcomponentvalidationstructure}
1983079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1984079d581eSLawrence Tang\hline
1985079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1986079d581eSLawrence Tang\hline
1987079d581eSLawrence TangcxlComponentEventLogValid & boolean & Whether the "cxlComponentEventLog" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1988079d581eSLawrence Tang\jsontableend{CXL Component validation structure field table.}
1989079d581eSLawrence Tang
1990079d581eSLawrence Tang% CXL Component Device ID structure.
1991079d581eSLawrence Tang\subsection{CXL Component Device ID Structure}
1992079d581eSLawrence Tang\label{subsection:cxlcomponentdeviceidstructure}
1993079d581eSLawrence TangThis structure describes the ID of a CXL component, for use in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}).
1994079d581eSLawrence Tang\jsontable{table:cxlcomponentdeviceidstructure}
1995079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL component.\\
1996079d581eSLawrence Tang\hline
1997079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL component.\\
1998079d581eSLawrence Tang\hline
1999079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL component.\\
2000079d581eSLawrence Tang\hline
2001079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL component.\\
2002079d581eSLawrence Tang\hline
2003079d581eSLawrence TangbusNumber & uint64 & The bus of the CXL component.\\
2004079d581eSLawrence Tang\hline
2005079d581eSLawrence TangsegmentNumber & uint64 & The segment of the CXL component.\\
2006079d581eSLawrence Tang\hline
2007079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL component.\\
2008079d581eSLawrence Tang\jsontableend{CXL Component Device ID structure field table.}
2009079d581eSLawrence Tang
2010*b44314c7SLawrence Tang% Undefined error section.
2011*b44314c7SLawrence Tang\section{Undefined Error Section}
2012*b44314c7SLawrence Tang\label{section:undefinederrorsection}
2013*b44314c7SLawrence 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.
2014*b44314c7SLawrence Tang\jsontable{table:ccixpererrorsection}
2015*b44314c7SLawrence Tangdata & string & A base64-encoded binary dump of the undefined CPER section.\\
2016*b44314c7SLawrence Tang\jsontableend{Undefined Error structure field table.}
2017*b44314c7SLawrence Tang
2018079d581eSLawrence Tang\end{document}