1\documentclass{report}
2\usepackage{hyperref}
3\usepackage{adjustbox}
4\usepackage{placeins}
5
6% Metadata.
7\title{CPER-JSON Specification}
8\author{\parbox{\linewidth}{\centering%
9Lawrence Tang\endgraf
10Lawrence.Tang@arm.com\endgraf\medskip}}
11\date{\parbox{\linewidth}{\centering%
12Revision v0.0.1 (\today)\endgraf
13First revision released [DATE].}}
14
15% Commands.
16\newcommand*{\thead}[1]{\multicolumn{1}{|c|}{\bfseries #1}}
17\newcommand*{\jsontable}[1]{
18    \begin{table}[!ht]
19    \label{#1}
20    \centering
21    \begin{adjustbox}{center}
22    \begin{tabular}{|l|c|p{8cm}|}
23    \hline
24    \thead{Field Name} & \thead{Type} & \thead{Description} \\
25    \hline
26}
27\newcommand*{\jsontableend}[1]{
28    \hline
29    \end{tabular}
30    \end{adjustbox}
31    \caption{#1}
32    \label{table:#1}
33    \end{table}
34    \FloatBarrier
35}
36
37\begin{document}
38\maketitle
39\tableofcontents
40\listoftables
41
42% Introductory section.
43\chapter{Preface}
44\section{Introduction \& Summary}
45This document lays out a structure for representing UEFI CPER records, as described in UEFI Appendix N
46\footnote{Version referenced is \href{https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf}{UEFI Specification 2021/03/18}.},
47 in a human-readable JSON format, intended to be interoperable with standard CPER binary.
48\\\\
49The C library released with this specification allows for the conversion between UEFI CPER records, an intermediate format, and the JSON structures
50defined in this document. There is also a comprehensive JSON schema\footnote{As defined by \href{https://json-schema.org/draft/2020-12/json-schema-core.html}{JSON schema Draft (2020/12)}} included within the same repository, at \texttt{specification/json}.
51
52% Specification section.
53\chapter{Main Structure Specification}
54\section{Parent Structure}
55\label{section:parentstructure}
56This structure contains descriptions of the CPER log header, as well as the section descriptors and
57section structures themselves within arrays. This is the structure returned by \texttt{cper\_to\_ir(FILE* cper\_file)} as JSON IR.
58
59% Parent structure table.
60\jsontable{table:parentstructure}
61header & object & A CPER header structure as defined in Section \ref{section:headerstructure}. \\
62\hline
63sectionDescriptors & array & An array of section descriptor objects as defined in Section \ref{section:sectiondescriptorstructure}. \\
64\hline
65sections & array & An array of section objects as defined in Chapter \ref{chapter:sectionchapter}. These sections are at the same index as their corresponding section descriptor within the \texttt{sectionDescriptors} array.\\
66\jsontableend{Parent structure field table.}
67
68% Header structure.
69\section{Header Structure}
70\label{section:headerstructure}
71This structure describes the JSON format of the standard CPER header as defined in section N.2.1 of the
72UEFI specification.
73
74% Header structure table.
75\jsontable{table:headerstructure}
76revision & object & A CPER revision object structure as defined in Subsection \ref{subsection:revisionstructure}. \\
77\hline
78sectionCount & int & The number of sections that are described by the CPER record.\\
79\hline
80severity & object & An error severity structure as described in \ref{subsection:headererrorseveritystructure}.\\
81\hline
82validationBits & object & A CPER header validation bitfield as described in Subsection \ref{subsection:headervalidbitfieldstructure}.\\
83\hline
84recordLength & uint64 & The total length of the binary CPER record, including the header, in bytes.\\
85\hline
86timestamp & string (\textbf{optional}) & The attached record timestamp, if the validity field is set. Formatted identically to \texttt{Date.toJson()} (ISO 8601), minus the trailing timezone letter. Timezone is local to the machine creating the record.\\
87\hline
88timestampIsPrecise & boolean (\textbf{optional}) & If a timestamp is attached, indicates whether the provided timestamp is precise.\\
89\hline
90platformID & string (\textbf{optional}) & If validation bit is set, uniquely identifying GUID of the platform. Platform SMBIOS UUID should be used to populate this field.\\
91\hline
92partitionID & string (\textbf{optional}) & If validation bit is set, GUID identifying the partition on which the error occurred.\\
93\hline
94creatorID & string & A GUID identifying the creator of the error record. May be overwritten by subsequent owners of the record.\\
95\hline
96notificationType & object & A CPER notification type structure as described in Subsection \ref{subsection:notificationtypestructure}.\\
97\hline
98recordID & uint64 & A unique value which, when combined with the \texttt{creatorID} field, uniquely identifies this error record on a given system.\\
99\hline
100flags & object & A CPER header flags structure, as defined in Subsection \ref{subsection:headerflagsstructure}.\\
101\hline
102persistenceInfo & uint64 & Produced and consumed by the creator of the error record identified by \texttt{creatorID}. Format undefined.\\
103\jsontableend{Header structure field table.}
104
105% Header error severity.
106\subsection{Header Error Severity Structure}
107\label{subsection:headererrorseveritystructure}
108This structure describes the error severity of a single CPER record.
109\jsontable{table:headererrorseveritystructure}
110name & string & The human readable name of this error severity, if known. \\
111\hline
112code & uint64 & The integer value of this error severity. \\
113\jsontableend{Header error severity structure field table.}
114
115% Header validation bitfield.
116\subsection{Header Validation Bitfield Structure}
117\label{subsection:headervalidbitfieldstructure}
118This structure describes a bitfield for validating the fields of the header of a single CPER record.
119\jsontable{table:headervalidbitfieldstructure}
120platformIDValid & boolean & Whether the "platformID" field in the header structure (\ref{section:headerstructure}) is valid. \\
121\hline
122timestampValid & boolean & Whether the "timestamp" field in the header structure (\ref{section:headerstructure}) is valid. \\
123\hline
124partitionIDValid & boolean & Whether the "partitionID" field in the header structure (\ref{section:headerstructure}) is valid.\\
125\jsontableend{Header validation bitfield structure field table.}
126
127% Header notification type.
128\subsection{Notification Type Structure}
129\label{subsection:notificationtypestructure}
130This structure describes the notification type of a single CPER record.
131\jsontable{table:notificationtypestructure}
132guid & string & The GUID of this notification type. Assigned GUIDs for types of CPER records are defined in UEFI Specification section N.2.1.1.\\
133\hline
134type & string & A human readable name, if available, of the notification type for the given GUID.\\
135\jsontableend{Notification type structure field table.}
136
137% Header flags.
138\subsection{Header Flags Structure}
139\label{subsection:headerflagsstructure}
140This structure describes the enabled flag on a given CPER record header.
141\jsontable{table:headerflagsstructure}
142name & string & A human readable name, if available, of this flag.\\
143\hline
144value & uint64 & The integer value of this flag.\\
145\jsontableend{Header flags structure field table.}
146
147%Section descriptor structure.
148\section{Section Descriptor Structure}
149\label{section:sectiondescriptorstructure}
150This section describes the JSON format of a single CPER record section descriptor as defined by section N.2.2 of the UEFI specification. An array of these structures is contained within the parent structure as defined in Section \ref{section:parentstructure}.
151
152%Section descriptor structure table.
153\jsontable{table:sectiondescriptorstructure}
154sectionOffset & uint64 & The offset (in bytes) of the section body this section descriptor describes from the base of the record header.\\
155\hline
156sectionLength & uint64 & The length (in bytes) of the section body.\\
157\hline
158revision & object & A CPER revision structure as defined in Subsection \ref{subsection:revisionstructure}.\\
159\hline
160validationBits.fruIDValid & boolean & Whether the "fruID" field on this section descriptor contains valid data.\\
161validationBits.fruStringValid & boolean & Whether the "fruString" field on this section descriptor contains valid data.\\
162\hline
163flags & object & A CPER section descriptor flags structure as described in Subsection \ref{subsection:sectiondescriptorflagsstructure}.\\
164\hline
165sectionType.data & string & GUID data for the type of section body.\\
166sectionType.type & string & The human readable name, if possible, for the type of section body. GUIDs for types of sectoin body are defined in UEFI specification section N.2.2 Table N-5 and section N.2.4.\\
167\hline
168fruID & string (\textbf{optional}) & If validation field set, the FRU ID of the section reporting the error.\\
169\hline
170severity.code & uint64 & The integer value of the severity of the described section.\\
171severity.name & string & If available, the human readable name for the severity of the described section.\\
172\hline
173fruText & string (\textbf{optional}) & If validation field set, ASCII string identifying the FRU hardware.\\
174\jsontableend{Section descriptor structure field table.}
175
176% Section descriptor flags.
177\subsection{Section Descriptor Flags Structure}
178\label{subsection:sectiondescriptorflagsstructure}
179This structure describes the enabled flags on a given CPER section descriptor.
180\jsontable{table:sectiondescriptorflagsstructure}
181primary & boolean & If true, indicates the section body should be associated with the error condition.\\
182\hline
183containmentWarning & boolean & If true, the error was not contained within the processor or memory heirarchy, and may have propagated elsewhere.\\
184\hline
185reset & boolean & If true, indicates the component has been reset and must be re-initialised or re-enabled by the operating system.\\
186\hline
187errorThresholdExceeded & boolean & If true, indicates the operating system may choose to discontinue use of this resource.\\
188\hline
189resourceNotAccessible & boolean & If true, the resource could not be queried for error information due to conflicts with other system software or resources. Some fields of the section will be invalid.\\
190\hline
191latentError & boolean & If true, indicates that action has been taken to ensure error containment, but the error has not been fully corrected. System software may choose to take further action before the data is consumed.\\
192\hline
193propagated & boolean & If true, indicates that the error has been propagated due to hardware poisoning.\\
194\hline
195overflow & boolean & If true, overflow of data structures used to manage errors has been detected. Some error records may be lost.\\
196\jsontableend{Section descriptor flags structure field table.}
197
198% Generic CPER structures.
199\section{Generic CPER Structures}
200This section describes generic CPER structures that are re-used throughout the specification.
201
202% Revision.
203\subsection{Revision Structure}
204\label{subsection:revisionstructure}
205This structure describes the revision of a single CPER record or sub-structure.
206\jsontable{table:revisionstructure}
207major & int & The major version number. An increase in this revision indicates the changes are not backward compatible. \\
208\hline
209minor & int & The minor version number. Incremented on additions of new GUID types, errata fixes, or clarifications. Backwards compatible with the same major version number. \\
210\jsontableend{CPER revision structure field table.}
211
212% Generic Error Status
213\subsection{Generic Error Status Structure}
214\label{subsection:genericerrorstatusstructure}
215This structure describes the a generic CPER error status, that can be used by any CPER section.
216\jsontable{table:genericerrorstatusstructure}
217errorType.value & uint64 & The raw value of the error type.\\
218errorType.name & string & The human readable name, if available, of the error type.\\
219errorType.description & string & A human readable description, if available, of the error type.\\
220\hline
221addressSignal & boolean & Whether the error was detected on the address signals/address portion of the transaction.\\
222\hline
223controlSignal & boolean & Whether the error was detected on the control signals/control portion of the transaction.\\
224\hline
225dataSignal & boolean & Whether the error was detected on the data signals/data portion of the transaction.\\
226\hline
227detectedByResponder & boolean & Whether the error was detected by the responder of the transaction.\\
228\hline
229detectedByRequester & boolean & Whether the error was detected by the requester of the transaction.\\
230\hline
231firstError & boolean & If multiple errors are logged for a single type of section, this indicates this is the first error in a chronological sequence. This field is optional to set.\\
232\hline
233overflowDroppedLogs & boolean & Additional errors occurred and were not logged due to lack of resources.\\
234\jsontableend{Generic Error Status structure field table.}
235
236%Sections.
237\chapter{Section Specification}
238\label{chapter:sectionchapter}
239This chapter defines section body formats for all of the sections defined within UEFI Specification section N.2.4.
240
241% Generic processor error section.
242\section{Generic Processor Error Section}
243\label{section:genericprocessorerrorsection}
244This section describes the JSON format for a single Generic Processor Error Section from a CPER record. The GUID used for Generic Processor Error Sections is \texttt{\{0x9876CCAD, 0x47B4, 0x4bdb, \{0xB6, 0x5E, 0x16, 0xF1, 0x93, 0xC4, 0xF3, 0xDB\}\}}.
245\jsontable{table:genericprocessorerrorsection}
246validationBits & object & A Generic Processor Error Validation Structure, as described in Subsection \ref{subsection:genericprocessorvalidationstructure}.\\
247\hline
248processorType.name & string & If available, the human readable name of the processor type.\\
249processorType.value & uint64 & The integer value of the processor type.\\
250\hline
251processorISA.name & string & If available, the human readable name of the processor ISA.\\
252processorISA.value & uint64 & The integer value corresponding to the processor ISA.\\
253\hline
254errorType.name & string & If available, the human readable name of the type of processor error this section describes.\\
255errorType.value & uint64 & The integer value corresponding to the processor error type.\\
256\hline
257operation.name & string & If available, the human readable name of the operation.\\
258operation.value & uint64 & The integer value corresponding to the operation.\\
259\hline
260flags & object & Flag information for the Generic Processor Error as described in Subsection \ref{subsection:genericprocessorflagsstructure}.\\
261\hline
262level & int & The level of the structure at which the error occurred.\\
263\hline
264cpuVersionInfo & uint64 & The CPU version information as reported by CPUID with EAX=1. On ARM, this is MIDR\_EL1.\\
265\hline
266cpuBrandString & string & The ASCII brand string of the CPU. This field is optional on ARM.\\
267\hline
268processorID & uint64 & The unique identifier of the logical processor. On ARM, this is MPIDR\_EL1.\\
269\hline
270targetAddress & uint64 & The target address associated with the error.\\
271\hline
272requestorID & uint64 & ID of the requestor associated with the error.\\
273\hline
274responderID & uint64 & ID of the responder associated with the error.\\
275\hline
276instructionIP & uint64 & Identifies the instruction pointer at the point of error.\\
277\jsontableend{Generic Processor Error structure field table.}
278
279% Generic processor error validation structure.
280\subsection{Generic Processor Error Validation Structure}
281\label{subsection:genericprocessorvalidationstructure}
282This structure describes the valdation bits structure of a General Processor Error CPER section.
283\jsontable{table:genericprocessorvalidationstructure}
284processorTypeValid & boolean & Whether the "processorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
285\hline
286processorISAValid & boolean & Whether the "processorISA" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
287\hline
288processorErrorTypeValid & boolean & Whether the "errorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
289\hline
290operationValid & boolean & Whether the "operation" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
291\hline
292flagsValid & boolean & Whether the "flags" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
293\hline
294levelValid & boolean & Whether the "levelValid" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
295\hline
296cpuVersionValid & boolean & Whether the "cpuVersion" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
297\hline
298cpuBrandInfoValid & boolean & Whether the "cpuBrandInfo" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
299\hline
300cpuIDValid & boolean & Whether the "cpuID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
301\hline
302targetAddressValid & boolean & Whether the "targetAddress" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
303\hline
304requestorIDValid & boolean & Whether the "requestorID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
305\hline
306responderIDValid & boolean & Whether the "responderID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
307\hline
308instructionIPValid & boolean & Whether the "instructionIP" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
309\jsontableend{Generic Processor Error validation structure field table.}
310
311% Generic processor error flags structure.
312\subsection{Generic Processor Error Flags Structure}
313\label{subsection:genericprocessorflagsstructure}
314This structure describes the flags structure of a General Processor Error CPER section.
315\jsontable{table:genericprocessorflagsstructure}
316restartable & boolean & Whether program execution can be restarted reliably after the error.\\
317\hline
318preciseIP & boolean & Whether the instruction IP captured is directly associated with the error.\\
319\hline
320overflow & boolean & Whether a machine check overflow occurred (multiple errors occurred at once).\\
321\hline
322corrected & boolean & Whether the error was corrected by hardware/firmware.\\
323\jsontableend{Generic Processor Error flags structure field table.}
324
325% IA32/x64 error section.
326\section{IA32/x64 Processor Error Section}
327\label{section:ia32x64errorsection}
328This section describes the JSON format for a single IA32/x64 Error Section from a CPER record. The GUID used for IA32/x64 Processor Error Sections is \texttt{\{0xDC3EA0B0, 0xA144, 0x4797, \{0xB9, 0x5B, 0x53, 0xFA, 0x24, 0x2B, 0x6E, 0x1D\}\}}.
329\jsontable{table:genericprocessorerrorsection}
330validationBits & object & IA32/x64 Processor Error Validation Structure as described in Subsection \ref{subsection:ia32x64processorflagsstructure}.\\
331\hline
332localAPICID & uint64 & The APIC ID of the processor.\\
333\hline
334cpuidInfo & object & IA32/x64 CPUINFO Structure as defined in Subsection \ref{subsection:ia32x64cpuinfostructure}.\\
335\hline
336processorErrorInfo & array & Array of IA32/x64 Processor Error Info Structures as described in Subsection \ref{subsection:ia32x64processorerrorinfostructure}.\\
337\hline
338processorContextInfo & array & Array of IA32/x64 Processor Context Info Structures as described in Subsection \ref{subsection:ia32x64processorcontextinfostructure}.\\
339\jsontableend{IA32/x64 Processor Error structure field table.}
340
341% IA32/x64 validation bitfield structure.
342\subsection{IA32/x64 Processor Error Validation Structure}
343\label{subsection:ia32x64processorflagsstructure}
344This structure describes the validation bitfield structure of an IA32/x64 Error CPER section.
345\jsontable{table:ia32x64processorflagsstructure}
346localAPICIDValid & boolean & Whether the "localAPICID" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
347\hline
348cpuIDInfoValid & boolean & Whether the "cpuidInfo" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
349\hline
350processorErrorInfoNum & int & The number of IA32/x64 Processor Error Info Structures (\ref{subsection:ia32x64processorerrorinfostructure}) that are included with this error section.\\
351\hline
352processorContextInfoNum & int & The number of IA32/x64 Processor Context Info Structures (\ref{subsection:ia32x64processorcontextinfostructure}) that are included with this error section.\\
353\jsontableend{IA32/x64 Processor Error validation structure field table.}
354
355% IA32/x64 CPUINFO structure.
356\subsection{IA32/x64 CPUINFO Structure}
357\label{subsection:ia32x64cpuinfostructure}
358This structure describes the CPUINFO structure of an IA32/x64 Error CPER section.
359\jsontable{table:ia32x64cpuinfostructure}
360eax & uint64 & Value of the EAX register resulting from a call to CPUID with EAX=1.\\
361\hline
362ebx & uint64 & Value of the EBX register resulting from a call to CPUID with EAX=1.\\
363\hline
364ecx & uint64 & Value of the ECX register resulting from a call to CPUID with EAX=1.\\
365\hline
366edx & uint64 & Value of the EDX register resulting from a call to CPUID with EAX=1.\\
367\jsontableend{IA32/x64 CPUINFO structure field table.}
368
369% IA32/x64 Processor Error Info structure.
370\subsection{IA32/x64 Processor Error Info Structure}
371\label{subsection:ia32x64processorerrorinfostructure}
372This structure describes a single IA32/x64 Processor Error Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
373\jsontable{table:ia32x64processorerrorinfostructure}
374type & string & A GUID indicating the type of processor error defined in this structure. See \texttt{edk/Cper.h} in the library repository for the defined GUID values.\\
375\hline
376validationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
377\hline
378checkInfo & object & Check information structure for this error. One of the structures defined in Subsections \ref{subsection:ia32x64processorerrorcheckinfocachetlbstructure}, \ref{subsection:ia32x64processorerrorcheckinfobusstructure}, or \ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}. Which section is placed here is dependent on the \texttt{type} field.\\
379\hline
380targetAddressID & uint64 & Identifies the target address associated with the error.\\
381\hline
382requestorID & uint64 & Identifies the requestor associated with the error.\\
383\hline
384responderID & uint64 & Identifies the responder associated with the error.\\
385\hline
386instructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
387\jsontableend{IA32/x64 Processor Error Info structure field table.}
388
389% IA32/x64 Processor Error Info Validation structure.
390\subsection{IA32/x64 Processor Error Info Validation Structure}
391\label{subsection:ia32x64processorerrorinfovalidationstructure}
392This structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
393\jsontable{table:ia32x64processorerrorinfovalidationstructure}
394checkInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
395\hline
396targetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
397\hline
398requestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
399\hline
400responderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
401\hline
402instructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
403\hline
404\jsontableend{IA32/x64 Processor Error Info validation structure field table.}
405
406% IA32/x64 Processor Error Check Info (Cache/TLB Error)
407\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
408\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
409This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
410The GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
411\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
412validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
413\hline
414transactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
415transactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
416\hline
417operation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
418operation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
419\hline
420level & uint64 & The cache/TLB level at which the error occurred.\\
421\hline
422processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
423\hline
424uncorrected & boolean & Whether the error remained uncorrected.\\
425\hline
426preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
427\hline
428restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
429\hline
430overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
431\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
432
433% IA32/x64 Processor Error Check Info (Bus Error)
434\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
435\label{subsection:ia32x64processorerrorcheckinfobusstructure}
436This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
437The GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
438\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
439validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
440\hline
441transactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
442transactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
443\hline
444operation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
445operation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
446\hline
447level & uint64 & The bus heirarchy level at which the error occurred.\\
448\hline
449processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
450\hline
451uncorrected & boolean & Whether the error remained uncorrected.\\
452\hline
453preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
454\hline
455restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
456\hline
457overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
458\hline
459participationType.value & uint64 & The raw value of the type of participation.\\
460participationType.name & string & The human readable name, if available, of the type of participation.\\
461\hline
462timedOut & boolean & Whether the request timed out.\\
463\hline
464addressSpace.value & uint64 & The raw value of the address space the error was in.\\
465addressSpace.name  & string & The human readable name, if available, of the address space the error was in.\\
466\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
467
468% IA32/x64 Processor Error Check Info (MS Check Error)
469\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
470\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
471This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
472The GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
473\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
474validationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
475\hline
476errorType.value & uint64 & The raw value of the type of operation that caused the error.\\
477errorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
478\hline
479processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
480\hline
481uncorrected & boolean & Whether the error remained uncorrected.\\
482\hline
483preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
484\hline
485restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
486\hline
487overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
488\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
489
490% IA32/x64 Processor Error Check Info Validation structure.
491\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
492\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
493This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for cache, TLB and bus errors, as a set of boolean values.
494\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
495transactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
496\hline
497operationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
498\hline
499levelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
500\hline
501processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
502\hline
503uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
504\hline
505preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
506\hline
507restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
508\hline
509overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
510\hline
511participationTypeValid & boolean (\textbf{optional}) & Whether the "participationType" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
512\hline
513timedOutValid & boolean (\textbf{optional}) & Whether the "timeOut" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
514\hline
515addressSpaceValid & boolean (\textbf{optional}) & Whether the "addressSpace" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
516\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) validation structure field table.}
517
518% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
519\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
520\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
521This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for MS check errors, as a set of boolean values.
522\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
523errorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
524\hline
525processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
526\hline
527uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
528\hline
529preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
530\hline
531restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
532\hline
533overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
534\jsontableend{IA32/x64 Processor Error Check Info (MS Check) validation structure field table.}
535
536% IA32/x64 Processor Context Info structure.
537\subsection{IA32/x64 Processor Context Info Structure}
538\label{subsection:ia32x64processorcontextinfostructure}
539This structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
540\jsontable{table:ia32x64processorcontextinfostructure}
541registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
542registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
543\hline
544registerArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
545\hline
546msrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
547\hline
548mmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
549\hline
550registerArray & 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}.\\
551\jsontableend{IA32/x64 Processor Context Info structure field table.}
552
553% IA32/x64 IA32 Register State structure
554\subsection{IA32/x64 IA32 Register State Structure}
555\label{subsection:ia32x64ia32registerstatestructure}
556This 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".
557\jsontable{table:ia32x64ia32registerstatestructure}
558eax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
559\hline
560ebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
561\hline
562ecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
563\hline
564edx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
565\hline
566esi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
567\hline
568edi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
569\hline
570ebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
571\hline
572esp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
573\hline
574cs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
575\hline
576ds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
577\hline
578ss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
579\hline
580es & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
581\hline
582fs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
583\hline
584gs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
585\hline
586eflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
587\hline
588eip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
589\hline
590cr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
591\hline
592cr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
593\hline
594cr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
595\hline
596cr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
597\hline
598cr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
599\hline
600gdtr & uint64 & The GDTR register.\\
601\hline
602idtr & uint64 & The IDTR register.\\
603\hline
604ldtr & uint64 & The LDTR register.\\
605\hline
606tr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
607\jsontableend{IA32/x64 IA32 Register State structure field table.}
608
609% IA32/x64 x64 Register State structure
610\subsection{IA32/x64 x64 Register State Structure}
611\label{subsection:ia32x64x64registerstatestructure}
612This 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".
613\jsontable{table:ia32x64x64registerstatestructure}
614rax & uint64 & The RAX register.\\
615\hline
616rbx & uint64 & The RBX register.\\
617\hline
618rcx & uint64 & The RCX register.\\
619\hline
620rdx & uint64 & The RDX register.\\
621\hline
622rsi & uint64 & The RSI register.\\
623\hline
624rdi & uint64 & The RDI register.\\
625\hline
626rbp & uint64 & The RBP register.\\
627\hline
628rsp & uint64 & The RSP register.\\
629\hline
630r8 & uint64 & The R8 register.\\
631\hline
632r9 & uint64 & The R9 register.\\
633\hline
634r10 & uint64 & The R10 register.\\
635\hline
636r11 & uint64 & The R11 register.\\
637\hline
638r12 & uint64 & The R12 register.\\
639\hline
640r13 & uint64 & The R13 register.\\
641\hline
642r14 & uint64 & The R14 register.\\
643\hline
644r15 & uint64 & The R15 register.\\
645\hline
646cs & uint64 & The CS register.\\
647\hline
648ds & uint64 & The DS register.\\
649\hline
650ss & uint64 & The SS register.\\
651\hline
652es & uint64 & The ES register.\\
653\hline
654fs & uint64 & The FS register.\\
655\hline
656gs & uint64 & The GS register.\\
657\hline
658rflags & uint64 & The RFLAGS register.\\
659\hline
660eip & uint64 & The EIP register.\\
661\hline
662cr0 & uint64 & The CR0 register.\\
663\hline
664cr1 & uint64 & The CR1 register.\\
665\hline
666cr2 & uint64 & The CR2 register.\\
667\hline
668cr3 & uint64 & The CR3 register.\\
669\hline
670cr4 & uint64 & The CR4 register.\\
671\hline
672cr8 & uint64 & The CR8 register.\\
673\hline
674gdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
675\hline
676gdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
677\hline
678idtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
679\hline
680idtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
681\hline
682ldtr & uint64 & The LDTR register.\\
683\hline
684tr & uint64 & The TR register.\\
685\jsontableend{IA32/x64 x64 Register State structure field table.}
686
687% IA32/x64 IA32 Register State structure
688\subsection{IA32/x64 Unformatted Register State Structure}
689\label{subsection:ia32x64unformattedregisterstatestructure}
690This 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".
691\jsontable{table:ia32x64unformattedregisterstatestructure}
692data & string & A base64-formatted binary representation of the register array.\\
693\jsontableend{IA32/x64 Unformatted Register State structure field table.}
694
695% ARM processor error section.
696\section{ARM Processor Error Section}
697\label{section:armprocessorerrorsection}
698This 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 \}\}}.
699\jsontable{table:armprocessorerrorsection}
700validationBits & object & An ARM Processor Error Validation structure, as defined in Subsection \ref{subsection:armprocessorerrorvalidationstructure}.\\
701\hline
702errorInfoNum & int & The number of error info structures attached to this error.\\
703\hline
704contextInfoNum & int & The number of context info structures attached to this error.\\
705\hline
706sectionLength & uint64 & The total size (in bytes) of this error section.\\
707\hline
708errorAffinity.value & int & The raw value of the error affinity for this error.\\
709errorAffinity.type & string & The human readable type of the error affinity for this error. All values are vendor defined, so specific names cannot be provided.\\
710\hline
711mpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
712\hline
713midrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
714\hline
715running & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
716\hline
717psciState & 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.\\
718\hline
719errorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
720\hline
721contextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
722\hline
723vendorSpecificInfo.data & string (\textbf{optional}) & If it exists, a base64-encoded binary representation of any attached vendor specific information.\\
724\jsontableend{ARM Processor Error structure field table.}
725
726% ARM Processor Error Validation structure
727\subsection{ARM Processor Error Validation Structure}
728\label{subsection:armprocessorerrorvalidationstructure}
729This structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
730\jsontable{table:armprocessorerrorvalidationstructure}
731mpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
732\hline
733errorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
734\hline
735runningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
736\hline
737vendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
738\jsontableend{ARM Processor Error validation structure field table.}
739
740% ARM Processor Error Info structure
741\subsection{ARM Processor Error Info Structure}
742\label{subsection:armprocessorerrorinfostructure}
743This structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
744\jsontable{table:armprocessorerrorinfostructure}
745version & int & The version of the structure that is implemented.\\
746\hline
747length & int & The length of the structure, in bytes. For version 0, this is 32.\\
748\hline
749validationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
750\hline
751errorType.value & uint64 & The raw value of the error type this error info describes.\\
752errorType.name & string & The human readable name, if available, of the error type this error info describes.\\
753\hline
754multipleError.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.\\
755multipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
756\hline
757flags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
758\hline
759errorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}, or . Which structure this is depends on the \texttt{errorType.value} field.\\
760\hline
761virtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
762\hline
763physicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
764\jsontableend{ARM Processor Error Info structure field table.}
765
766% ARM Processor Error Info Validation structure
767\subsection{ARM Processor Error Info Validation Structure}
768\label{subsection:armprocessorerrorinfovalidationstructure}
769This structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
770\jsontable{table:armprocessorerrorinfovalidationstructure}
771multipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
772\hline
773flagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
774\hline
775errorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
776\hline
777virtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
778\hline
779physicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
780\jsontableend{ARM Processor Error Info validation structure field table.}
781
782% ARM Processor Error Info Validation structure
783\subsection{ARM Processor Error Info Flags Structure}
784\label{subsection:armprocessorerrorinfoflagsstructure}
785This structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
786\jsontable{table:armprocessorerrorinfoflagsstructure}
787firstErrorCaptured & boolean & Whether this is the first error captured.\\
788\hline
789lastErrorCaptured & boolean & Whether this is the last error captured.\\
790\hline
791propagated & boolean & Whether the error has propagated.\\
792\hline
793overflow & boolean & Whether error buffer overflow was detected. This is usually from multiple errors occurring in a short timespan, and indicates loss of error data.\\
794\jsontableend{ARM Processor Error Info Flags structure field table.}
795
796% ARM Processor Error Info Error Information (Cache/TLB) structure
797\subsection{ARM Processor Error Info Cache/TLB Information Structure}
798\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
799This structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has the value 0 or 1.
800\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
801validationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
802\hline
803transactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
804transactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
805\hline
806operation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
807operation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
808\hline
809level & int & The cache/TLB level that the error occurred at.\\
810\hline
811processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
812\hline
813corrected & boolean & Whether the error was corrected.\\
814\hline
815precisePC & boolean & Whether the program counter is directly associated with the error.\\
816\hline
817restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
818\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
819
820% ARM Processor Error Info Error Information (Cache/TLB) validation structure
821\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
822\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
823This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}), as a set of boolean fields.
824\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
825transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
826\hline
827operationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
828\hline
829levelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
830\hline
831processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
832\hline
833correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
834\hline
835precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
836\hline
837restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
838\jsontableend{ARM Processor Error Info Cache/TLB validation structure field table.}
839
840% ARM Processor Error Info Error Information (Bus) structure
841\subsection{ARM Processor Error Info Bus Information Structure}
842\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
843This structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has the value 2.
844\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
845validationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
846\hline
847transactionType.value & uint64 & The raw value of the type of bus error.\\
848transactionType.name & string & The human readable name, if available, of the type of bus error.\\
849\hline
850operation.value & uint64 & The raw value of the bus operation that caused the error.\\
851operation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
852\hline
853level & int & The affinity level that the bus error occurred at.\\
854\hline
855processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
856\hline
857corrected & boolean & Whether the error was corrected.\\
858\hline
859precisePC & boolean & Whether the program counter is directly associated with the error.\\
860\hline
861restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
862\hline
863timedOut & boolean & Whether the request timed out.\\
864\hline
865participationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
866participationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
867\hline
868addressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
869addressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
870\hline
871memoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
872\hline
873accessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
874accessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
875\jsontableend{ARM Processor Error Info Bus Information structure field table.}
876
877% ARM Processor Error Info Error Information (Bus) validation structure
878\subsection{ARM Processor Error Info Bus Validation Structure}
879\label{subsection:armprocessorerrorinfobusvalidationstructure}
880This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}), as a set of boolean fields.
881\jsontable{table:armprocessorerrorinfobusvalidationstructure}
882transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
883\hline
884operationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
885\hline
886levelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
887\hline
888processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
889\hline
890correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
891\hline
892precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
893\hline
894restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
895\hline
896participationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
897\hline
898timedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
899\hline
900addressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
901\hline
902memoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
903\hline
904accessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
905\jsontableend{ARM Processor Error Info Bus validation structure field table.}
906
907% ARM Processor Error Info Error Information (Microarchitecture/Undefined) structure
908\subsection{ARM Processor Error Info Microarchitecture/Undefined Information Structure}
909\label{subsection:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure}
910This structure describes microarchitecture/other undefined error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has a value other than 0-2 (inclusive).
911\jsontable{table:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure}
912data & uint64 & The unformatted data represented in the error information structure.\\
913\jsontableend{ARM Processor Error Info Microarchitecture/Undefined Information structure field table.}
914
915% ARM Processor Context Info structure
916\subsection{ARM Processor Context Info Structure}
917\label{subsection:armprocessorcontextinfostructure}
918This structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
919\jsontable{table:armprocessorcontextinfostructure}
920version & int & The version of the structure. In the referenced UEFI specification, this is 0.\\
921\hline
922registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
923registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
924\hline
925registerArraySize & uint64 & The size of the attached register array, in bytes.\\
926\hline
927registerArray & 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.\\
928\jsontableend{ARM Processor Context Info structure field table.}
929
930% ARM AARCH32 General Purpose Registers structure
931\subsection{ARM AARCH32 General Purpose Registers Structure}
932\label{subsection:armaarch32gprstructure}
933This 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.
934\jsontable{table:armaarch32gprstructure}
935r0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
936\hline
937r1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
938\hline
939r2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
940\hline
941r3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
942\hline
943r4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
944\hline
945r5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
946\hline
947r6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
948\hline
949r7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
950\hline
951r8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
952\hline
953r9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
954\hline
955r10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
956\hline
957r11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
958\hline
959r12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
960\hline
961r13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
962\hline
963r14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
964\hline
965r15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
966\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
967
968% ARM AARCH32 EL1 Context Registers structure
969\subsection{ARM AARCH32 EL1 Context Registers Structure}
970\label{subsection:armaarch32el1contextregistersstructure}
971This 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.
972\jsontable{table:armaarch32el1contextregistersstructure}
973dfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
974\hline
975dfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
976\hline
977ifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
978\hline
979isr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
980\hline
981mair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
982\hline
983mair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
984\hline
985midr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
986\hline
987mpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
988\hline
989nmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
990\hline
991prrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
992\hline
993sctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
994\hline
995spsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
996\hline
997spsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
998\hline
999spsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1000\hline
1001spsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1002\hline
1003spsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1004\hline
1005spsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1006\hline
1007tpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1008\hline
1009tpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1010\hline
1011tpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1012\hline
1013ttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1014\hline
1015ttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1016\hline
1017ttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1018\hline
1019dacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1020\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
1021
1022% ARM AARCH32 EL2 Context Registers structure
1023\subsection{ARM AARCH32 EL2 Context Registers Structure}
1024\label{subsection:armaarch32el2contextregistersstructure}
1025This 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.
1026\jsontable{table:armaarch32el2contextregistersstructure}
1027elr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1028\hline
1029hamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1030\hline
1031hamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1032\hline
1033hcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1034\hline
1035hcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1036\hline
1037hdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1038\hline
1039hifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1040\hline
1041hpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1042\hline
1043hsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1044\hline
1045htcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1046\hline
1047htpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1048\hline
1049httbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1050\hline
1051spsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1052\hline
1053vtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1054\hline
1055vttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1056\hline
1057dacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1058\hline
1059\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
1060
1061% ARM AARCH32 Secure Registers structure
1062\subsection{ARM AARCH32 Secure Registers Structure}
1063\label{subsection:armaarch32secureregistersstructure}
1064This 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.
1065\jsontable{table:armaarch32secureregistersstructure}
1066sctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1067\hline
1068spsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1069\jsontableend{ARM AARCH32 Secure Registers structure field table.}
1070
1071% ARM AARCH64 General Purpose Registers structure
1072\subsection{ARM AARCH64 General Purpose Registers Structure}
1073\label{subsection:armaarch64gprstructure}
1074This 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.
1075\jsontable{table:armaarch64gprstructure}
1076x0 & uint64 & Register X0.\\
1077\hline
1078x1 & uint64 & Register X1.\\
1079\hline
1080x2 & uint64 & Register X2.\\
1081\hline
1082x3 & uint64 & Register X3.\\
1083\hline
1084x4 & uint64 & Register X4.\\
1085\hline
1086x5 & uint64 & Register X5.\\
1087\hline
1088x6 & uint64 & Register X6.\\
1089\hline
1090x7 & uint64 & Register X7.\\
1091\hline
1092x8 & uint64 & Register X8.\\
1093\hline
1094x9 & uint64 & Register X9.\\
1095\hline
1096x10 & uint64 & Register X10.\\
1097\hline
1098x11 & uint64 & Register X11.\\
1099\hline
1100x12 & uint64 & Register X12.\\
1101\hline
1102x13 & uint64 & Register X13.\\
1103\hline
1104x14 & uint64 & Register X14.\\
1105\hline
1106x15 & uint64 & Register X15.\\
1107\hline
1108x16 & uint64 & Register X16.\\
1109\hline
1110x17 & uint64 & Register X17.\\
1111\hline
1112x18 & uint64 & Register X18.\\
1113\hline
1114x19 & uint64 & Register X19.\\
1115\hline
1116x20 & uint64 & Register X20.\\
1117\hline
1118x21 & uint64 & Register X21.\\
1119\hline
1120x22 & uint64 & Register X22.\\
1121\hline
1122x23 & uint64 & Register X23.\\
1123\hline
1124x24 & uint64 & Register X24.\\
1125\hline
1126x25 & uint64 & Register X25.\\
1127\hline
1128x26 & uint64 & Register X26.\\
1129\hline
1130x27 & uint64 & Register X27.\\
1131\hline
1132x28 & uint64 & Register X28.\\
1133\hline
1134x29 & uint64 & Register X29.\\
1135\hline
1136x30 & uint64 & Register X30.\\
1137\hline
1138sp & uint64 & Register SP.\\
1139\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
1140
1141% ARM AARCH64 EL1 Context Registers structure
1142\subsection{ARM AARCH64 EL1 Context Registers Structure}
1143\label{subsection:armaarch64el1contextregistersstructure}
1144This 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.
1145\jsontable{table:armaarch64el1contextregistersstructure}
1146elr\_el1 & uint64 & Register ELR (EL1).\\
1147\hline
1148esr\_el1 & uint64 & Register ESR (EL1).\\
1149\hline
1150far\_el1 & uint64 & Register FAR (EL1).\\
1151\hline
1152isr\_el1 & uint64 & Register ISR (EL1).\\
1153\hline
1154mair\_el1 & uint64 & Register MAIR (EL1).\\
1155\hline
1156midr\_el1 & uint64 & Register MIDR (EL1).\\
1157\hline
1158mpidr\_el1 & uint64 & Register MPIDR (EL1).\\
1159\hline
1160sctlr\_el1 & uint64 & Register SCTLR (EL1).\\
1161\hline
1162sp\_el0 & uint64 & Register SP (EL0).\\
1163\hline
1164sp\_el1 & uint64 & Register SP (EL1).\\
1165\hline
1166spsr\_el1 & uint64 & Register SPSR (EL1).\\
1167\hline
1168tcr\_el1 & uint64 & Register TCR (EL1).\\
1169\hline
1170tpidr\_el0 & uint64 & Register TPIDR (EL0).\\
1171\hline
1172tpidr\_el1 & uint64 & Register TPIDR (EL1).\\
1173\hline
1174tpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
1175\hline
1176ttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
1177\hline
1178ttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
1179\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
1180
1181% ARM AARCH64 EL2 Context Registers structure
1182\subsection{ARM AARCH64 EL2 Context Registers Structure}
1183\label{subsection:armaarch64el2contextregistersstructure}
1184This 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.
1185\jsontable{table:armaarch64el2contextregistersstructure}
1186elr\_el2 & uint64 & Register ELR (EL2).\\
1187\hline
1188esr\_el2 & uint64 & Register ESR (EL2).\\
1189\hline
1190far\_el2 & uint64 & Register FAR (EL2).\\
1191\hline
1192hacr\_el2 & uint64 & Register HACR (EL2).\\
1193\hline
1194hcr\_el2 & uint64 & Register HCR (EL2).\\
1195\hline
1196hpfar\_el2 & uint64 & Register HPFAR (EL2).\\
1197\hline
1198mair\_el2 & uint64 & Register MAIR (EL2).\\
1199\hline
1200sctlr\_el2 & uint64 & Register SCTLR (EL2).\\
1201\hline
1202sp\_el2 & uint64 & Register SP (EL2).\\
1203\hline
1204spsr\_el2 & uint64 & Register SPSR (EL2).\\
1205\hline
1206tcr\_el2 & uint64 & Register TCR (EL2).\\
1207\hline
1208tpidr\_el2 & uint64 & Register TPIDR (EL2).\\
1209\hline
1210ttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
1211\hline
1212vtcr\_el2 & uint64 & Register VTCR (EL2).\\
1213\hline
1214vttbr\_el2 & uint64 & Register VTTBR (EL2).\\
1215\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
1216
1217% ARM AARCH64 EL3 Context Registers structure
1218\subsection{ARM AARCH64 EL3 Context Registers Structure}
1219\label{subsection:armaarch64el3contextregistersstructure}
1220This 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.
1221\jsontable{table:armaarch64el3contextregistersstructure}
1222elr\_el3 & uint64 & Register ELR (EL3).\\
1223\hline
1224esr\_el3 & uint64 & Register ESR (EL3).\\
1225\hline
1226far\_el3 & uint64 & Register FAR (EL3).\\
1227\hline
1228mair\_el3 & uint64 & Register MAIR (EL3).\\
1229\hline
1230sctlr\_el3 & uint64 & Register SCTLR (EL3).\\
1231\hline
1232sp\_el3 & uint64 & Register SP (EL3).\\
1233\hline
1234spsr\_el3 & uint64 & Register SPSR (EL3).\\
1235\hline
1236tcr\_el3 & uint64 & Register TCR (EL3).\\
1237\hline
1238tpidr\_el3 & uint64 & Register TPIDR (EL3).\\
1239\hline
1240ttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
1241\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
1242
1243% ARM AARCH64 Miscellaneous Registers structure
1244\subsection{ARM AARCH64 Miscellaneous Registers Structure}
1245\label{subsection:armmiscregistersstructure}
1246This 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.
1247\jsontable{table:armmiscregistersstructure}
1248mrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
1249\hline
1250mrsEncoding.crm & uint64 & MRS Encoding CRm.\\
1251\hline
1252mrsEncoding.crn & uint64 & MRS Encoding CRn.\\
1253\hline
1254mrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
1255\hline
1256mrsEncoding.o0 & uint64 & MRS Encoding O0.\\
1257\hline
1258value & uint64 & Value of the single register.\\
1259\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
1260
1261% ARM AARCH64 Unknown Registers structure
1262\subsection{ARM AARCH64 Unknown Registers Structure}
1263\label{subsection:armunknownregistersstructure}
1264This 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).
1265\jsontable{table:armunknownregistersstructure}
1266data & string & A base64 representation of the unknown binary register array data.\\
1267\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
1268
1269% Memory error section.
1270\section{Memory Error Section}
1271\label{section:memoryerrorsection}
1272This 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 \}\}}.
1273\jsontable{table:memoryerrorsection}
1274validationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\
1275\hline
1276errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1277\hline
1278bank & 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.\\
1279\hline
1280memoryErrorType.value & uint64 & The raw value of the memory error type.\\
1281memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1282\hline
1283extended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\
1284extended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\
1285extended.chipIdentification & int & The ID of the related chip.\\
1286\hline
1287physicalAddress & uint64 & The physical address at which the error occurred.\\
1288\hline
1289physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1290\hline
1291node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1292\hline
1293card & uint64 & The card number of the memory error location.\\
1294\hline
1295moduleRank & uint64 & The module or rank number of the offending memory error location.\\
1296\hline
1297device & uint64 & The device number of the memory associated with the error.\\
1298\hline
1299row & uint64 & The first 16 bits of the row number of the memory location.\\
1300\hline
1301column & uint64 & The column number of the memory error location.\\
1302\hline
1303bitPosition & uint64 & The bit position at which the error occurred.\\
1304\hline
1305requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1306\hline
1307responderID & uint64 & Hardware address of the device that responded to the transaction.\\
1308\hline
1309targetID & uint64 & Hardware address of the intended target of the transaction.\\
1310\hline
1311rankNumber & uint64 & The rank number of the memory error location.\\
1312\hline
1313cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1314\hline
1315moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1316\jsontableend{Memory Error structure field table.}
1317
1318% Memory error validation structure.
1319\subsection{Memory Error Validation Structure}
1320\label{subsection:memoryerrorvalidationstructure}
1321This structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields.
1322\jsontable{table:memoryerrorvalidationstructure}
1323errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1324\hline
1325physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1326\hline
1327physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1328\hline
1329nodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1330\hline
1331cardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1332\hline
1333moduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1334\hline
1335bankValid & 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.\\
1336\hline
1337deviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1338\hline
1339rowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1340\hline
1341memoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1342\hline
1343memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1344\hline
1345rankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1346\hline
1347cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1348\hline
1349moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1350\hline
1351extendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1352\hline
1353bankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1354\hline
1355bankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1356\hline
1357chipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1358\jsontableend{Memory Error validation structure field table.}
1359
1360% Memory error normal bank addressing structure.
1361\subsection{Memory Error Standard Bank Address Structure}
1362\label{subsection:memoryerrorstandardbankaddressstructure}
1363This 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".
1364\jsontable{table:memoryerrorstandardbankaddressstructure}
1365value & uint64 & The value of the bank address.\\
1366\jsontableend{Memory Error Standard Bank Address structure field table.}
1367
1368% Memory error address/group bank addressing structure.
1369\subsection{Memory Error Address/Group Bank Address Structure}
1370\label{subsection:memoryerroraddressgroupbankaddressstructure}
1371This 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".
1372\jsontable{table:memoryerroraddressgroupbankaddressstructure}
1373address & uint64 & The address of the bank.\\
1374\hline
1375group & uint64 & The group of the bank.\\
1376\jsontableend{Memory Error Address/Group Bank Address structure field table.}
1377
1378% Memory error 2 section.
1379\section{Memory Error 2 Section}
1380\label{section:memoryerror2section}
1381This 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 \}\}}.
1382\jsontable{table:memoryerror2section}
1383validationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\
1384\hline
1385errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1386\hline
1387bank & 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.\\
1388\hline
1389memoryErrorType.value & uint64 & The raw value of the memory error type.\\
1390memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1391\hline
1392status.value & int & The raw value of the memory error status.\\
1393status.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\
1394\hline
1395physicalAddress & uint64 & The physical address at which the error occurred.\\
1396\hline
1397physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1398\hline
1399node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1400\hline
1401card & uint64 & The card number of the memory error location.\\
1402\hline
1403module & uint64 & The module of the offending memory error location.\\
1404\hline
1405device & uint64 & The device number of the memory associated with the error.\\
1406\hline
1407row & uint64 & The first 16 bits of the row number of the memory location.\\
1408\hline
1409column & uint64 & The column number of the memory error location.\\
1410\hline
1411bitPosition & uint64 & The bit position at which the error occurred.\\
1412\hline
1413rank & uint64 & The rank number of the error location.\\
1414\hline
1415chipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\
1416\hline
1417requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1418\hline
1419responderID & uint64 & Hardware address of the device that responded to the transaction.\\
1420\hline
1421targetID & uint64 & Hardware address of the intended target of the transaction.\\
1422\hline
1423cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1424\hline
1425moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1426\jsontableend{Memory Error 2 structure field table.}
1427
1428% Memory error 2 validation structure.
1429\subsection{Memory Error 2 Validation Structure}
1430\label{subsection:memoryerror2validationstructure}
1431This structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields.
1432\jsontable{table:memoryerror2validationstructure}
1433errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1434\hline
1435physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1436\hline
1437physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1438\hline
1439nodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1440\hline
1441cardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1442\hline
1443moduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1444\hline
1445bankValid & 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.\\
1446\hline
1447deviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1448\hline
1449rowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1450\hline
1451columnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1452\hline
1453rankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1454\hline
1455bitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1456\hline
1457chipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1458\hline
1459memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1460\hline
1461statusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1462\hline
1463requestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1464\hline
1465responderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1466\hline
1467targetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1468\hline
1469cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1470\hline
1471moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1472\hline
1473bankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1474\hline
1475bankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1476\jsontableend{Memory Error 2 validation structure field table.}
1477
1478% Memory error 2 normal bank addressing structure.
1479\subsection{Memory Error 2 Standard Bank Address Structure}
1480\label{subsection:memoryerror2standardbankaddressstructure}
1481This 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".
1482\jsontable{table:memoryerror2standardbankaddressstructure}
1483value & uint64 & The value of the bank address.\\
1484\jsontableend{Memory Error 2 Standard Bank Address structure field table.}
1485
1486% Memory error 2 address/group bank addressing structure.
1487\subsection{Memory Error 2 Address/Group Bank Address Structure}
1488\label{subsection:memoryerror2addressgroupbankaddressstructure}
1489This 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".
1490\jsontable{table:memoryerror2addressgroupbankaddressstructure}
1491address & uint64 & The address of the bank.\\
1492\hline
1493group & uint64 & The group of the bank.\\
1494\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.}
1495
1496% PCIe error section.
1497\section{PCIe Error Section}
1498\label{section:pcieerrorsection}
1499This 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 \}\}}.
1500\jsontable{table:pcieerrorsection}
1501validationBits & object & A PCIe Error Validation structure as defined in Subsection \ref{subsection:pcieerrorvalidationstructure}.\\
1502\hline
1503portType.value & uint64 & The raw value of the port type for this error.\\
1504portType.name & string & The human readable name, if available, of the port type for this error.\\
1505\hline
1506version.major & int & The major version number for the PCIe specification supported.\\
1507version.minor & int & The minor version number for the PCIe specification supported.\\
1508\hline
1509commandStatus.commandRegister & uint64 & The PCI command register value.\\
1510commandStatus.statusRegister & uint64 & The PCI status register value.\\
1511\hline
1512deviceID & object & A PCIe Device ID structure as defined in Subsection \ref{subsection:pciedeviceidstructure}.\\
1513\hline
1514deviceSerialNumber & uint64 & The serial number of the device.\\
1515\hline
1516bridgeControlStatus.secondaryStatusRegister & uint64 & The bridge secondary status register. \emph{This field is valid for bridges only.}\\
1517\hline
1518bridgeControlStatus.controlRegister & uint64 & The bridge control register. \emph{This field is valid for bridges only.}\\
1519\hline
1520capabilityStructure.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).\\
1521\hline
1522% aerInfo & object & A PCIe AER Extended Capability structure, as defined in Subsection \ref{subsection:pcieaerecstructure}.\\
1523aerInfo.data & string & A base64-formatted representation of a PCIe AER Extended Capability structure.\\
1524\jsontableend{PCIe Error structure field table.}
1525
1526% PCIe error validation structure.
1527\subsection{PCIe Error Validation Structure}
1528\label{subsection:pcieerrorvalidationstructure}
1529This structure describes which fields within a PCIe Error section (\ref{section:pcieerrorsection}) are valid, using boolean fields.
1530\jsontable{table:pcieerrorvalidationstructure}
1531portTypeValid & boolean & Whether the "portType" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1532\hline
1533versionValid & boolean & Whether the "version" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1534\hline
1535commandStatusValid & boolean & Whether the "commandStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1536\hline
1537deviceIDValid & boolean & Whether the "deviceID" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1538\hline
1539deviceSerialNumberValid & boolean & Whether the "deviceSerialNumber" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1540\hline
1541bridgeControlStatusValid & boolean & Whether the "bridgeControlStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1542\hline
1543capabilityStructureStatusValid & boolean & Whether the "capabilityStructure" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1544\hline
1545aerInfoValid & boolean & Whether the "aerInfo" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1546\hline
1547\jsontableend{PCIe Error validation structure field table.}
1548
1549% PCIe Device ID structure.
1550\subsection{PCIe Device ID Structure}
1551\label{subsection:pciedeviceidstructure}
1552This structure describes a PCIe device ID, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1553\jsontable{table:pciedeviceidstructure}
1554vendorID & uint64 & The vendor ID of the PCIe device.\\
1555\hline
1556deviceID & uint64 & The device ID of the PCIe device.\\
1557\hline
1558classCode & uint64 & The class code of the PCIe device.\\
1559\hline
1560functionNumber & uint64 & The function number of the PCIe device.\\
1561\hline
1562deviceNumber & uint64 & The device number of the PCIe device.\\
1563\hline
1564segmentNumber & uint64 & The segment number of the PCIe device.\\
1565\hline
1566primaryOrDeviceBusNumber & uint64 & The root port/bridge primary bus number or device bus number of the PCIe device.\\
1567\hline
1568secondaryBusNumber & uint64 & The root port/bridge secondary bus number of the PCIe device.\\
1569\hline
1570slotNumber & uint64 & The slot number of the PCIe device.\\
1571\jsontableend{PCIe Device ID structure field table.}
1572
1573% % PCIe Advanced Error Reporting Extended Capability structure.
1574% \subsection{PCIe AER Extended Capability Structure}
1575% \label{subsection:pcieaerecstructure}
1576% This structure describes a PCIe Advanced Error Reporting Extended Capability structure, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1577% \jsontable{table:pcieaerecstructure}
1578% capabilityID & uint64 & The capability ID for this AER structure.\\
1579% \hline
1580% capabilityVersion & uint64 & The capability structure version for this AER structure.\\
1581% \hline
1582% uncorrectableErrorStatusRegister & uint64 & The uncorrectable error status register value.\\
1583% \hline
1584% uncorrectableErrorMaskRegister & uint64 & The uncorrectable error mask register value.\\
1585% \hline
1586% uncorrectableErrorSeverityRegister & uint64 & The uncorrectable error severity register value.\\
1587% \hline
1588% correctableErrorStatusRegister & uint64 & The correctable error status register value.\\
1589% \hline
1590% correctableErrorMaskRegister & uint64 & The correctable error mask register value.\\
1591% \hline
1592% aeccReg & uint64 & The AECC register value.\\
1593% \hline
1594% headerLogRegister & string & A base64-encoded binary dump of the header log register.\\
1595% \hline
1596% rootErrorCommand & uint64 & The root error command.\\
1597% \hline
1598% rootErrorStatus & uint64 & The root error status.\\
1599% \hline
1600% errorSourceIDRegister & uint64 & The error source ID register.\\
1601% \hline
1602% correctableErrorSourceIDRegister & uint64 & The correctable error source ID register.\\
1603% \jsontableend{PCIe AER Extended Capability structure field table.}
1604
1605% PCI/PCI-X Bus error section.
1606\section{PCI/PCI-X Bus Error Section}
1607\label{section:pcibuserrorsection}
1608This 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 \}\}}.
1609\jsontable{table:pcibuserrorsection}
1610validationBits & object & A PCI/PCI-X Bus Error Validation structure, as described in Subsection \ref{subsection:pcibuserrorvalidationstructure}.\\
1611\hline
1612errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1613\hline
1614errorType.value & uint64 & The raw value of the error type for this bus error.\\
1615errorType.name & string & The human readable name, if available, of the error type for this bus error.\\
1616\hline
1617busID.busNumber & int & The bus number of this bus ID.\\
1618busID.segmentNumber & int & The segment number of this bus ID.\\
1619\hline
1620busAddress & uint64 & The memory or I/O address on the bus at the time of the error.\\
1621\hline
1622busData & uint64 & Data on the bus at the time of the error.\\
1623\hline
1624busCommandType & string & The type of command at the time of the error. Either "PCI" or "PCI-X".\\
1625\hline
1626busRequestorID & uint64 & The PCI bus requestor ID for the error.\\
1627\hline
1628busCompleterID & uint64 & The PCI bus completer ID for the error.\\
1629\hline
1630targetID & uint64 & The PCI bus intended target ID for the error.\\
1631\jsontableend{PCI/PCI-X Bus Error structure field table.}
1632
1633% PCI/PCI-X Bus error validation structure.
1634\subsection{PCI/PCI-X Bus Error Validation Structure}
1635\label{subsection:pcibuserrorvalidationstructure}
1636This structure describes which fields within a PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) are valid, using boolean fields.
1637\jsontable{table:pcibuserrorvalidationstructure}
1638errorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1639\hline
1640errorTypeValid & boolean & Whether the "errorType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1641\hline
1642busIDValid & boolean & Whether the "busID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1643\hline
1644busAddressValid & boolean & Whether the "busAddress" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1645\hline
1646busDataValid & boolean & Whether the "busData" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1647\hline
1648commandValid & boolean & Whether the "busCommandType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1649\hline
1650requestorIDValid & boolean & Whether the "busRequestorID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1651\hline
1652completerIDValid & boolean & Whether the "busCompleterID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1653\hline
1654targetIDValid & boolean & Whether the "targetID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1655\jsontableend{PCI/PCI-X Bus Error validation structure field table.}
1656
1657% PCI/PCI-X Component error section.
1658\section{PCI/PCI-X Component Error Section}
1659\label{section:pcicomponenterrorsection}
1660This 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 \}\}}.
1661\jsontable{table:pcicomponenterrorsection}
1662validationBits & object & A PCI/PCI-X Component Error Validation structure, as defined in Subsection \ref{subsection:pcicomponenterrorvalidationstructure}.\\
1663\hline
1664errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1665\hline
1666idInfo & object & A PCI/PCI-X Component ID structure, as defined in Subsection \ref{subsection:pcicomponentidstructure}.\\
1667\hline
1668memoryNumber & uint64 & The number of PCI/PCI-X component memory mapped register address/data pair values are present in this structure.\\
1669\hline
1670ioNumber & uint64 & The number of PCI/PCI-X component programmed I/O register address/data pair values are present in this structure.\\
1671\hline
1672registerDataPairs & 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}.\\
1673\jsontableend{PCI/PCI-X Component Error structure field table.}
1674
1675% PCI/PCI-X Component error validation structure.
1676\subsection{PCI/PCI-X Component Error Validation Structure}
1677\label{subsection:pcicomponenterrorvalidationstructure}
1678This structure describes which fields within a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) are valid, using boolean fields.
1679\jsontable{table:pcicomponenterrorvalidationstructure}
1680errorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1681\hline
1682idInfoValid & boolean & Whether the "idInfo" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1683\hline
1684memoryNumberValid & boolean & Whether the "memoryNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1685\hline
1686ioNumberValid & boolean & Whether the "ioNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1687\hline
1688registerDataPairsValid & boolean & Whether the "registerDataPairs" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1689\jsontableend{PCI/PCI-X Component Error validation structure field table.}
1690
1691% PCI/PCI-X Component ID structure.
1692\subsection{PCI/PCI-X Component ID Structure}
1693\label{subsection:pcicomponentidstructure}
1694This structure describes the ID of a single PCI/PCI-X component for use in a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}).
1695\jsontable{table:pcicomponentidstructure}
1696vendorID & uint64 & The vendor ID of this PCI/PCI-X component.\\
1697\hline
1698deviceID & uint64 & The device ID of this PCI/PCI-X component.\\
1699\hline
1700classCode & uint64 & The class code of this PCI/PCI-X component.\\
1701\hline
1702functionNumber & uint64 & The function number of this PCI/PCI-X component.\\
1703\hline
1704deviceNumber & uint64 & The device number of this PCI/PCI-X component.\\
1705\hline
1706busNumber & uint64 & The bus number of this PCI/PCI-X component.\\
1707\hline
1708segmentNumber & uint64 & The segment number of this PCI/PCI-X component.\\
1709\jsontableend{PCI/PCI-X Component ID structure field table.}
1710
1711% PCI/PCI-X Component Register Pair structure.
1712\subsection{PCI/PCI-X Component Register Pair Structure}
1713\label{subsection:pcicomponentregisterpairstructure}
1714This 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.
1715\jsontable{table:pcicomponentregisterpairstructure}
1716firstHalf & uint64 & The first 8 bytes of the 16 byte register pair structure.\\
1717\hline
1718secondHalf & uint64 & The second 8 bytes of the 16 byte register pair structure.\\
1719\jsontableend{PCI/PCI-X Component Register Pair structure field table.}
1720
1721% Firmware error section.
1722\section{Firmware Error Section}
1723\label{section:firmwareerrorsection}
1724This 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 \}\}}.
1725\jsontable{table:firmwareerrorsection}
1726errorRecordType.value & uint64 & The raw value of the type of firmware error record this is.\\
1727errorRecordType.name & string & The human readable name, if available, of the type of firmware error record this is.\\
1728\hline
1729revision & int & The header revision of this record. For the referenced UEFI specification, this value is 2.\\
1730\hline
1731recordID & 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.\\
1732\hline
1733recordIDGUID & 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.\\
1734\jsontableend{Firmware Error structure field table.}
1735
1736% Generic DMAr error section.
1737\section{Generic DMAr Error Section}
1738\label{section:dmargenericerrorsection}
1739This 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 \}\}}.
1740\jsontable{table:dmargenericerrorsection}
1741requesterID & int & The device ID associated with the fault condition.\\
1742\hline
1743segmentNumber & int & The segment number associated with the device.\\
1744\hline
1745faultReason.value & uint64 & The raw value of the reason for the fault.\\
1746faultReason.name & string & The human readable name, if available, of the reason for the fault.\\
1747faultReason.description & string (\textbf{optional}) & A human readable description, if available, of the reason for the fault.\\
1748\hline
1749accessType.value & uint64 & The raw value of the access type that caused the fault.\\
1750accessType.name & string & The human readable name, if available, of the access type that caused the fault.\\
1751\hline
1752addressType.value & uint64 & The raw value of the addressing type that caused the fault.\\
1753addressType.name & string & The human readable name, if available, of the addressing type that caused the fault.\\
1754\hline
1755architectureType.value & uint64 & The raw value of the DMAr architecture type.\\
1756architectureType.name & string & The human readable name, if available, of the DMAr architecture type.\\
1757\hline
1758deviceAddress & uint64 & The 64-bit device virtual address contained in the faulted DMA request.\\
1759\jsontableend{Generic DMAr Error structure field table.}
1760
1761% VT-d DMAr error section.
1762\section{VT-d DMAr Error Section}
1763\label{section:vtddmarerrorsection}
1764This 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 \}\}}.
1765\jsontable{table:vtddmarerrorsection}
1766version & int & Version register value as defined in the VT-d specification.\\
1767\hline
1768revision & int & Revision field in VT-d specific DMA remapping reporting structure.\\
1769\hline
1770oemID & uint64 & OEM ID field in VT-d specific DMA remapping reporting structure.\\
1771\hline
1772capabilityRegister & uint64 & Value of VT-d capability register.\\
1773\hline
1774extendedCapabilityRegister & uint64 & Value of VT-d extended capability register.\\
1775\hline
1776globalCommandRegister & uint64 & Value of VT-d global command register.\\
1777\hline
1778globalStatusRegister & uint64 & Value of VT-d global status register.\\
1779\hline
1780faultStatusRegister & uint64 & Value of VT-d fault status register.\\
1781\hline
1782faultRecord & object & A VT-d DMAR Fault Record structure, as defined in Subsection \ref{subsection:vtddmarfaultrecordstructure}.\\
1783\hline
1784rootEntry & string & A base64-represented binary dump of the root entry table for the associated requester ID.\\
1785\hline
1786contextEntry & string & A base64-represented binary dump of the context entry table for the associated requester ID.\\
1787\hline
1788pageTableEntry\_Level6 & uint64 & The page table entry for the device virtual address in page level 6.\\
1789\hline
1790pageTableEntry\_Level5 & uint64 & The page table entry for the device virtual address in page level 5.\\
1791\hline
1792pageTableEntry\_Level4 & uint64 & The page table entry for the device virtual address in page level 4.\\
1793\hline
1794pageTableEntry\_Level3 & uint64 & The page table entry for the device virtual address in page level 3.\\
1795\hline
1796pageTableEntry\_Level2 & uint64 & The page table entry for the device virtual address in page level 2.\\
1797\hline
1798pageTableEntry\_Level1 & uint64 & The page table entry for the device virtual address in page level 1.\\
1799\jsontableend{VT-d DMAr Error structure field table.}
1800
1801% VT-d DMAR Fault Record structure.
1802\subsection{VT-d DMAR Fault Record Structure}
1803\label{subsection:vtddmarfaultrecordstructure}
1804This structure describes a fault record, which forms part of a single VT-d DMAr Error section (\ref{section:vtddmarerrorsection}).
1805\jsontable{table:vtddmarfaultrecordstructure}
1806faultInformation & uint64 & Fault information field as defined in the VT-d specification.\\
1807\hline
1808sourceIdentifier & uint64 & Identifier of the source of the VT-d fault.\\
1809\hline
1810privelegeModeRequested & boolean & Whether privelege mode was requested.\\
1811\hline
1812executePermissionRequested & boolean & Whether execute permission was requested.\\
1813\hline
1814pasidPresent & boolean & Whether the "pasidValue" field contains valid data.\\
1815\hline
1816faultReason & uint64 & The reason for the VT-d fault, as defined in the VT-d specification.\\
1817\hline
1818pasidValue & uint64 & The PASID associated with the fault.\\
1819\hline
1820addressType & uint64 & The addressing type of the fault, as defined by the VT-d specification.\\
1821\hline
1822type.value & uint64 & The raw value of the type of VT-d fault record.\\
1823type.name & string & The human readable name, if available, of the type of VT-d fault record.\\
1824\jsontableend{VT-d DMAR Fault Record structure field table.}
1825
1826% IOMMU DMAr error section.
1827\section{IOMMU DMAr Error Section}
1828\label{section:iommudmarerrorsection}
1829This 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 \}\}}.
1830\jsontable{table:iommudmarerrorsection}
1831revision & int & The IOMMU specification revision.\\
1832\hline
1833controlRegister & uint64 & The IOMMU control register value.\\
1834\hline
1835statusRegister & uint64 & The IOMMU status register value.\\
1836\hline
1837eventLogEntry & string & A base-64 binary dump of the IOMMU fault-related event log entry, as defined in the IOMMU specification.\\
1838\hline
1839deviceTableEntry & string & A base-64 representation of the value from the device table for a given requester ID.\\
1840\hline
1841pageTableEntry\_Level6 & uint64 & Page table entry for device virtual address in page level 6.\\
1842\hline
1843pageTableEntry\_Level5 & uint64 & Page table entry for device virtual address in page level 5.\\
1844\hline
1845pageTableEntry\_Level4 & uint64 & Page table entry for device virtual address in page level 4.\\
1846\hline
1847pageTableEntry\_Level3 & uint64 & Page table entry for device virtual address in page level 3.\\
1848\hline
1849pageTableEntry\_Level2 & uint64 & Page table entry for device virtual address in page level 2.\\
1850\hline
1851pageTableEntry\_Level1 & uint64 & Page table entry for device virtual address in page level 1.\\
1852\jsontableend{IOMMU DMAr Error structure field table.}
1853
1854% CCIX PER error section.
1855\section{CCIX PER Error Section}
1856\label{section:ccixpererrorsection}
1857This 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 \}\}}.
1858\jsontable{table:ccixpererrorsection}
1859length & uint64 & The length (in bytes) of the entire structure.\\
1860\hline
1861validationBits & object & A CCIX PER Validation structure as described in Subsection \ref{subsection:ccixpervalidationstructure}.\\
1862\hline
1863ccixSourceID & 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.\\
1864\hline
1865ccixPortID & int & The CCIX Port ID that reported this error.\\
1866\hline
1867ccixPERLog & 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).\\
1868\jsontableend{CCIX PER Error structure field table.}
1869
1870% CCIX PER Validation structure.
1871\subsection{CCIX PER Validation Structure}
1872\label{subsection:ccixpervalidationstructure}
1873This structure describes which fields are valid in a CCIX PER Error section (\ref{section:ccixpererrorsection}) using boolean fields.
1874\jsontable{table:ccixpervalidationstructure}
1875ccixSourceIDValid & boolean & Whether the "ccixSourceID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1876\hline
1877ccixPortIDValid & boolean & Whether the "ccixPortID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1878\hline
1879ccixPERLogValid & boolean & Whether the "ccixPERLog" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1880\jsontableend{CCIX PER validation structure field table.}
1881
1882% CXL Protocol error section.
1883\section{CXL Protocol Error Section}
1884\label{section:cxlprotocolerrorsection}
1885This 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 \}\}}.
1886\jsontable{table:cxlprotocolerrorsection}
1887validationBits & object & A CXL Protocol Validation structure as defined in Subsection \ref{subsection:cxlprotocolvalidationstructure}.\\
1888\hline
1889agentType.value & uint64 & The raw value of the detecting CXL agent type.\\
1890agentType.name & string & The human readable name, if available, of the CXL agent type.\\
1891\hline
1892cxlAgentAddress & 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.\\
1893\hline
1894deviceID & object & A CXL Device ID structure, as defined in Subsection \ref{subsection:cxlprotocoldeviceidstructure}.\\
1895\hline
1896deviceSerial & 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).\\
1897\hline
1898capabilityStructure & string (\textbf{optional}) & A base64-encoded binary dump of the CXL device's PCIe capability structure. This could either be a PCIe 1.1 Capability Structure (36-byte, padded to 60 bytes), or a PCIe 2.0 Capability Structure (60-byte). Only included if the detecting device is a CXL device (field \texttt{agentType.value} has value 0).\\
1899\hline
1900dvsecLength & int & Length (in bytes) of the CXL DVSEC structure.\\
1901\hline
1902errorLogLength & int & Length (in bytes) of the CXL Error Log structure.\\
1903\hline
1904cxlDVSEC & 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.\\
1905\hline
1906cxlErrorLog & 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.\\
1907\jsontableend{CXL Protocol Error structure field table.}
1908
1909% CXL Protocol Validation structure.
1910\subsection{CXL Protocol Validation Structure}
1911\label{subsection:cxlprotocolvalidationstructure}
1912This structure describes which fields are valid in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) using boolean fields.
1913\jsontable{table:cxlprotocolvalidationstructure}
1914cxlAgentTypeValid & boolean & Whether the "cxlAgentType" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1915\hline
1916cxlAgentAddressValid & boolean & Whether the "cxlAgentAddress" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1917\hline
1918deviceIDValid & boolean & Whether the "deviceID" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1919\hline
1920deviceSerialValid & boolean & Whether the "deviceSerial" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1921\hline
1922capabiltyStructureValid & boolean & Whether the "capabilityStructure" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1923\hline
1924cxlDVSECValid & boolean & Whether the "cxlDVSEC" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1925\hline
1926cxlErrorLogValid & boolean & Whether the "cxlErrorLog" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1927\jsontableend{CXL Protocol validation structure field table.}
1928
1929% CXL Protocol Device Agent Address structure.
1930\subsection{CXL Protocol Device Agent Address Structure}
1931\label{subsection:cxlprotocoldeviceagentaddressstructure}
1932This 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".
1933\jsontable{table:cxlprotocoldeviceagentaddressstructure}
1934functionNumber & uint64 & The function number of the CXL device.\\
1935\hline
1936deviceNumber & uint64 & The device number of the CXL device.\\
1937\hline
1938busNumber & uint64 & The bus number of the CXL device.\\
1939\hline
1940segmentNumber & uint64 & The segment number of the CXL device.\\
1941\jsontableend{CXL Protocol Device Agent Address structure field table.}
1942
1943% CXL Protocol RCRB Base Address structure.
1944\subsection{CXL Protocol RCRB Base Address Structure}
1945\label{subsection:cxlprotocolrcrbaddressstructure}
1946This 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".
1947\jsontable{table:cxlprotocolrcrbaddressstructure}
1948value & uint64 & The CXL port RCRB base address.\\
1949\jsontableend{CXL Protocol RCRB Base Address structure field table.}
1950
1951% CXL Protocol Device ID structure.
1952\subsection{CXL Protocol Device ID Structure}
1953\label{subsection:cxlprotocoldeviceidstructure}
1954This structure describes the ID of a CXL device, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}).
1955\jsontable{table:cxlprotocoldeviceidstructure}
1956vendorID & uint64 & The vendor ID of the CXL device.\\
1957\hline
1958deviceID & uint64 & The device ID of the CXL device.\\
1959\hline
1960subsystemVendorID & uint64 & The subsystem vendor ID of the CXL device.\\
1961\hline
1962subsystemDeviceID & uint64 & The subsystem device ID of the CXL device.\\
1963\hline
1964classCode & uint64 & The class code of the CXL device.\\
1965\hline
1966slotNumber & uint64 & The slot number of the CXL device.\\
1967\jsontableend{CXL Protocol Device ID structure field table.}
1968
1969% CXL Component error section.
1970\section{CXL Component Error Section}
1971\label{section:cxlcomponenterrorsection}
1972This 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:\\
1973\begin{itemize}
1974    \item CXL General Media Error (\texttt{\{ 0xfbcd0a77, 0xc260, 0x417f, \{ 0x85, 0xa9, 0x08, 0x8b, 0x16, 0x21, 0xeb, 0xa6 \}\}})\\
1975    \item CXL DRAM Event Error (\texttt{\{ 0x601dcbb3, 0x9c06, 0x4eab, \{ 0xb8, 0xaf, 0x4e, 0x9b, 0xfb, 0x5c, 0x96, 0x24 \}\}})\\
1976    \item CXL Memory Module Error (\texttt{\{ 0xfe927475, 0xdd59, 0x4339, \{ 0xa5, 0x86, 0x79, 0xba, 0xb1, 0x13, 0xb7, 0x74 \}\}})\\
1977    \item CXL Physical Switch Error (\texttt{\{ 0x77cf9271, 0x9c02, 0x470b, \{ 0x9f, 0xe4, 0xbc, 0x7b, 0x75, 0xf2, 0xda, 0x97 \}\}})\\
1978    \item CXL Virtual Switch Error (\texttt{\{ 0x40d26425, 0x3396, 0x4c4d, \{ 0xa5, 0xda, 0x3d, 0x47, 0x26, 0x3a, 0xf4, 0x25 \}\}})\\
1979    \item CXL MLD Port Error (\texttt{\{ 0x8dc44363, 0x0c96, 0x4710, \{ 0xb7, 0xbf, 0x04, 0xbb, 0x99, 0x53, 0x4c, 0x3f \}\}})\\
1980\end{itemize}
1981\jsontable{table:cxlcomponenterrorsection}
1982length & uint64 & The length in bytes for the entire structure.\\
1983\hline
1984validationBits & object & A CXL Component Validation structure as described in Subsection \ref{subsection:cxlcomponentvalidationstructure}.\\
1985\hline
1986deviceID & object & A CXL Component Device ID structure as described in Subsection \ref{subsection:cxlcomponentdeviceidstructure}.\\
1987\hline
1988deviceSerial & uint64 & The serial of the CXL component.\\
1989\hline
1990cxlComponentEventLog.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.\\
1991\jsontableend{CXL Component Error structure field table.}
1992
1993% CXL Component Validation structure.
1994\subsection{CXL Component Validation Structure}
1995\label{subsection:cxlcomponentvalidationstructure}
1996This structure describes which fields are valid in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}) using boolean fields.
1997\jsontable{table:cxlcomponentvalidationstructure}
1998deviceIDValid & boolean & Whether the "deviceID" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1999\hline
2000deviceSerialValid & boolean & Whether the "deviceSerial" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
2001\hline
2002cxlComponentEventLogValid & boolean & Whether the "cxlComponentEventLog" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
2003\jsontableend{CXL Component validation structure field table.}
2004
2005% CXL Component Device ID structure.
2006\subsection{CXL Component Device ID Structure}
2007\label{subsection:cxlcomponentdeviceidstructure}
2008This structure describes the ID of a CXL component, for use in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}).
2009\jsontable{table:cxlcomponentdeviceidstructure}
2010vendorID & uint64 & The vendor ID of the CXL component.\\
2011\hline
2012deviceID & uint64 & The device ID of the CXL component.\\
2013\hline
2014functionNumber & uint64 & The function number of the CXL component.\\
2015\hline
2016deviceNumber & uint64 & The device number of the CXL component.\\
2017\hline
2018busNumber & uint64 & The bus of the CXL component.\\
2019\hline
2020segmentNumber & uint64 & The segment of the CXL component.\\
2021\hline
2022slotNumber & uint64 & The slot number of the CXL component.\\
2023\jsontableend{CXL Component Device ID structure field table.}
2024
2025% Undefined error section.
2026\section{Undefined Error Section}
2027\label{section:undefinederrorsection}
2028This 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.
2029\jsontable{table:ccixpererrorsection}
2030data & string & A base64-encoded binary dump of the undefined CPER section.\\
2031\jsontableend{Undefined Error structure field table.}
2032
2033\end{document}