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 288errorTypeValid & 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\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) validation structure field table.} 515 516% IA32/x64 Processor Error Check Info (MS Check) Validation structure. 517\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure} 518\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure} 519This structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for MS check errors, as a set of boolean values. 520\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure} 521errorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 522\hline 523processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 524\hline 525uncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 526\hline 527preciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 528\hline 529restartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 530\hline 531overflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\ 532\jsontableend{IA32/x64 Processor Error Check Info (MS Check) validation structure field table.} 533 534% IA32/x64 Processor Context Info structure. 535\subsection{IA32/x64 Processor Context Info Structure} 536\label{subsection:ia32x64processorcontextinfostructure} 537This structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}). 538\jsontable{table:ia32x64processorcontextinfostructure} 539registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\ 540registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\ 541\hline 542registerArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\ 543\hline 544msrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\ 545\hline 546mmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\ 547\hline 548registerArray & 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}.\\ 549\jsontableend{IA32/x64 Processor Context Info structure field table.} 550 551% IA32/x64 IA32 Register State structure 552\subsection{IA32/x64 IA32 Register State Structure} 553\label{subsection:ia32x64ia32registerstatestructure} 554This 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". 555\jsontable{table:ia32x64ia32registerstatestructure} 556eax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 557\hline 558ebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 559\hline 560ecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 561\hline 562edx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 563\hline 564esi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 565\hline 566edi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 567\hline 568ebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 569\hline 570esp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 571\hline 572cs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 573\hline 574ds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 575\hline 576ss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 577\hline 578es & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 579\hline 580fs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 581\hline 582gs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 583\hline 584eflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 585\hline 586eip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 587\hline 588cr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 589\hline 590cr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 591\hline 592cr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 593\hline 594cr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 595\hline 596cr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 597\hline 598gdtr & uint64 & The GDTR register.\\ 599\hline 600idtr & uint64 & The IDTR register.\\ 601\hline 602ldtr & uint64 & The LDTR register.\\ 603\hline 604tr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\ 605\jsontableend{IA32/x64 IA32 Register State structure field table.} 606 607% IA32/x64 x64 Register State structure 608\subsection{IA32/x64 x64 Register State Structure} 609\label{subsection:ia32x64x64registerstatestructure} 610This 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". 611\jsontable{table:ia32x64x64registerstatestructure} 612rax & uint64 & The RAX register.\\ 613\hline 614rbx & uint64 & The RBX register.\\ 615\hline 616rcx & uint64 & The RCX register.\\ 617\hline 618rdx & uint64 & The RDX register.\\ 619\hline 620rsi & uint64 & The RSI register.\\ 621\hline 622rdi & uint64 & The RDI register.\\ 623\hline 624rbp & uint64 & The RBP register.\\ 625\hline 626rsp & uint64 & The RSP register.\\ 627\hline 628r8 & uint64 & The R8 register.\\ 629\hline 630r9 & uint64 & The R9 register.\\ 631\hline 632r10 & uint64 & The R10 register.\\ 633\hline 634r11 & uint64 & The R11 register.\\ 635\hline 636r12 & uint64 & The R12 register.\\ 637\hline 638r13 & uint64 & The R13 register.\\ 639\hline 640r14 & uint64 & The R14 register.\\ 641\hline 642r15 & uint64 & The R15 register.\\ 643\hline 644cs & uint64 & The CS register.\\ 645\hline 646ds & uint64 & The DS register.\\ 647\hline 648ss & uint64 & The SS register.\\ 649\hline 650es & uint64 & The ES register.\\ 651\hline 652fs & uint64 & The FS register.\\ 653\hline 654gs & uint64 & The GS register.\\ 655\hline 656rflags & uint64 & The RFLAGS register.\\ 657\hline 658eip & uint64 & The EIP register.\\ 659\hline 660cr0 & uint64 & The CR0 register.\\ 661\hline 662cr1 & uint64 & The CR1 register.\\ 663\hline 664cr2 & uint64 & The CR2 register.\\ 665\hline 666cr3 & uint64 & The CR3 register.\\ 667\hline 668cr4 & uint64 & The CR4 register.\\ 669\hline 670cr8 & uint64 & The CR8 register.\\ 671\hline 672gdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\ 673\hline 674gdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\ 675\hline 676idtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\ 677\hline 678idtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\ 679\hline 680ldtr & uint64 & The LDTR register.\\ 681\hline 682tr & uint64 & The TR register.\\ 683\jsontableend{IA32/x64 x64 Register State structure field table.} 684 685% IA32/x64 IA32 Register State structure 686\subsection{IA32/x64 Unformatted Register State Structure} 687\label{subsection:ia32x64unformattedregisterstatestructure} 688This 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". 689\jsontable{table:ia32x64unformattedregisterstatestructure} 690data & string & A base64-formatted binary representation of the register array.\\ 691\jsontableend{IA32/x64 Unformatted Register State structure field table.} 692 693% ARM processor error section. 694\section{ARM Processor Error Section} 695\label{section:armprocessorerrorsection} 696This 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 \}\}}. 697\jsontable{table:armprocessorerrorsection} 698validationBits & object & An ARM Processor Error Validation structure, as defined in Subsection \ref{subsection:armprocessorerrorvalidationstructure}.\\ 699\hline 700errorInfoNum & int & The number of error info structures attached to this error.\\ 701\hline 702contextInfoNum & int & The number of context info structures attached to this error.\\ 703\hline 704sectionLength & uint64 & The total size (in bytes) of this error section.\\ 705\hline 706errorAffinity.value & int & The raw value of the error affinity for this error.\\ 707errorAffinity.type & string & The human readable type of the error affinity for this error. All values are vendor defined, so specific names cannot be provided.\\ 708\hline 709mpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\ 710\hline 711midrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\ 712\hline 713running & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\ 714\hline 715psciState & 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.\\ 716\hline 717errorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\ 718\hline 719contextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\ 720\hline 721vendorSpecificInfo.data & string (\textbf{optional}) & If it exists, a base64-encoded binary representation of any attached vendor specific information.\\ 722\jsontableend{ARM Processor Error structure field table.} 723 724% ARM Processor Error Validation structure 725\subsection{ARM Processor Error Validation Structure} 726\label{subsection:armprocessorerrorvalidationstructure} 727This structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields. 728\jsontable{table:armprocessorerrorvalidationstructure} 729mpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\ 730\hline 731errorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\ 732\hline 733runningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\ 734\hline 735vendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\ 736\jsontableend{ARM Processor Error validation structure field table.} 737 738% ARM Processor Error Info structure 739\subsection{ARM Processor Error Info Structure} 740\label{subsection:armprocessorerrorinfostructure} 741This structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}). 742\jsontable{table:armprocessorerrorinfostructure} 743version & int & The version of the structure that is implemented.\\ 744\hline 745length & int & The length of the structure, in bytes. For version 0, this is 32.\\ 746\hline 747validationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\ 748\hline 749errorType.value & uint64 & The raw value of the error type this error info describes.\\ 750errorType.name & string & The human readable name, if available, of the error type this error info describes.\\ 751\hline 752multipleError.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.\\ 753multipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\ 754\hline 755flags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\ 756\hline 757errorInformation & 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.\\ 758\hline 759virtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\ 760\hline 761physicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\ 762\jsontableend{ARM Processor Error Info structure field table.} 763 764% ARM Processor Error Info Validation structure 765\subsection{ARM Processor Error Info Validation Structure} 766\label{subsection:armprocessorerrorinfovalidationstructure} 767This structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields. 768\jsontable{table:armprocessorerrorinfovalidationstructure} 769multipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\ 770\hline 771flagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\ 772\hline 773errorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\ 774\hline 775virtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\ 776\hline 777physicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\ 778\jsontableend{ARM Processor Error Info validation structure field table.} 779 780% ARM Processor Error Info Validation structure 781\subsection{ARM Processor Error Info Flags Structure} 782\label{subsection:armprocessorerrorinfoflagsstructure} 783This structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields. 784\jsontable{table:armprocessorerrorinfoflagsstructure} 785firstErrorCaptured & boolean & Whether this is the first error captured.\\ 786\hline 787lastErrorCaptured & boolean & Whether this is the last error captured.\\ 788\hline 789propagated & boolean & Whether the error has propagated.\\ 790\hline 791overflow & boolean & Whether error buffer overflow was detected. This is usually from multiple errors occurring in a short timespan, and indicates loss of error data.\\ 792\jsontableend{ARM Processor Error Info Flags structure field table.} 793 794% ARM Processor Error Info Error Information (Cache/TLB) structure 795\subsection{ARM Processor Error Info Cache/TLB Information Structure} 796\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} 797This 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. 798\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure} 799validationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\ 800\hline 801transactionType.value & uint64 & The raw value of the type of cache/TLB error.\\ 802transactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\ 803\hline 804operation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\ 805operation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\ 806\hline 807level & int & The cache/TLB level that the error occurred at.\\ 808\hline 809processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\ 810\hline 811corrected & boolean & Whether the error was corrected.\\ 812\hline 813precisePC & boolean & Whether the program counter is directly associated with the error.\\ 814\hline 815restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\ 816\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.} 817 818% ARM Processor Error Info Error Information (Cache/TLB) validation structure 819\subsection{ARM Processor Error Info Cache/TLB Validation Structure} 820\label{subsection:armprocessorerrorinfocachetlbvalidationstructure} 821This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}), as a set of boolean fields. 822\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure} 823transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 824\hline 825operationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 826\hline 827levelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 828\hline 829processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 830\hline 831correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 832\hline 833precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 834\hline 835restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\ 836\jsontableend{ARM Processor Error Info Cache/TLB validation structure field table.} 837 838% ARM Processor Error Info Error Information (Bus) structure 839\subsection{ARM Processor Error Info Bus Information Structure} 840\label{subsection:armprocessorerrorinfoerrorinformationbusstructure} 841This 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. 842\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure} 843validationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\ 844\hline 845transactionType.value & uint64 & The raw value of the type of bus error.\\ 846transactionType.name & string & The human readable name, if available, of the type of bus error.\\ 847\hline 848operation.value & uint64 & The raw value of the bus operation that caused the error.\\ 849operation.name & string & The human readable name, if available, of the bus operation that caused the error.\\ 850\hline 851level & int & The affinity level that the bus error occurred at.\\ 852\hline 853processorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\ 854\hline 855corrected & boolean & Whether the error was corrected.\\ 856\hline 857precisePC & boolean & Whether the program counter is directly associated with the error.\\ 858\hline 859restartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\ 860\hline 861timedOut & boolean & Whether the request timed out.\\ 862\hline 863participationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\ 864participationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\ 865\hline 866addressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\ 867addressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\ 868\hline 869memoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\ 870\hline 871accessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\ 872accessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\ 873\jsontableend{ARM Processor Error Info Bus Information structure field table.} 874 875% ARM Processor Error Info Error Information (Bus) validation structure 876\subsection{ARM Processor Error Info Bus Validation Structure} 877\label{subsection:armprocessorerrorinfobusvalidationstructure} 878This structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}), as a set of boolean fields. 879\jsontable{table:armprocessorerrorinfobusvalidationstructure} 880transactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 881\hline 882operationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 883\hline 884levelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 885\hline 886processorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 887\hline 888correctedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 889\hline 890precisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 891\hline 892restartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 893\hline 894participationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 895\hline 896timedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 897\hline 898addressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 899\hline 900memoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 901\hline 902accessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\ 903\jsontableend{ARM Processor Error Info Bus validation structure field table.} 904 905% ARM Processor Error Info Error Information (Microarchitecture/Undefined) structure 906\subsection{ARM Processor Error Info Microarchitecture/Undefined Information Structure} 907\label{subsection:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure} 908This 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). 909\jsontable{table:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure} 910data & uint64 & The unformatted data represented in the error information structure.\\ 911\jsontableend{ARM Processor Error Info Microarchitecture/Undefined Information structure field table.} 912 913% ARM Processor Context Info structure 914\subsection{ARM Processor Context Info Structure} 915\label{subsection:armprocessorcontextinfostructure} 916This structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}). 917\jsontable{table:armprocessorcontextinfostructure} 918version & int & The version of the structure. In the referenced UEFI specification, this is 0.\\ 919\hline 920registerContextType.value & uint64 & The raw value of the type of processor context state being reported.\\ 921registerContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\ 922\hline 923registerArraySize & uint64 & The size of the attached register array, in bytes.\\ 924\hline 925registerArray & 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.\\ 926\jsontableend{ARM Processor Context Info structure field table.} 927 928% ARM AARCH32 General Purpose Registers structure 929\subsection{ARM AARCH32 General Purpose Registers Structure} 930\label{subsection:armaarch32gprstructure} 931This 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. 932\jsontable{table:armaarch32gprstructure} 933r0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 934\hline 935r1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 936\hline 937r2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 938\hline 939r3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 940\hline 941r4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 942\hline 943r5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 944\hline 945r6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 946\hline 947r7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 948\hline 949r8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 950\hline 951r9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 952\hline 953r10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 954\hline 955r11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 956\hline 957r12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 958\hline 959r13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 960\hline 961r14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 962\hline 963r15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 964\jsontableend{ARM AARCH32 General Purpose Registers structure field table.} 965 966% ARM AARCH32 EL1 Context Registers structure 967\subsection{ARM AARCH32 EL1 Context Registers Structure} 968\label{subsection:armaarch32el1contextregistersstructure} 969This 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. 970\jsontable{table:armaarch32el1contextregistersstructure} 971dfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 972\hline 973dfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 974\hline 975ifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 976\hline 977isr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 978\hline 979mair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 980\hline 981mair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 982\hline 983midr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 984\hline 985mpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 986\hline 987nmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 988\hline 989prrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 990\hline 991sctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 992\hline 993spsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 994\hline 995spsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 996\hline 997spsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 998\hline 999spsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1000\hline 1001spsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1002\hline 1003spsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1004\hline 1005tpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1006\hline 1007tpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1008\hline 1009tpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1010\hline 1011ttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1012\hline 1013ttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1014\hline 1015ttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1016\hline 1017dacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1018\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.} 1019 1020% ARM AARCH32 EL2 Context Registers structure 1021\subsection{ARM AARCH32 EL2 Context Registers Structure} 1022\label{subsection:armaarch32el2contextregistersstructure} 1023This 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. 1024\jsontable{table:armaarch32el2contextregistersstructure} 1025elr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1026\hline 1027hamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1028\hline 1029hamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1030\hline 1031hcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1032\hline 1033hcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1034\hline 1035hdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1036\hline 1037hifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1038\hline 1039hpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1040\hline 1041hsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1042\hline 1043htcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1044\hline 1045htpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1046\hline 1047httbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1048\hline 1049spsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1050\hline 1051vtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1052\hline 1053vttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1054\hline 1055dacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1056\hline 1057\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.} 1058 1059% ARM AARCH32 Secure Registers structure 1060\subsection{ARM AARCH32 Secure Registers Structure} 1061\label{subsection:armaarch32secureregistersstructure} 1062This 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. 1063\jsontable{table:armaarch32secureregistersstructure} 1064sctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1065\hline 1066spsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\ 1067\jsontableend{ARM AARCH32 Secure Registers structure field table.} 1068 1069% ARM AARCH64 General Purpose Registers structure 1070\subsection{ARM AARCH64 General Purpose Registers Structure} 1071\label{subsection:armaarch64gprstructure} 1072This 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. 1073\jsontable{table:armaarch64gprstructure} 1074x0 & uint64 & Register X0.\\ 1075\hline 1076x1 & uint64 & Register X1.\\ 1077\hline 1078x2 & uint64 & Register X2.\\ 1079\hline 1080x3 & uint64 & Register X3.\\ 1081\hline 1082x4 & uint64 & Register X4.\\ 1083\hline 1084x5 & uint64 & Register X5.\\ 1085\hline 1086x6 & uint64 & Register X6.\\ 1087\hline 1088x7 & uint64 & Register X7.\\ 1089\hline 1090x8 & uint64 & Register X8.\\ 1091\hline 1092x9 & uint64 & Register X9.\\ 1093\hline 1094x10 & uint64 & Register X10.\\ 1095\hline 1096x11 & uint64 & Register X11.\\ 1097\hline 1098x12 & uint64 & Register X12.\\ 1099\hline 1100x13 & uint64 & Register X13.\\ 1101\hline 1102x14 & uint64 & Register X14.\\ 1103\hline 1104x15 & uint64 & Register X15.\\ 1105\hline 1106x16 & uint64 & Register X16.\\ 1107\hline 1108x17 & uint64 & Register X17.\\ 1109\hline 1110x18 & uint64 & Register X18.\\ 1111\hline 1112x19 & uint64 & Register X19.\\ 1113\hline 1114x20 & uint64 & Register X20.\\ 1115\hline 1116x21 & uint64 & Register X21.\\ 1117\hline 1118x22 & uint64 & Register X22.\\ 1119\hline 1120x23 & uint64 & Register X23.\\ 1121\hline 1122x24 & uint64 & Register X24.\\ 1123\hline 1124x25 & uint64 & Register X25.\\ 1125\hline 1126x26 & uint64 & Register X26.\\ 1127\hline 1128x27 & uint64 & Register X27.\\ 1129\hline 1130x28 & uint64 & Register X28.\\ 1131\hline 1132x29 & uint64 & Register X29.\\ 1133\hline 1134x30 & uint64 & Register X30.\\ 1135\hline 1136sp & uint64 & Register SP.\\ 1137\jsontableend{ARM AARCH64 General Purpose Registers structure field table.} 1138 1139% ARM AARCH64 EL1 Context Registers structure 1140\subsection{ARM AARCH64 EL1 Context Registers Structure} 1141\label{subsection:armaarch64el1contextregistersstructure} 1142This 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. 1143\jsontable{table:armaarch64el1contextregistersstructure} 1144elr\_el1 & uint64 & Register ELR (EL1).\\ 1145\hline 1146esr\_el1 & uint64 & Register ESR (EL1).\\ 1147\hline 1148far\_el1 & uint64 & Register FAR (EL1).\\ 1149\hline 1150isr\_el1 & uint64 & Register ISR (EL1).\\ 1151\hline 1152mair\_el1 & uint64 & Register MAIR (EL1).\\ 1153\hline 1154midr\_el1 & uint64 & Register MIDR (EL1).\\ 1155\hline 1156mpidr\_el1 & uint64 & Register MPIDR (EL1).\\ 1157\hline 1158sctlr\_el1 & uint64 & Register SCTLR (EL1).\\ 1159\hline 1160sp\_el0 & uint64 & Register SP (EL0).\\ 1161\hline 1162sp\_el1 & uint64 & Register SP (EL1).\\ 1163\hline 1164spsr\_el1 & uint64 & Register SPSR (EL1).\\ 1165\hline 1166tcr\_el1 & uint64 & Register TCR (EL1).\\ 1167\hline 1168tpidr\_el0 & uint64 & Register TPIDR (EL0).\\ 1169\hline 1170tpidr\_el1 & uint64 & Register TPIDR (EL1).\\ 1171\hline 1172tpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\ 1173\hline 1174ttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\ 1175\hline 1176ttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\ 1177\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.} 1178 1179% ARM AARCH64 EL2 Context Registers structure 1180\subsection{ARM AARCH64 EL2 Context Registers Structure} 1181\label{subsection:armaarch64el2contextregistersstructure} 1182This 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. 1183\jsontable{table:armaarch64el2contextregistersstructure} 1184elr\_el2 & uint64 & Register ELR (EL2).\\ 1185\hline 1186esr\_el2 & uint64 & Register ESR (EL2).\\ 1187\hline 1188far\_el2 & uint64 & Register FAR (EL2).\\ 1189\hline 1190hacr\_el2 & uint64 & Register HACR (EL2).\\ 1191\hline 1192hcr\_el2 & uint64 & Register HCR (EL2).\\ 1193\hline 1194hpfar\_el2 & uint64 & Register HPFAR (EL2).\\ 1195\hline 1196mair\_el2 & uint64 & Register MAIR (EL2).\\ 1197\hline 1198sctlr\_el2 & uint64 & Register SCTLR (EL2).\\ 1199\hline 1200sp\_el2 & uint64 & Register SP (EL2).\\ 1201\hline 1202spsr\_el2 & uint64 & Register SPSR (EL2).\\ 1203\hline 1204tcr\_el2 & uint64 & Register TCR (EL2).\\ 1205\hline 1206tpidr\_el2 & uint64 & Register TPIDR (EL2).\\ 1207\hline 1208ttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\ 1209\hline 1210vtcr\_el2 & uint64 & Register VTCR (EL2).\\ 1211\hline 1212vttbr\_el2 & uint64 & Register VTTBR (EL2).\\ 1213\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.} 1214 1215% ARM AARCH64 EL3 Context Registers structure 1216\subsection{ARM AARCH64 EL3 Context Registers Structure} 1217\label{subsection:armaarch64el3contextregistersstructure} 1218This 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. 1219\jsontable{table:armaarch64el3contextregistersstructure} 1220elr\_el3 & uint64 & Register ELR (EL3).\\ 1221\hline 1222esr\_el3 & uint64 & Register ESR (EL3).\\ 1223\hline 1224far\_el3 & uint64 & Register FAR (EL3).\\ 1225\hline 1226mair\_el3 & uint64 & Register MAIR (EL3).\\ 1227\hline 1228sctlr\_el3 & uint64 & Register SCTLR (EL3).\\ 1229\hline 1230sp\_el3 & uint64 & Register SP (EL3).\\ 1231\hline 1232spsr\_el3 & uint64 & Register SPSR (EL3).\\ 1233\hline 1234tcr\_el3 & uint64 & Register TCR (EL3).\\ 1235\hline 1236tpidr\_el3 & uint64 & Register TPIDR (EL3).\\ 1237\hline 1238ttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\ 1239\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.} 1240 1241% ARM AARCH64 Miscellaneous Registers structure 1242\subsection{ARM AARCH64 Miscellaneous Registers Structure} 1243\label{subsection:armmiscregistersstructure} 1244This 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. 1245\jsontable{table:armmiscregistersstructure} 1246mrsEncoding.op2 & uint64 & MRS Encoding OP2.\\ 1247\hline 1248mrsEncoding.crm & uint64 & MRS Encoding CRm.\\ 1249\hline 1250mrsEncoding.crn & uint64 & MRS Encoding CRn.\\ 1251\hline 1252mrsEncoding.op1 & uint64 & MRS Encoding Op1.\\ 1253\hline 1254mrsEncoding.o0 & uint64 & MRS Encoding O0.\\ 1255\hline 1256value & uint64 & Value of the single register.\\ 1257\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.} 1258 1259% ARM AARCH64 Unknown Registers structure 1260\subsection{ARM AARCH64 Unknown Registers Structure} 1261\label{subsection:armunknownregistersstructure} 1262This 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). 1263\jsontable{table:armunknownregistersstructure} 1264data & string & A base64 representation of the unknown binary register array data.\\ 1265\jsontableend{ARM AARCH64 Unknown Registers structure field table.} 1266 1267% Memory error section. 1268\section{Memory Error Section} 1269\label{section:memoryerrorsection} 1270This 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 \}\}}. 1271\jsontable{table:memoryerrorsection} 1272validationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\ 1273\hline 1274errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\ 1275\hline 1276bank & 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.\\ 1277\hline 1278memoryErrorType.value & uint64 & The raw value of the memory error type.\\ 1279memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\ 1280\hline 1281extended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\ 1282extended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\ 1283extended.chipIdentification & int & The ID of the related chip.\\ 1284\hline 1285physicalAddress & uint64 & The physical address at which the error occurred.\\ 1286\hline 1287physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\ 1288\hline 1289node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\ 1290\hline 1291card & uint64 & The card number of the memory error location.\\ 1292\hline 1293moduleRank & uint64 & The module or rank number of the offending memory error location.\\ 1294\hline 1295device & uint64 & The device number of the memory associated with the error.\\ 1296\hline 1297row & uint64 & The first 16 bits of the row number of the memory location.\\ 1298\hline 1299column & uint64 & The column number of the memory error location.\\ 1300\hline 1301bitPosition & uint64 & The bit position at which the error occurred.\\ 1302\hline 1303requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\ 1304\hline 1305responderID & uint64 & Hardware address of the device that responded to the transaction.\\ 1306\hline 1307targetID & uint64 & Hardware address of the intended target of the transaction.\\ 1308\hline 1309rankNumber & uint64 & The rank number of the memory error location.\\ 1310\hline 1311cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\ 1312\hline 1313moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\ 1314\jsontableend{Memory Error structure field table.} 1315 1316% Memory error validation structure. 1317\subsection{Memory Error Validation Structure} 1318\label{subsection:memoryerrorvalidationstructure} 1319This structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields. 1320\jsontable{table:memoryerrorvalidationstructure} 1321errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1322\hline 1323physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1324\hline 1325physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1326\hline 1327nodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1328\hline 1329cardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1330\hline 1331moduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1332\hline 1333bankValid & 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.\\ 1334\hline 1335deviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1336\hline 1337rowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1338\hline 1339memoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1340\hline 1341memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1342\hline 1343rankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1344\hline 1345cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1346\hline 1347moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1348\hline 1349extendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1350\hline 1351bankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1352\hline 1353bankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1354\hline 1355chipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\ 1356\jsontableend{Memory Error validation structure field table.} 1357 1358% Memory error normal bank addressing structure. 1359\subsection{Memory Error Standard Bank Address Structure} 1360\label{subsection:memoryerrorstandardbankaddressstructure} 1361This 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". 1362\jsontable{table:memoryerrorstandardbankaddressstructure} 1363value & uint64 & The value of the bank address.\\ 1364\jsontableend{Memory Error Standard Bank Address structure field table.} 1365 1366% Memory error address/group bank addressing structure. 1367\subsection{Memory Error Address/Group Bank Address Structure} 1368\label{subsection:memoryerroraddressgroupbankaddressstructure} 1369This 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". 1370\jsontable{table:memoryerroraddressgroupbankaddressstructure} 1371address & uint64 & The address of the bank.\\ 1372\hline 1373group & uint64 & The group of the bank.\\ 1374\jsontableend{Memory Error Address/Group Bank Address structure field table.} 1375 1376% Memory error 2 section. 1377\section{Memory Error 2 Section} 1378\label{section:memoryerror2section} 1379This 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 \}\}}. 1380\jsontable{table:memoryerror2section} 1381validationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\ 1382\hline 1383errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\ 1384\hline 1385bank & 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.\\ 1386\hline 1387memoryErrorType.value & uint64 & The raw value of the memory error type.\\ 1388memoryErrorType.name & string & The human readable name, if available, of the memory error type.\\ 1389\hline 1390status.value & int & The raw value of the memory error status.\\ 1391status.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\ 1392\hline 1393physicalAddress & uint64 & The physical address at which the error occurred.\\ 1394\hline 1395physicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\ 1396\hline 1397node & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\ 1398\hline 1399card & uint64 & The card number of the memory error location.\\ 1400\hline 1401module & uint64 & The module of the offending memory error location.\\ 1402\hline 1403device & uint64 & The device number of the memory associated with the error.\\ 1404\hline 1405row & uint64 & The first 16 bits of the row number of the memory location.\\ 1406\hline 1407column & uint64 & The column number of the memory error location.\\ 1408\hline 1409bitPosition & uint64 & The bit position at which the error occurred.\\ 1410\hline 1411rank & uint64 & The rank number of the error location.\\ 1412\hline 1413chipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\ 1414\hline 1415requestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\ 1416\hline 1417responderID & uint64 & Hardware address of the device that responded to the transaction.\\ 1418\hline 1419targetID & uint64 & Hardware address of the intended target of the transaction.\\ 1420\hline 1421cardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\ 1422\hline 1423moduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\ 1424\jsontableend{Memory Error 2 structure field table.} 1425 1426% Memory error 2 validation structure. 1427\subsection{Memory Error 2 Validation Structure} 1428\label{subsection:memoryerror2validationstructure} 1429This structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields. 1430\jsontable{table:memoryerror2validationstructure} 1431errorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1432\hline 1433physicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1434\hline 1435physicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1436\hline 1437nodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1438\hline 1439cardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1440\hline 1441moduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1442\hline 1443bankValid & 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.\\ 1444\hline 1445deviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1446\hline 1447rowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1448\hline 1449columnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1450\hline 1451rankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1452\hline 1453bitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1454\hline 1455chipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1456\hline 1457memoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1458\hline 1459statusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1460\hline 1461requestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1462\hline 1463responderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1464\hline 1465targetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1466\hline 1467cardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1468\hline 1469moduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1470\hline 1471bankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1472\hline 1473bankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\ 1474\jsontableend{Memory Error 2 validation structure field table.} 1475 1476% Memory error 2 normal bank addressing structure. 1477\subsection{Memory Error 2 Standard Bank Address Structure} 1478\label{subsection:memoryerror2standardbankaddressstructure} 1479This 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". 1480\jsontable{table:memoryerror2standardbankaddressstructure} 1481value & uint64 & The value of the bank address.\\ 1482\jsontableend{Memory Error 2 Standard Bank Address structure field table.} 1483 1484% Memory error 2 address/group bank addressing structure. 1485\subsection{Memory Error 2 Address/Group Bank Address Structure} 1486\label{subsection:memoryerror2addressgroupbankaddressstructure} 1487This 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". 1488\jsontable{table:memoryerror2addressgroupbankaddressstructure} 1489address & uint64 & The address of the bank.\\ 1490\hline 1491group & uint64 & The group of the bank.\\ 1492\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.} 1493 1494% PCIe error section. 1495\section{PCIe Error Section} 1496\label{section:pcieerrorsection} 1497This 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 \}\}}. 1498\jsontable{table:pcieerrorsection} 1499validationBits & object & A PCIe Error Validation structure as defined in Subsection \ref{subsection:pcieerrorvalidationstructure}.\\ 1500\hline 1501portType.value & uint64 & The raw value of the port type for this error.\\ 1502portType.name & string & The human readable name, if available, of the port type for this error.\\ 1503\hline 1504version.major & int & The major version number for the PCIe specification supported.\\ 1505version.minor & int & The minor version number for the PCIe specification supported.\\ 1506\hline 1507commandStatus.commandRegister & uint64 & The PCI command register value.\\ 1508commandStatus.statusRegister & uint64 & The PCI status register value.\\ 1509\hline 1510deviceID & object & A PCIe Device ID structure as defined in Subsection \ref{subsection:pciedeviceidstructure}.\\ 1511\hline 1512deviceSerialNumber & uint64 & The serial number of the device.\\ 1513\hline 1514bridgeControlStatus.secondaryStatusRegister & uint64 & The bridge secondary status register. \emph{This field is valid for bridges only.}\\ 1515\hline 1516bridgeControlStatus.controlRegister & uint64 & The bridge control register. \emph{This field is valid for bridges only.}\\ 1517\hline 1518capabilityStructure.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).\\ 1519\hline 1520aerInfo & object & A PCIe AER Extended Capability structure, as defined in Subsection \ref{subsection:pcieaerecstructure}.\\ 1521\jsontableend{PCIe Error structure field table.} 1522 1523% PCIe error validation structure. 1524\subsection{PCIe Error Validation Structure} 1525\label{subsection:pcieerrorvalidationstructure} 1526This structure describes which fields within a PCIe Error section (\ref{section:pcieerrorsection}) are valid, using boolean fields. 1527\jsontable{table:pcieerrorvalidationstructure} 1528portTypeValid & boolean & Whether the "portType" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1529\hline 1530versionValid & boolean & Whether the "version" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1531\hline 1532commandStatusValid & boolean & Whether the "commandStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1533\hline 1534deviceIDValid & boolean & Whether the "deviceID" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1535\hline 1536deviceSerialNumberValid & boolean & Whether the "deviceSerialNumber" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1537\hline 1538bridgeControlStatusValid & boolean & Whether the "bridgeControlStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1539\hline 1540capabilityStructureStatusValid & boolean & Whether the "capabilityStructure" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1541\hline 1542aerInfoValid & boolean & Whether the "aerInfo" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\ 1543\hline 1544\jsontableend{PCIe Error validation structure field table.} 1545 1546% PCIe Device ID structure. 1547\subsection{PCIe Device ID Structure} 1548\label{subsection:pciedeviceidstructure} 1549This structure describes a PCIe device ID, for use in a PCI Error section (\ref{table:pcieerrorsection}). 1550\jsontable{table:pciedeviceidstructure} 1551vendorID & uint64 & The vendor ID of the PCIe device.\\ 1552\hline 1553deviceID & uint64 & The device ID of the PCIe device.\\ 1554\hline 1555classCode & uint64 & The class code of the PCIe device.\\ 1556\hline 1557functionNumber & uint64 & The function number of the PCIe device.\\ 1558\hline 1559deviceNumber & uint64 & The device number of the PCIe device.\\ 1560\hline 1561segmentNumber & uint64 & The segment number of the PCIe device.\\ 1562\hline 1563primaryOrDeviceBusNumber & uint64 & The root port/bridge primary bus number or device bus number of the PCIe device.\\ 1564\hline 1565secondaryBusNumber & uint64 & The root port/bridge secondary bus number of the PCIe device.\\ 1566\hline 1567slotNumber & uint64 & The slot number of the PCIe device.\\ 1568\jsontableend{PCIe Device ID structure field table.} 1569 1570% PCIe Advanced Error Reporting Extended Capability structure. 1571\subsection{PCIe AER Extended Capability Structure} 1572\label{subsection:pcieaerecstructure} 1573This structure describes a PCIe Advanced Error Reporting Extended Capability structure, for use in a PCI Error section (\ref{table:pcieerrorsection}). 1574\jsontable{table:pcieaerecstructure} 1575capabilityID & uint64 & The capability ID for this AER structure.\\ 1576\hline 1577capabilityVersion & uint64 & The capability structure version for this AER structure.\\ 1578\hline 1579uncorrectableErrorStatusRegister & uint64 & The uncorrectable error status register value.\\ 1580\hline 1581uncorrectableErrorMaskRegister & uint64 & The uncorrectable error mask register value.\\ 1582\hline 1583uncorrectableErrorSeverityRegister & uint64 & The uncorrectable error severity register value.\\ 1584\hline 1585correctableErrorStatusRegister & uint64 & The correctable error status register value.\\ 1586\hline 1587correctableErrorMaskRegister & uint64 & The correctable error mask register value.\\ 1588\hline 1589aeccReg & uint64 & The AECC register value.\\ 1590\hline 1591headerLogRegister & string & A base64-encoded binary dump of the header log register.\\ 1592\hline 1593rootErrorCommand & uint64 & The root error command.\\ 1594\hline 1595rootErrorStatus & uint64 & The root error status.\\ 1596\hline 1597errorSourceIDRegister & uint64 & The error source ID register.\\ 1598\hline 1599correctableErrorSourceIDRegister & uint64 & The correctable error source ID register.\\ 1600\jsontableend{PCIe AER Extended Capability structure field table.} 1601 1602% PCI/PCI-X Bus error section. 1603\section{PCI/PCI-X Bus Error Section} 1604\label{section:pcibuserrorsection} 1605This 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 \}\}}. 1606\jsontable{table:pcibuserrorsection} 1607validationBits & object & A PCI/PCI-X Bus Error Validation structure, as described in Subsection \ref{subsection:pcibuserrorvalidationstructure}.\\ 1608\hline 1609errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\ 1610\hline 1611errorType.value & uint64 & The raw value of the error type for this bus error.\\ 1612errorType.name & string & The human readable name, if available, of the error type for this bus error.\\ 1613\hline 1614busID.busNumber & int & The bus number of this bus ID.\\ 1615busID.segmentNumber & int & The segment number of this bus ID.\\ 1616\hline 1617busAddress & uint64 & The memory or I/O address on the bus at the time of the error.\\ 1618\hline 1619busData & uint64 & Data on the bus at the time of the error.\\ 1620\hline 1621busCommandType & string & The type of command at the time of the error. Either "PCI" or "PCI-X".\\ 1622\hline 1623busRequestorID & uint64 & The PCI bus requestor ID for the error.\\ 1624\hline 1625busCompleterID & uint64 & The PCI bus completer ID for the error.\\ 1626\hline 1627targetID & uint64 & The PCI bus intended target ID for the error.\\ 1628\jsontableend{PCI/PCI-X Bus Error structure field table.} 1629 1630% PCI/PCI-X Bus error validation structure. 1631\subsection{PCI/PCI-X Bus Error Validation Structure} 1632\label{subsection:pcibuserrorvalidationstructure} 1633This structure describes which fields within a PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) are valid, using boolean fields. 1634\jsontable{table:pcibuserrorvalidationstructure} 1635errorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1636\hline 1637errorTypeValid & boolean & Whether the "errorType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1638\hline 1639busIDValid & boolean & Whether the "busID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1640\hline 1641busAddressValid & boolean & Whether the "busAddress" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1642\hline 1643busDataValid & boolean & Whether the "busData" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1644\hline 1645commandValid & boolean & Whether the "busCommandType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1646\hline 1647requestorIDValid & boolean & Whether the "busRequestorID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1648\hline 1649completerIDValid & boolean & Whether the "busCompleterID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1650\hline 1651targetIDValid & boolean & Whether the "targetID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\ 1652\jsontableend{PCI/PCI-X Bus Error validation structure field table.} 1653 1654% PCI/PCI-X Component error section. 1655\section{PCI/PCI-X Component Error Section} 1656\label{section:pcicomponenterrorsection} 1657This 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 \}\}}. 1658\jsontable{table:pcicomponenterrorsection} 1659validationBits & object & A PCI/PCI-X Component Error Validation structure, as defined in Subsection \ref{subsection:pcicomponenterrorvalidationstructure}.\\ 1660\hline 1661errorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\ 1662\hline 1663idInfo & object & A PCI/PCI-X Component ID structure, as defined in Subsection \ref{subsection:pcicomponentidstructure}.\\ 1664\hline 1665memoryNumber & uint64 & The number of PCI/PCI-X component memory mapped register address/data pair values are present in this structure.\\ 1666\hline 1667ioNumber & uint64 & The number of PCI/PCI-X component programmed I/O register address/data pair values are present in this structure.\\ 1668\hline 1669registerDataPairs & 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}.\\ 1670\jsontableend{PCI/PCI-X Component Error structure field table.} 1671 1672% PCI/PCI-X Component error validation structure. 1673\subsection{PCI/PCI-X Component Error Validation Structure} 1674\label{subsection:pcicomponenterrorvalidationstructure} 1675This structure describes which fields within a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) are valid, using boolean fields. 1676\jsontable{table:pcicomponenterrorvalidationstructure} 1677errorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\ 1678\hline 1679idInfoValid & boolean & Whether the "idInfo" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\ 1680\hline 1681memoryNumberValid & boolean & Whether the "memoryNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\ 1682\hline 1683ioNumberValid & boolean & Whether the "ioNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\ 1684\hline 1685registerDataPairsValid & boolean & Whether the "registerDataPairs" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\ 1686\jsontableend{PCI/PCI-X Component Error validation structure field table.} 1687 1688% PCI/PCI-X Component ID structure. 1689\subsection{PCI/PCI-X Component ID Structure} 1690\label{subsection:pcicomponentidstructure} 1691This structure describes the ID of a single PCI/PCI-X component for use in a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}). 1692\jsontable{table:pcicomponentidstructure} 1693vendorID & uint64 & The vendor ID of this PCI/PCI-X component.\\ 1694\hline 1695deviceID & uint64 & The device ID of this PCI/PCI-X component.\\ 1696\hline 1697classCode & uint64 & The class code of this PCI/PCI-X component.\\ 1698\hline 1699functionNumber & uint64 & The function number of this PCI/PCI-X component.\\ 1700\hline 1701deviceNumber & uint64 & The device number of this PCI/PCI-X component.\\ 1702\hline 1703busNumber & uint64 & The bus number of this PCI/PCI-X component.\\ 1704\hline 1705segmentNumber & uint64 & The segment number of this PCI/PCI-X component.\\ 1706\jsontableend{PCI/PCI-X Component ID structure field table.} 1707 1708% PCI/PCI-X Component Register Pair structure. 1709\subsection{PCI/PCI-X Component Register Pair Structure} 1710\label{subsection:pcicomponentregisterpairstructure} 1711This 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. 1712\jsontable{table:pcicomponentregisterpairstructure} 1713firstHalf & uint64 & The first 8 bytes of the 16 byte register pair structure.\\ 1714\hline 1715secondHalf & uint64 & The second 8 bytes of the 16 byte register pair structure.\\ 1716\jsontableend{PCI/PCI-X Component Register Pair structure field table.} 1717 1718% Firmware error section. 1719\section{Firmware Error Section} 1720\label{section:firmwareerrorsection} 1721This 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 \}\}}. 1722\jsontable{table:firmwareerrorsection} 1723errorRecordType.value & uint64 & The raw value of the type of firmware error record this is.\\ 1724errorRecordType.name & string & The human readable name, if available, of the type of firmware error record this is.\\ 1725\hline 1726revision & int & The header revision of this record. For the referenced UEFI specification, this value is 2.\\ 1727\hline 1728recordID & 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.\\ 1729\hline 1730recordIDGUID & 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.\\ 1731\jsontableend{Firmware Error structure field table.} 1732 1733% Generic DMAr error section. 1734\section{Generic DMAr Error Section} 1735\label{section:dmargenericerrorsection} 1736This 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 \}\}}. 1737\jsontable{table:dmargenericerrorsection} 1738requesterID & int & The device ID associated with the fault condition.\\ 1739\hline 1740segmentNumber & int & The segment number associated with the device.\\ 1741\hline 1742faultReason.value & uint64 & The raw value of the reason for the fault.\\ 1743faultReason.name & string & The human readable name, if available, of the reason for the fault.\\ 1744faultReason.description & string & A human readable description, if available, of the reason for the fault.\\ 1745\hline 1746accessType.value & uint64 & The raw value of the access type that caused the fault.\\ 1747accessType.name & string & The human readable name, if available, of the access type that caused the fault.\\ 1748\hline 1749addressType.value & uint64 & The raw value of the addressing type that caused the fault.\\ 1750addressType.name & string & The human readable name, if available, of the addressing type that caused the fault.\\ 1751\hline 1752architectureType.value & uint64 & The raw value of the DMAr architecture type.\\ 1753architectureType.name & string & The human readable name, if available, of the DMAr architecture type.\\ 1754\hline 1755deviceAddress & uint64 & The 64-bit device virtual address contained in the faulted DMA request.\\ 1756\jsontableend{Generic DMAr Error structure field table.} 1757 1758% VT-d DMAr error section. 1759\section{VT-d DMAr Error Section} 1760\label{section:vtddmarerrorsection} 1761This 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 \}\}}. 1762\jsontable{table:vtddmarerrorsection} 1763version & int & Version register value as defined in the VT-d specification.\\ 1764\hline 1765revision & int & Revision field in VT-d specific DMA remapping reporting structure.\\ 1766\hline 1767oemID & uint64 & OEM ID field in VT-d specific DMA remapping reporting structure.\\ 1768\hline 1769capabilityRegister & uint64 & Value of VT-d capability register.\\ 1770\hline 1771extendedCapabilityRegister & uint64 & Value of VT-d extended capability register.\\ 1772\hline 1773globalCommandRegister & uint64 & Value of VT-d global command register.\\ 1774\hline 1775globalStatusRegister & uint64 & Value of VT-d global status register.\\ 1776\hline 1777faultStatusRegister & uint64 & Value of VT-d fault status register.\\ 1778\hline 1779faultRecord & object & A VT-d DMAR Fault Record structure, as defined in Subsection \ref{subsection:vtddmarfaultrecordstructure}.\\ 1780\hline 1781rootEntry & string & A base64-represented binary dump of the root entry table for the associated requester ID.\\ 1782\hline 1783contextEntry & string & A base64-represented binary dump of the context entry table for the associated requester ID.\\ 1784\hline 1785pageTableEntry\_Level6 & uint64 & The page table entry for the device virtual address in page level 6.\\ 1786\hline 1787pageTableEntry\_Level5 & uint64 & The page table entry for the device virtual address in page level 5.\\ 1788\hline 1789pageTableEntry\_Level4 & uint64 & The page table entry for the device virtual address in page level 4.\\ 1790\hline 1791pageTableEntry\_Level3 & uint64 & The page table entry for the device virtual address in page level 3.\\ 1792\hline 1793pageTableEntry\_Level2 & uint64 & The page table entry for the device virtual address in page level 2.\\ 1794\hline 1795pageTableEntry\_Level1 & uint64 & The page table entry for the device virtual address in page level 1.\\ 1796\jsontableend{VT-d DMAr Error structure field table.} 1797 1798% VT-d DMAR Fault Record structure. 1799\subsection{VT-d DMAR Fault Record Structure} 1800\label{subsection:vtddmarfaultrecordstructure} 1801This structure describes a fault record, which forms part of a single VT-d DMAr Error section (\ref{section:vtddmarerrorsection}). 1802\jsontable{table:vtddmarfaultrecordstructure} 1803faultInformation & uint64 & Fault information field as defined in the VT-d specification.\\ 1804\hline 1805sourceIdentifier & uint64 & Identifier of the source of the VT-d fault.\\ 1806\hline 1807privelegeModeRequested & boolean & Whether privelege mode was requested.\\ 1808\hline 1809executePermissionRequested & boolean & Whether execute permission was requested.\\ 1810\hline 1811pasidPresent & boolean & Whether the "pasidValue" field contains valid data.\\ 1812\hline 1813faultReason & uint64 & The reason for the VT-d fault, as defined in the VT-d specification.\\ 1814\hline 1815pasidValue & uint64 & The PASID associated with the fault.\\ 1816\hline 1817addressType & uint64 & The addressing type of the fault, as defined by the VT-d specification.\\ 1818\hline 1819type.value & uint64 & The raw value of the type of VT-d fault record.\\ 1820type.name & string & The human readable name, if available, of the type of VT-d fault record.\\ 1821\jsontableend{VT-d DMAR Fault Record structure field table.} 1822 1823% IOMMU DMAr error section. 1824\section{IOMMU DMAr Error Section} 1825\label{section:iommudmarerrorsection} 1826This 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 \}\}}. 1827\jsontable{table:iommudmarerrorsection} 1828revision & int & The IOMMU specification revision.\\ 1829\hline 1830controlRegister & uint64 & The IOMMU control register value.\\ 1831\hline 1832statusRegister & uint64 & The IOMMU status register value.\\ 1833\hline 1834eventLogEntry & string & A base-64 binary dump of the IOMMU fault-related event log entry, as defined in the IOMMU specification.\\ 1835\hline 1836deviceTableEntry & string & A base-64 representation of the value from the device table for a given requester ID.\\ 1837\hline 1838pageTableEntry\_Level6 & uint64 & Page table entry for device virtual address in page level 6.\\ 1839\hline 1840pageTableEntry\_Level5 & uint64 & Page table entry for device virtual address in page level 5.\\ 1841\hline 1842pageTableEntry\_Level4 & uint64 & Page table entry for device virtual address in page level 4.\\ 1843\hline 1844pageTableEntry\_Level3 & uint64 & Page table entry for device virtual address in page level 3.\\ 1845\hline 1846pageTableEntry\_Level2 & uint64 & Page table entry for device virtual address in page level 2.\\ 1847\hline 1848pageTableEntry\_Level1 & uint64 & Page table entry for device virtual address in page level 1.\\ 1849\jsontableend{IOMMU DMAr Error structure field table.} 1850 1851% CCIX PER error section. 1852\section{CCIX PER Error Section} 1853\label{section:ccixpererrorsection} 1854This 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 \}\}}. 1855\jsontable{table:ccixpererrorsection} 1856length & uint64 & The length (in bytes) of the entire structure.\\ 1857\hline 1858validationBits & object & A CCIX PER Validation structure as described in Subsection \ref{subsection:ccixpervalidationstructure}.\\ 1859\hline 1860ccixSourceID & 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.\\ 1861\hline 1862ccixPortID & int & The CCIX Port ID that reported this error.\\ 1863\hline 1864ccixPERLog & 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).\\ 1865\jsontableend{CCIX PER Error structure field table.} 1866 1867% CCIX PER Validation structure. 1868\subsection{CCIX PER Validation Structure} 1869\label{subsection:ccixpervalidationstructure} 1870This structure describes which fields are valid in a CCIX PER Error section (\ref{section:ccixpererrorsection}) using boolean fields. 1871\jsontable{table:ccixpervalidationstructure} 1872ccixSourceIDValid & boolean & Whether the "ccixSourceID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\ 1873\hline 1874ccixPortIDValid & boolean & Whether the "ccixPortID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\ 1875\hline 1876ccixPERLogValid & boolean & Whether the "ccixPERLog" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\ 1877\jsontableend{CCIX PER validation structure field table.} 1878 1879% CXL Protocol error section. 1880\section{CXL Protocol Error Section} 1881\label{section:cxlprotocolerrorsection} 1882This 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 \}\}}. 1883\jsontable{table:cxlprotocolerrorsection} 1884validationBits & object & A CXL Protocol Validation structure as defined in Subsection \ref{subsection:cxlprotocolvalidationstructure}.\\ 1885\hline 1886agentType.value & uint64 & The raw value of the detecting CXL agent type.\\ 1887agentType.name & string & The human readable name, if available, of the CXL agent type.\\ 1888\hline 1889agentAddress & 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.\\ 1890\hline 1891deviceID & object & A CXL Device ID structure, as defined in Subsection \ref{subsection:cxlprotocoldeviceidstructure}.\\ 1892\hline 1893deviceSerial & 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).\\ 1894\hline 1895capabilityStructure & string & A base64-encoded binary dump of the CXL device's PCIe capability structure. This could either be a PCIe 1.1 Capability Structure (36-byte, padded to 60 bytes), or a PCIe 2.0 Capability Structure (60-byte). Only included if the detecting device is a CXL device (field \texttt{agentType.value} has value 0).\\ 1896\hline 1897dvsecLength & int & Length (in bytes) of the CXL DVSEC structure.\\ 1898\hline 1899errorLogLength & int & Length (in bytes) of the CXL Error Log structure.\\ 1900\hline 1901cxlDVSEC & 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.\\ 1902\hline 1903cxlErrorLog & 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.\\ 1904\jsontableend{CXL Protocol Error structure field table.} 1905 1906% CXL Protocol Validation structure. 1907\subsection{CXL Protocol Validation Structure} 1908\label{subsection:cxlprotocolvalidationstructure} 1909This structure describes which fields are valid in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) using boolean fields. 1910\jsontable{table:cxlprotocolvalidationstructure} 1911cxlAgentTypeValid & boolean & Whether the "cxlAgentType" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1912\hline 1913cxlAgentAddressValid & boolean & Whether the "cxlAgentAddress" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1914\hline 1915deviceIDValid & boolean & Whether the "deviceID" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1916\hline 1917deviceSerialValid & boolean & Whether the "deviceSerial" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1918\hline 1919capabiltyStructureValid & boolean & Whether the "capabilityStructure" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1920\hline 1921cxlDVSECValid & boolean & Whether the "cxlDVSEC" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1922\hline 1923cxlErrorLogValid & boolean & Whether the "cxlErrorLog" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\ 1924\jsontableend{CXL Protocol validation structure field table.} 1925 1926% CXL Protocol Device Agent Address structure. 1927\subsection{CXL Protocol Device Agent Address Structure} 1928\label{subsection:cxlprotocoldeviceagentaddressstructure} 1929This 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". 1930\jsontable{table:cxlprotocoldeviceagentaddressstructure} 1931functionNumber & uint64 & The function number of the CXL device.\\ 1932\hline 1933deviceNumber & uint64 & The device number of the CXL device.\\ 1934\hline 1935busNumber & uint64 & The bus number of the CXL device.\\ 1936\hline 1937segmentNumber & uint64 & The segment number of the CXL device.\\ 1938\jsontableend{CXL Protocol Device Agent Address structure field table.} 1939 1940% CXL Protocol RCRB Base Address structure. 1941\subsection{CXL Protocol RCRB Base Address Structure} 1942\label{subsection:cxlprotocolrcrbaddressstructure} 1943This 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". 1944\jsontable{table:cxlprotocolrcrbaddressstructure} 1945value & uint64 & The CXL port RCRB base address.\\ 1946\jsontableend{CXL Protocol RCRB Base Address structure field table.} 1947 1948% CXL Protocol Device ID structure. 1949\subsection{CXL Protocol Device ID Structure} 1950\label{subsection:cxlprotocoldeviceidstructure} 1951This structure describes the ID of a CXL device, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}). 1952\jsontable{table:cxlprotocoldeviceidstructure} 1953vendorID & uint64 & The vendor ID of the CXL device.\\ 1954\hline 1955deviceID & uint64 & The device ID of the CXL device.\\ 1956\hline 1957subsystemVendorID & uint64 & The subsystem vendor ID of the CXL device.\\ 1958\hline 1959subsystemDeviceID & uint64 & The subsystem device ID of the CXL device.\\ 1960\hline 1961classCode & uint64 & The class code of the CXL device.\\ 1962\hline 1963slotNumber & uint64 & The slot number of the CXL device.\\ 1964\jsontableend{CXL Protocol Device ID structure field table.} 1965 1966% CXL Component error section. 1967\section{CXL Component Error Section} 1968\label{section:cxlcomponenterrorsection} 1969This 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:\\ 1970\begin{itemize} 1971 \item CXL General Media Error (\texttt{\{ 0xfbcd0a77, 0xc260, 0x417f, \{ 0x85, 0xa9, 0x08, 0x8b, 0x16, 0x21, 0xeb, 0xa6 \}\}})\\ 1972 \item CXL DRAM Event Error (\texttt{\{ 0x601dcbb3, 0x9c06, 0x4eab, \{ 0xb8, 0xaf, 0x4e, 0x9b, 0xfb, 0x5c, 0x96, 0x24 \}\}})\\ 1973 \item CXL Memory Module Error (\texttt{\{ 0xfe927475, 0xdd59, 0x4339, \{ 0xa5, 0x86, 0x79, 0xba, 0xb1, 0x13, 0xb7, 0x74 \}\}})\\ 1974 \item CXL Physical Switch Error (\texttt{\{ 0x77cf9271, 0x9c02, 0x470b, \{ 0x9f, 0xe4, 0xbc, 0x7b, 0x75, 0xf2, 0xda, 0x97 \}\}})\\ 1975 \item CXL Virtual Switch Error (\texttt{\{ 0x40d26425, 0x3396, 0x4c4d, \{ 0xa5, 0xda, 0x3d, 0x47, 0x26, 0x3a, 0xf4, 0x25 \}\}})\\ 1976 \item CXL MLD Port Error (\texttt{\{ 0x8dc44363, 0x0c96, 0x4710, \{ 0xb7, 0xbf, 0x04, 0xbb, 0x99, 0x53, 0x4c, 0x3f \}\}})\\ 1977\end{itemize} 1978\jsontable{table:cxlcomponenterrorsection} 1979validationBits & object & A CXL Component Validation structure as described in Subsection \ref{subsection:cxlcomponentvalidationstructure}.\\ 1980\hline 1981deviceID & object & A CXL Component Device ID structure as described in Subsection \ref{subsection:cxlcomponentdeviceidstructure}.\\ 1982\hline 1983deviceSerial & uint64 & The serial of the CXL component.\\ 1984\hline 1985cxlComponentEventLog.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.\\ 1986\jsontableend{CXL Component Error structure field table.} 1987 1988% CXL Component Validation structure. 1989\subsection{CXL Component Validation Structure} 1990\label{subsection:cxlcomponentvalidationstructure} 1991This structure describes which fields are valid in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}) using boolean fields. 1992\jsontable{table:cxlcomponentvalidationstructure} 1993deviceIDValid & boolean & Whether the "deviceID" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\ 1994\hline 1995deviceSerialValid & boolean & Whether the "deviceSerial" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\ 1996\hline 1997cxlComponentEventLogValid & boolean & Whether the "cxlComponentEventLog" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\ 1998\jsontableend{CXL Component validation structure field table.} 1999 2000% CXL Component Device ID structure. 2001\subsection{CXL Component Device ID Structure} 2002\label{subsection:cxlcomponentdeviceidstructure} 2003This structure describes the ID of a CXL component, for use in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}). 2004\jsontable{table:cxlcomponentdeviceidstructure} 2005vendorID & uint64 & The vendor ID of the CXL component.\\ 2006\hline 2007deviceID & uint64 & The device ID of the CXL component.\\ 2008\hline 2009functionNumber & uint64 & The function number of the CXL component.\\ 2010\hline 2011deviceNumber & uint64 & The device number of the CXL component.\\ 2012\hline 2013busNumber & uint64 & The bus of the CXL component.\\ 2014\hline 2015segmentNumber & uint64 & The segment of the CXL component.\\ 2016\hline 2017slotNumber & uint64 & The slot number of the CXL component.\\ 2018\jsontableend{CXL Component Device ID structure field table.} 2019 2020% Undefined error section. 2021\section{Undefined Error Section} 2022\label{section:undefinederrorsection} 2023This 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. 2024\jsontable{table:ccixpererrorsection} 2025data & string & A base64-encoded binary dump of the undefined CPER section.\\ 2026\jsontableend{Undefined Error structure field table.} 2027 2028\end{document}