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