blob: 5d338cef4a5e6b6bbc131cccdf3887c0d4587d11 [file] [log] [blame]
Lawrence Tang3c878352022-07-08 14:04:50 +01001\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:headerrevstructure}
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.
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%Sections.
213\chapter{Section Specification}
214\label{chapter:sectionchapter}
215This chapter defines section body formats for all of the sections defined within UEFI Specification section N.2.4.
216
217% Generic processor error section.
218\section{Generic Processor Error Section}
219\label{section:genericprocessorerrorsection}
220This 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{\{x9876CCAD, 0x47B4, 0x4bdb, \{0xB6, 0x5E, 0x16, 0xF1, 0x93, 0xC4, 0xF3, 0xDB\}\}}.
221\jsontable{table:genericprocessorerrorsection}
Lawrence Tang12c1f652022-07-08 15:29:37 +0100222validationBits & object & A Generic Processor Error Validation Structure, as described in Subsection \ref{subsection:genericprocessorvalidationstructure}.\\
223\hline
224processorType.name & string & If available, the human readable name of the processor type.\\
225processorType.value & uint64 & The integer value of the processor type.\\
226\hline
227processorISA.name & string & If available, the human readable name of the processor ISA.\\
228processorISA.value & uint64 & The integer value corresponding to the processor ISA.\\
229\hline
230errorType.name & string & If available, the human readable name of the type of processor error this section describes.\\
231errorType.value & uint64 & The integer value corresponding to the processor error type.\\
232\hline
233operation.name & string & If available, the human readable name of the operation.\\
234operation.value & uint64 & The integer value corresponding to the operation.\\
235\hline
236flags & object & Flag information for the Generic Processor Error as described in Subsection \ref{subsection:genericprocessorflagsstructure}.\\
237\hline
238level & int & The level of the structure at which the error occurred.\\
239\hline
240cpuVersionInfo & uint64 & The CPU version information as reported by CPUID with EAX=1. On ARM, this is MIDR\_EL1.\\
241\hline
242cpuBrandString & string & The ASCII brand string of the CPU. This field is optional on ARM.\\
243\hline
244processorID & uint64 & The unique identifier of the logical processor. On ARM, this is MPIDR\_EL1.\\
245\hline
246targetAddress & uint64 & The target address associated with the error.\\
247\hline
248requestorID & uint64 & ID of the requestor associated with the error.\\
249\hline
250responderID & uint64 & ID of the responder associated with the error.\\
251\hline
252instructionIP & uint64 & Identifies the instruction pointer at the point of error.\\
253\jsontableend{Generic Processor Error structure field table.}
Lawrence Tang3c878352022-07-08 14:04:50 +0100254
255% Generic processor error validation structure.
256\subsection{Generic Processor Error Validation Structure}
257\label{subsection:genericprocessorvalidationstructure}
Lawrence Tang12c1f652022-07-08 15:29:37 +0100258This structure describes the valdation bits structure of a General Processor Error CPER section.
Lawrence Tang3c878352022-07-08 14:04:50 +0100259\jsontable{table:genericprocessorvalidationstructure}
260processorTypeValid & boolean & Whether the "processorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
261\hline
262processorISAValid & boolean & Whether the "processorISA" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
263\hline
264errorTypeValid & boolean & Whether the "errorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
265\hline
266operationValid & boolean & Whether the "operation" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
267\hline
268flagsValid & boolean & Whether the "flags" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
269\hline
270levelValid & boolean & Whether the "levelValid" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
271\hline
272cpuVersionValid & boolean & Whether the "cpuVersion" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
273\hline
274cpuBrandInfoValid & boolean & Whether the "cpuBrandInfo" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
275\hline
276cpuIDValid & boolean & Whether the "cpuID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
277\hline
278targetAddressValid & boolean & Whether the "targetAddress" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
279\hline
280requesterIDValid & boolean & Whether the "requesterID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
281\hline
282responderIDValid & boolean & Whether the "responderID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
283\hline
284instructionIPValid & boolean & Whether the "instructionIP" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
Lawrence Tang12c1f652022-07-08 15:29:37 +0100285\jsontableend{Generic Processor Error validation structure field table.}
286
287% Generic processor error flags structure.
288\subsection{Generic Processor Error Flags Structure}
289\label{subsection:genericprocessorflagsstructure}
290This structure describes the flags structure of a General Processor Error CPER section.
291\jsontable{table:genericprocessorflagsstructure}
292restartable & boolean & Whether program execution can be restarted reliably after the error.\\
293\hline
294preciseIP & boolean & Whether the instruction IP captured is directly associated with the error.\\
295\hline
296overflow & boolean & Whether a machine check overflow occurred (multiple errors occurred at once).\\
297\hline
298corrected & boolean & Whether the error was corrected by hardware/firmware.\\
299\jsontableend{Generic Processor Error flags structure field table.}
300
301% IA32/x64 error section.
302\section{IA32/x64 Processor Error Section}
303\label{section:ia32x64errorsection}
304This 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\}\}}.
305\jsontable{table:genericprocessorerrorsection}
306validationBits & object & IA32/x64 Processor Error Validation Structure as described in Subsection \ref{subsection:ia32x64processorflagsstructure}.\\
307\hline
308localAPICID & uint64 & The APIC ID of the processor.\\
309\hline
310cpuidInfo & object & IA32/x64 CPUINFO Structure as defined in Subsection \ref{subsection:ia32x64cpuinfostructure}.\\
311\hline
312processorErrorInfo & array & Array of IA32/x64 Processor Error Info Structures as described in Subsection \ref{subsection:ia32x64processorerrorinfostructure}.\\
313\hline
314processorContextInfo & array & Array of IA32/x64 Processor Context Info Structures as described in Subsection \ref{subsection:ia32x64processorcontextinfostructure}.\\
315\jsontableend{IA32/x64 Processor Error structure field table.}
316
317% IA32/x64 validation bitfield structure.
318\subsection{IA32/x64 Processor Error Validation Structure}
319\label{subsection:ia32x64processorflagsstructure}
320This structure describes the validation bitfield structure of an IA32/x64 Error CPER section.
321\jsontable{table:ia32x64processorflagsstructure}
322localAPICIDValid & boolean & Whether the "localAPICID" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
323\hline
324cpuIDInfoValid & boolean & Whether the "cpuIDInfo" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
325\hline
326processorErrorInfoNum & int & The number of IA32/x64 Processor Error Info Structures (\ref{subsection:ia32x64processorerrorinfostructure}) that are included with this error section.\\
327\hline
328processorContextInfoNum & int & The number of IA32/x64 Processor Context Info Structures (\ref{subsection:ia32x64processorcontextinfostructure}) that are included with this error section.\\
329\jsontableend{IA32/x64 Processor Error validation structure field table.}
330
331% IA32/x64 CPUINFO structure.
332\subsection{IA32/x64 CPUINFO Structure}
333\label{subsection:ia32x64cpuinfostructure}
334This structure describes the CPUINFO structure of an IA32/x64 Error CPER section.
335\jsontable{table:ia32x64cpuinfostructure}
336eax & uint64 & Value of the EAX register resulting from a call to CPUID with EAX=1.\\
337\hline
338ebx & uint64 & Value of the EBX register resulting from a call to CPUID with EAX=1.\\
339\hline
340ecx & uint64 & Value of the ECX register resulting from a call to CPUID with EAX=1.\\
341\hline
342edx & uint64 & Value of the EDX register resulting from a call to CPUID with EAX=1.\\
343\jsontableend{IA32/x64 CPUINFO structure field table.}
344
345% IA32/x64 Processor Error Info structure.
346\subsection{IA32/x64 Processor Error Info Structure}
347\label{subsection:ia32x64processorerrorinfostructure}
348This structure describes a single IA32/x64 Processor Error Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
349\jsontable{table:ia32x64processorerrorinfostructure}
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100350type & 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.\\
Lawrence Tang12c1f652022-07-08 15:29:37 +0100351\hline
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100352validationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
353\hline
354checkInfo & 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.\\
355\hline
356targetAddressID & uint64 & Identifies the target address associated with the error.\\
357\hline
358requestorID & uint64 & Identifies the requestor associated with the error.\\
359\hline
360responderID & uint64 & Identifies the responder associated with the error.\\
361\hline
362instructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
Lawrence Tang12c1f652022-07-08 15:29:37 +0100363\jsontableend{IA32/x64 Processor Error Info structure field table.}
364
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100365% IA32/x64 Processor Error Info Validation structure.
366\subsection{IA32/x64 Processor Error Info Validation Structure}
367\label{subsection:ia32x64processorerrorinfovalidationstructure}
368This structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
369\jsontable{table:ia32x64processorerrorinfovalidationstructure}
370checkInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
371\hline
372targetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
373\hline
374requestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
375\hline
376responderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
377\hline
378instructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
379\hline
380\jsontableend{IA32/x64 Processor Error Info Validation structure field table.}
381
382% IA32/x64 Processor Error Check Info (Cache/TLB Error)
383\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
384\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
385This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
386The GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
387\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
388validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
389\hline
390transactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
391transactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
392\hline
393operation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
394operation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
395\hline
396level & uint64 & The cache/TLB level at which the error occurred.\\
397\hline
398processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
399\hline
400uncorrected & boolean & Whether the error remained uncorrected.\\
401\hline
402preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
403\hline
404restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
405\hline
406overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
407\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
408
409% IA32/x64 Processor Error Check Info (Bus Error)
410\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
411\label{subsection:ia32x64processorerrorcheckinfobusstructure}
412This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
413The GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
414\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
415validationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
416\hline
417transactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
418transactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
419\hline
420operation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
421operation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
422\hline
423level & uint64 & The bus heirarchy level at which the error occurred.\\
424\hline
425processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
426\hline
427uncorrected & boolean & Whether the error remained uncorrected.\\
428\hline
429preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
430\hline
431restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
432\hline
433overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
434\hline
435participationType.value & uint64 & The raw value of the type of participation.\\
436participationType.name & string & The human readable name, if available, of the type of participation.\\
437\hline
438timedOut & boolean & Whether the request timed out.\\
439\hline
440addressSpace.value & uint64 & The raw value of the address space the error was in.\\
441addressSpace.name & string & The human readable name, if available, of the address space the error was in.\\
442\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
443
444% IA32/x64 Processor Error Check Info (MS Check Error)
445\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
446\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
447This structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
448The GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
449\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
450validationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
451\hline
452errorType.value & uint64 & The raw value of the type of operation that caused the error.\\
453errorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
454\hline
455processorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
456\hline
457uncorrected & boolean & Whether the error remained uncorrected.\\
458\hline
459preciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
460\hline
461restartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
462\hline
463overflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
464\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
465
466% IA32/x64 Processor Error Check Info Validation structure.
467\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
468\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
469This 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.
470\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
471transactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
472\hline
473operationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
474\hline
475levelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
476\hline
477processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
478\hline
479uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
480\hline
481preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
482\hline
483restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
484\hline
485overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
486\hline
487participationTypeValid & 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.}\\
488\hline
489timedOutValid & 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.}\\
490\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure field table.}
491
492% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
493\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
494\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
495This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for MS check errors, as a set of boolean values.
496\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
497errorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
498\hline
499processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
500\hline
501uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
502\hline
503preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
504\hline
505restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
506\hline
507overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
508\jsontableend{IA32/x64 Processor Error Check Info (MS Check) Validation structure field table.}
509
Lawrence Tang12c1f652022-07-08 15:29:37 +0100510% IA32/x64 Processor Context Info structure.
511\subsection{IA32/x64 Processor Context Info Structure}
512\label{subsection:ia32x64processorcontextinfostructure}
513This structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
514\jsontable{table:ia32x64processorcontextinfostructure}
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100515registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
516registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
Lawrence Tang12c1f652022-07-08 15:29:37 +0100517\hline
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100518registerArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
519\hline
520msrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
521\hline
522mmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
523\hline
524registerArray & 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}.\\
Lawrence Tang12c1f652022-07-08 15:29:37 +0100525\jsontableend{IA32/x64 Processor Context Info structure field table.}
Lawrence Tang3c878352022-07-08 14:04:50 +0100526
Lawrence Tang3636d3c2022-07-11 12:16:25 +0100527% IA32/x64 IA32 Register State structure
528\subsection{IA32/x64 IA32 Register State Structure}
529\label{subsection:ia32x64ia32registerstatestructure}
530This 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".
531\jsontable{table:ia32x64ia32registerstatestructure}
532eax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
533\hline
534ebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
535\hline
536ecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
537\hline
538edx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
539\hline
540esi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
541\hline
542edi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
543\hline
544ebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
545\hline
546esp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
547\hline
548cs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
549\hline
550ds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
551\hline
552ss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
553\hline
554es & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
555\hline
556fs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
557\hline
558gs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
559\hline
560eflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
561\hline
562eip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
563\hline
564cr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
565\hline
566cr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
567\hline
568cr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
569\hline
570cr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
571\hline
572cr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
573\hline
574gdtr & uint64 & The GDTR register.\\
575\hline
576idtr & uint64 & The IDTR register.\\
577\hline
578ldtr & uint64 & The LDTR register.\\
579\hline
580tr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
581\jsontableend{IA32/x64 IA32 Register State structure field table.}
582
583% IA32/x64 x64 Register State structure
584\subsection{IA32/x64 x64 Register State Structure}
585\label{subsection:ia32x64x64registerstatestructure}
586This 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".
587\jsontable{table:ia32x64x64registerstatestructure}
588rax & uint64 & The RAX register.\\
589\hline
590rbx & uint64 & The RBX register.\\
591\hline
592rcx & uint64 & The RCX register.\\
593\hline
594rdx & uint64 & The RDX register.\\
595\hline
596rsi & uint64 & The RSI register.\\
597\hline
598rdi & uint64 & The RDI register.\\
599\hline
600rbp & uint64 & The RBP register.\\
601\hline
602rsp & uint64 & The RSP register.\\
603\hline
604r8 & uint64 & The R8 register.\\
605\hline
606r9 & uint64 & The R9 register.\\
607\hline
608r10 & uint64 & The R10 register.\\
609\hline
610r11 & uint64 & The R11 register.\\
611\hline
612r12 & uint64 & The R12 register.\\
613\hline
614r13 & uint64 & The R13 register.\\
615\hline
616r14 & uint64 & The R14 register.\\
617\hline
618r15 & uint64 & The R15 register.\\
619\hline
620cs & uint64 & The CS register.\\
621\hline
622ds & uint64 & The DS register.\\
623\hline
624ss & uint64 & The SS register.\\
625\hline
626es & uint64 & The ES register.\\
627\hline
628fs & uint64 & The FS register.\\
629\hline
630gs & uint64 & The GS register.\\
631\hline
632rflags & uint64 & The RFLAGS register.\\
633\hline
634eip & uint64 & The EIP register.\\
635\hline
636cr0 & uint64 & The CR0 register.\\
637\hline
638cr1 & uint64 & The CR1 register.\\
639\hline
640cr2 & uint64 & The CR2 register.\\
641\hline
642cr3 & uint64 & The CR3 register.\\
643\hline
644cr4 & uint64 & The CR4 register.\\
645\hline
646cr8 & uint64 & The CR8 register.\\
647\hline
648gdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
649\hline
650gdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
651\hline
652idtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
653\hline
654idtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
655\hline
656ldtr & uint64 & The LDTR register.\\
657\hline
658tr & uint64 & The TR register.\\
659\jsontableend{IA32/x64 x64 Register State structure field table.}
660
661% IA32/x64 IA32 Register State structure
662\subsection{IA32/x64 Unformatted Register State Structure}
663\label{subsection:ia32x64unformattedregisterstatestructure}
664This 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".
665\jsontable{table:ia32x64unformattedregisterstatestructure}
666data & string & A base64-formatted binary representation of the register array.\\
667\jsontableend{IA32/x64 Unformatted Register State structure field table.}
668
669% ARM processor error section.
670\section{ARM Processor Error Section}
671\label{section:armprocessorerrorsection}
672This 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 \}\}}.
673\jsontable{table:armprocessorerrorsection}
674validationBits & object & An ARM Processor Error Validation structure, as defined in Subsection .\\
675\hline
676errorInfoNum & int & The number of error info structures attached to this error.\\
677\hline
678contextInfoNum & int & The number of context info structures attached to this error.\\
679\hline
680sectionLength & uint64 & The total size (in bytes) of this error section.\\
681\hline
682errorAffinity.value & int & The raw value of the error affinity for this error.\\
683errorAffinity.type & string & The human readable type of the error affinity for this error. All values are vendor defined, so specific names cannot be provided.\\
684\hline
685mpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
686\hline
687midrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
688\hline
689running & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
690\hline
691psciState & 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.\\
692\hline
693errorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
694\hline
695contextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
696\hline
697vendorSpecificInfo.data & string & A base64-encoded binary representation of any attached vendor specific information.\\
698\jsontableend{ARM Processor Error structure field table.}
699
700% ARM Processor Error Validation structure
701\subsection{ARM Processor Error Validation Structure}
702\label{subsection:armprocessorerrorvalidationstructure}
703This structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
704\jsontable{table:armprocessorerrorvalidationstructure}
705mpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
706\hline
707errorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
708\hline
709runningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
710\hline
711vendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
712\jsontableend{ARM Processor Error Validation structure field table.}
713
714% ARM Processor Error Info structure
715\subsection{ARM Processor Error Info Structure}
716\label{subsection:armprocessorerrorinfostructure}
717This structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
718\jsontable{table:armprocessorerrorinfostructure}
719version & int & The version of the structure that is implemented.\\
720\hline
721length & int & The length of the structure, in bytes. For version 0, this is 32.\\
722\hline
723validationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
724\hline
725errorType.value & uint64 & The raw value of the error type this error info describes.\\
726errorType.name & string & The human readable name, if available, of the error type this error info describes.\\
727\hline
728multipleError.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.\\
729multipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
730\hline
731flags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
732\hline
733errorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}. Which structure this is depends on the \texttt{errorType.value} field.\\
734\hline
735virtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
736\hline
737physicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
738\jsontableend{ARM Processor Error Info structure field table.}
739
740% ARM Processor Error Info Validation structure
741\subsection{ARM Processor Error Info Validation Structure}
742\label{subsection:armprocessorerrorinfovalidationstructure}
743This structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
744\jsontable{table:armprocessorerrorinfovalidationstructure}
745multipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
746\hline
747flagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
748\hline
749errorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
750\hline
751virtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
752\hline
753physicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
754\jsontableend{ARM Processor Error Info Validation structure field table.}
755
756% ARM Processor Error Info Validation structure
757\subsection{ARM Processor Error Info Flags Structure}
758\label{subsection:armprocessorerrorinfoflagsstructure}
759This structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
760\jsontable{table:armprocessorerrorinfoflagsstructure}
761firstErrorCaptured & boolean & Whether this is the first error captured.\\
762\hline
763lastErrorCaptured & boolean & Whether this is the last error captured.\\
764\hline
765propagated & boolean & Whether the error has propagated.\\
766\hline
767overflow & boolean & Whether error buffer overflow was detected. This is usually from multiple errors occurring in a short timespan, and indicates loss of error data.\\
768\jsontableend{ARM Processor Error Info Flags structure field table.}
769
770% ARM Processor Error Info Error Information (Cache/TLB) structure
771\subsection{ARM Processor Error Info Cache/TLB Information Structure}
772\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
773This structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
774\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
775validationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
776\hline
777transactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
778transactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
779\hline
780operation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
781operation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
782\hline
783level & int & The cache/TLB level that the error occurred at.\\
784\hline
785processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
786\hline
787corrected & boolean & Whether the error was corrected.\\
788\hline
789precisePC & boolean & Whether the program counter is directly associated with the error.\\
790\hline
791restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
792\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
793
794% ARM Processor Error Info Error Information (Cache/TLB) validation structure
795\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
796\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
797This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}), as a set of boolean fields.
798\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
799transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
800\hline
801operationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
802\hline
803levelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
804\hline
805processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
806\hline
807correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
808\hline
809precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
810\hline
811restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
812\jsontableend{ARM Processor Error Info Cache/TLB Validation structure field table.}
813
814% ARM Processor Error Info Error Information (Bus) structure
815\subsection{ARM Processor Error Info Bus Information Structure}
816\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
817This structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
818\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
819validationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
820\hline
821transactionType.value & uint64 & The raw value of the type of bus error.\\
822transactionType.name & string & The human readable name, if available, of the type of bus error.\\
823\hline
824operation.value & uint64 & The raw value of the bus operation that caused the error.\\
825operation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
826\hline
827level & int & The affinity level that the bus error occurred at.\\
828\hline
829processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
830\hline
831corrected & boolean & Whether the error was corrected.\\
832\hline
833precisePC & boolean & Whether the program counter is directly associated with the error.\\
834\hline
835restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
836\hline
837timedOut & boolean & Whether the request timed out.\\
838\hline
839participationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
840participationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
841\hline
842addressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
843addressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
844\hline
845memoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
846\hline
847accessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
848accessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
849\jsontableend{ARM Processor Error Info Bus Information structure field table.}
850
851% ARM Processor Error Info Error Information (Bus) validation structure
852\subsection{ARM Processor Error Info Bus Validation Structure}
853\label{subsection:armprocessorerrorinfobusvalidationstructure}
854This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}), as a set of boolean fields.
855\jsontable{table:armprocessorerrorinfobusvalidationstructure}
856transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
857\hline
858operationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
859\hline
860levelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
861\hline
862processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
863\hline
864correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
865\hline
866precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
867\hline
868restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
869\hline
870participationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
871\hline
872timedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
873\hline
874addressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
875\hline
876memoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
877\hline
878accessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
879\jsontableend{ARM Processor Error Info Bus Validation structure field table.}
880
881% ARM Processor Context Info structure
882\subsection{ARM Processor Context Info Structure}
883\label{subsection:armprocessorcontextinfostructure}
884This structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
885\jsontable{table:armprocessorcontextinfostructure}
886registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
887registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
888\hline
889registerArraySize & uint64 & The size of the attached register array, in bytes.\\
890\hline
891registerArray & 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.\\
892\jsontableend{ARM Processor Context Info structure field table.}
893
894% ARM AARCH32 General Purpose Registers structure
895\subsection{ARM AARCH32 General Purpose Registers Structure}
896\label{subsection:armaarch32gprstructure}
897This 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.
898\jsontable{table:armaarch32gprstructure}
899r0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
900\hline
901r1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
902\hline
903r2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
904\hline
905r3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
906\hline
907r4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
908\hline
909r5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
910\hline
911r6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
912\hline
913r7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
914\hline
915r8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
916\hline
917r9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
918\hline
919r10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
920\hline
921r11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
922\hline
923r12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
924\hline
925r13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
926\hline
927r14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
928\hline
929r15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
930\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
931
932% ARM AARCH32 EL1 Context Registers structure
933\subsection{ARM AARCH32 EL1 Context Registers Structure}
934\label{subsection:armaarch32el1contextregistersstructure}
935This 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.
936\jsontable{table:armaarch32el1contextregistersstructure}
937dfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
938\hline
939dfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
940\hline
941ifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
942\hline
943isr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
944\hline
945mair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
946\hline
947mair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
948\hline
949midr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
950\hline
951mpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
952\hline
953nmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
954\hline
955prrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
956\hline
957sctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
958\hline
959spsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
960\hline
961spsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
962\hline
963spsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
964\hline
965spsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
966\hline
967spsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
968\hline
969spsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
970\hline
971tpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
972\hline
973tpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
974\hline
975tpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
976\hline
977ttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
978\hline
979ttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
980\hline
981ttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
982\hline
983dacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
984\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
985
986% ARM AARCH32 EL2 Context Registers structure
987\subsection{ARM AARCH32 EL2 Context Registers Structure}
988\label{subsection:armaarch32el2contextregistersstructure}
989This 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.
990\jsontable{table:armaarch32el2contextregistersstructure}
991elr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
992\hline
993hamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
994\hline
995hamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
996\hline
997hcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
998\hline
999hcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1000\hline
1001hdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1002\hline
1003hifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1004\hline
1005hpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1006\hline
1007hsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1008\hline
1009htcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1010\hline
1011htpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1012\hline
1013httbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1014\hline
1015spsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1016\hline
1017vtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1018\hline
1019vttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1020\hline
1021dacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1022\hline
1023\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
1024
1025% ARM AARCH32 Secure Registers structure
1026\subsection{ARM AARCH32 Secure Registers Structure}
1027\label{subsection:armaarch32secureregistersstructure}
1028This 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.
1029\jsontable{table:armaarch32secureregistersstructure}
1030sctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1031\hline
1032spsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1033\jsontableend{ARM AARCH32 Secure Registers structure field table.}
1034
1035% ARM AARCH64 General Purpose Registers structure
1036\subsection{ARM AARCH64 General Purpose Registers Structure}
1037\label{subsection:armaarch64gprstructure}
1038This 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.
1039\jsontable{table:armaarch64gprstructure}
1040x0 & uint64 & Register X0.\\
1041\hline
1042x1 & uint64 & Register X1.\\
1043\hline
1044x2 & uint64 & Register X2.\\
1045\hline
1046x3 & uint64 & Register X3.\\
1047\hline
1048x4 & uint64 & Register X4.\\
1049\hline
1050x5 & uint64 & Register X5.\\
1051\hline
1052x6 & uint64 & Register X6.\\
1053\hline
1054x7 & uint64 & Register X7.\\
1055\hline
1056x8 & uint64 & Register X8.\\
1057\hline
1058x9 & uint64 & Register X9.\\
1059\hline
1060x10 & uint64 & Register X10.\\
1061\hline
1062x11 & uint64 & Register X11.\\
1063\hline
1064x12 & uint64 & Register X12.\\
1065\hline
1066x13 & uint64 & Register X13.\\
1067\hline
1068x14 & uint64 & Register X14.\\
1069\hline
1070x15 & uint64 & Register X15.\\
1071\hline
1072x16 & uint64 & Register X16.\\
1073\hline
1074x17 & uint64 & Register X17.\\
1075\hline
1076x18 & uint64 & Register X18.\\
1077\hline
1078x19 & uint64 & Register X19.\\
1079\hline
1080x20 & uint64 & Register X20.\\
1081\hline
1082x21 & uint64 & Register X21.\\
1083\hline
1084x22 & uint64 & Register X22.\\
1085\hline
1086x23 & uint64 & Register X23.\\
1087\hline
1088x24 & uint64 & Register X24.\\
1089\hline
1090x25 & uint64 & Register X25.\\
1091\hline
1092x26 & uint64 & Register X26.\\
1093\hline
1094x27 & uint64 & Register X27.\\
1095\hline
1096x28 & uint64 & Register X28.\\
1097\hline
1098x29 & uint64 & Register X29.\\
1099\hline
1100x30 & uint64 & Register X30.\\
1101\hline
1102sp & uint64 & Register SP.\\
1103\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
1104
1105% ARM AARCH64 EL1 Context Registers structure
1106\subsection{ARM AARCH64 EL1 Context Registers Structure}
1107\label{subsection:armaarch64el1contextregistersstructure}
1108This 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.
1109\jsontable{table:armaarch64el1contextregistersstructure}
1110elr\_el1 & uint64 & Register ELR (EL1).\\
1111\hline
1112esr\_el1 & uint64 & Register ESR (EL1).\\
1113\hline
1114far\_el1 & uint64 & Register FAR (EL1).\\
1115\hline
1116isr\_el1 & uint64 & Register ISR (EL1).\\
1117\hline
1118mair\_el1 & uint64 & Register MAIR (EL1).\\
1119\hline
1120midr\_el1 & uint64 & Register MIDR (EL1).\\
1121\hline
1122mpidr\_el1 & uint64 & Register MPIDR (EL1).\\
1123\hline
1124sctlr\_el1 & uint64 & Register SCTLR (EL1).\\
1125\hline
1126sp\_el0 & uint64 & Register SP (EL0).\\
1127\hline
1128sp\_el1 & uint64 & Register SP (EL1).\\
1129\hline
1130spsr\_el1 & uint64 & Register SPSR (EL1).\\
1131\hline
1132tcr\_el1 & uint64 & Register TCR (EL1).\\
1133\hline
1134tpidr\_el0 & uint64 & Register TPIDR (EL0).\\
1135\hline
1136tpidr\_el1 & uint64 & Register TPIDR (EL1).\\
1137\hline
1138tpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
1139\hline
1140ttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
1141\hline
1142ttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
1143\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
1144
1145% ARM AARCH64 EL2 Context Registers structure
1146\subsection{ARM AARCH64 EL2 Context Registers Structure}
1147\label{subsection:armaarch64el2contextregistersstructure}
1148This 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.
1149\jsontable{table:armaarch64el2contextregistersstructure}
1150elr\_el2 & uint64 & Register ELR (EL2).\\
1151\hline
1152esr\_el2 & uint64 & Register ESR (EL2).\\
1153\hline
1154far\_el2 & uint64 & Register FAR (EL2).\\
1155\hline
1156hacr\_el2 & uint64 & Register HACR (EL2).\\
1157\hline
1158hcr\_el2 & uint64 & Register HCR (EL2).\\
1159\hline
1160hpfar\_el2 & uint64 & Register HPFAR (EL2).\\
1161\hline
1162mair\_el2 & uint64 & Register MAIR (EL2).\\
1163\hline
1164sctlr\_el2 & uint64 & Register SCTLR (EL2).\\
1165\hline
1166sp\_el2 & uint64 & Register SP (EL2).\\
1167\hline
1168spsr\_el2 & uint64 & Register SPSR (EL2).\\
1169\hline
1170tcr\_el2 & uint64 & Register TCR (EL2).\\
1171\hline
1172tpidr\_el2 & uint64 & Register TPIDR (EL2).\\
1173\hline
1174ttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
1175\hline
1176vtcr\_el2 & uint64 & Register VTCR (EL2).\\
1177\hline
1178vttbr\_el2 & uint64 & Register VTTBR (EL2).\\
1179\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
1180
1181% ARM AARCH64 EL3 Context Registers structure
1182\subsection{ARM AARCH64 EL3 Context Registers Structure}
1183\label{subsection:armaarch64el3contextregistersstructure}
1184This 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.
1185\jsontable{table:armaarch64el3contextregistersstructure}
1186elr\_el3 & uint64 & Register ELR (EL3).\\
1187\hline
1188esr\_el3 & uint64 & Register ESR (EL3).\\
1189\hline
1190far\_el3 & uint64 & Register FAR (EL3).\\
1191\hline
1192mair\_el3 & uint64 & Register MAIR (EL3).\\
1193\hline
1194sctlr\_el3 & uint64 & Register SCTLR (EL3).\\
1195\hline
1196sp\_el3 & uint64 & Register SP (EL3).\\
1197\hline
1198spsr\_el3 & uint64 & Register SPSR (EL3).\\
1199\hline
1200tcr\_el3 & uint64 & Register TCR (EL3).\\
1201\hline
1202tpidr\_el3 & uint64 & Register TPIDR (EL3).\\
1203\hline
1204ttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
1205\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
1206
1207% ARM AARCH64 Miscellaneous Registers structure
1208\subsection{ARM AARCH64 Miscellaneous Registers Structure}
1209\label{subsection:armmiscregistersstructure}
1210This 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.
1211\jsontable{table:armmiscregistersstructure}
1212mrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
1213\hline
1214mrsEncoding.crm & uint64 & MRS Encoding CRm.\\
1215\hline
1216mrsEncoding.crn & uint64 & MRS Encoding CRn.\\
1217\hline
1218mrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
1219\hline
1220mrsEncoding.o0 & uint64 & MRS Encoding O0.\\
1221\hline
1222value & uint64 & Value of the single register.\\
1223\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
1224
1225% ARM AARCH64 Unknown Registers structure
1226\subsection{ARM AARCH64 Unknown Registers Structure}
1227\label{subsection:armunknownregistersstructure}
1228This 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).
1229\jsontable{table:armunknownregistersstructure}
1230data & string & A base64 representation of the unknown binary register array data.\\
1231\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
1232
1233
Lawrence Tang3c878352022-07-08 14:04:50 +01001234\end{document}