Fix minor errors in spec, add JSON specification.
diff --git a/specification/json/sections/cper-ia32x64-processor.json b/specification/json/sections/cper-ia32x64-processor.json
new file mode 100644
index 0000000..ff482e5
--- /dev/null
+++ b/specification/json/sections/cper-ia32x64-processor.json
@@ -0,0 +1,410 @@
+{
+ "$id": "cper-json-ia32x54-processor-section",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "required": ["validationBits", "localAPICID", "cpuidInfo", "processorErrorInfo", "processorContextInfo"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["localAPICIDValid", "cpuIDInfoValid", "processorErrorInfoNum", "processorContextInfoNum"],
+ "properties": {
+ "localAPICIDValid": {
+ "type": "boolean"
+ },
+ "cpuIDInfoValid": {
+ "type": "boolean"
+ },
+ "processorErrorInfoNum": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "processorContextInfoNum": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "localAPICID": {
+ "type": "integer"
+ },
+ "cpuidInfo": {
+ "type": "object",
+ "required": ["eax", "ebx", "ecx", "edx"],
+ "properties": {
+ "eax": {
+ "type": "integer"
+ },
+ "ebx": {
+ "type": "integer"
+ },
+ "ecx": {
+ "type": "integer"
+ },
+ "edx": {
+ "type": "integer"
+ }
+ }
+ },
+ "processorErrorInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["type", "validationBits", "checkInfo", "targetAddressID", "requestorID", "responderID", "instructionPointer"],
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "validationBits": {
+ "type": "object",
+ "required": ["checkInfoValid", "targetAddressIDValid", "requestorIDValid", "responderIDValid", "instructionPointerValid"],
+ "additionalProperties": false,
+ "properties": {
+ "checkInfoValid": {
+ "type": "boolean"
+ },
+ "targetAddressIDValid": {
+ "type": "boolean"
+ },
+ "requestorIDValid": {
+ "type": "boolean"
+ },
+ "responderIDValid": {
+ "type": "boolean"
+ },
+ "instructionPointerValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "checkInfo": {
+ "type" : "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "required": ["validationBits", "transactionType", "operation", "level", "processorContextCorrupt", "uncorrected", "preciseIP", "restartableIP", "overflow"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "uncorrectedValid", "preciseIPValid", "restartableIPValid", "overflowValid"],
+ "properties": {
+ "transactionTypeValid": {
+ "type": "boolean"
+ },
+ "operationValid": {
+ "type": "boolean"
+ },
+ "levelValid": {
+ "type": "boolean"
+ },
+ "processorContextCorruptValid": {
+ "type": "boolean"
+ },
+ "uncorrectedValid": {
+ "type": "boolean"
+ },
+ "preciseIPValid": {
+ "type": "boolean"
+ },
+ "restartableIPValid": {
+ "type": "boolean"
+ },
+ "overflowValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "transactionType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "operation": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "level": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "processorContextCorrupt": {
+ "type": "boolean"
+ },
+ "uncorrected": {
+ "type": "boolean"
+ },
+ "preciseIP": {
+ "type": "boolean"
+ },
+ "restartableIP": {
+ "type": "boolean"
+ },
+ "overflow": {
+ "type": "boolean"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["validationBits", "transactionType", "operation", "level", "processorContextCorrupt", "uncorrected", "preciseIP", "restartableIP", "overflow", "participationType", "timedOut", "addressSpace"],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "uncorrectedValid", "preciseIPValid", "restartableIPValid", "overflowValid", "participationTypeValid", "timedOutValid"],
+ "properties": {
+ "transactionTypeValid": {
+ "type": "boolean"
+ },
+ "operationValid": {
+ "type": "boolean"
+ },
+ "levelValid": {
+ "type": "boolean"
+ },
+ "processorContextCorruptValid": {
+ "type": "boolean"
+ },
+ "uncorrectedValid": {
+ "type": "boolean"
+ },
+ "preciseIPValid": {
+ "type": "boolean"
+ },
+ "restartableIPValid": {
+ "type": "boolean"
+ },
+ "overflowValid": {
+ "type": "boolean"
+ },
+ "participationTypeValid": {
+ "type": "boolean"
+ },
+ "timedOutValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "transactionType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "operation": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "level": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "processorContextCorrupt": {
+ "type": "boolean"
+ },
+ "uncorrected": {
+ "type": "boolean"
+ },
+ "preciseIP": {
+ "type": "boolean"
+ },
+ "restartableIP": {
+ "type": "boolean"
+ },
+ "overflow": {
+ "type": "boolean"
+ },
+ "participationType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "addressSpace": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "timedOut": {
+ "type": "boolean"
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [],
+ "additionalProperties": false,
+ "properties": {
+ "validationBits": {
+ "type": "object",
+ "required": ["errorTypeValid", "processorContextCorruptValid", "uncorrectedValid", "preciseIPValid", "restartableIPValid", "overflowValid"],
+ "properties": {
+ "errorTypeValid": {
+ "type": "boolean"
+ },
+ "processorContextCorruptValid": {
+ "type": "boolean"
+ },
+ "uncorrectedValid": {
+ "type": "boolean"
+ },
+ "preciseIPValid": {
+ "type": "boolean"
+ },
+ "restartableIPValid": {
+ "type": "boolean"
+ },
+ "overflowValid": {
+ "type": "boolean"
+ }
+ }
+ },
+ "errorType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "processorContextCorrupt": {
+ "type": "boolean"
+ },
+ "uncorrected": {
+ "type": "boolean"
+ },
+ "preciseIP": {
+ "type": "boolean"
+ },
+ "restartableIP": {
+ "type": "boolean"
+ },
+ "overflow": {
+ "type": "boolean"
+ }
+ }
+ }
+ ]
+ },
+ "targetAddressID": {
+ "type": "integer"
+ },
+ "requestorID": {
+ "type": "integer"
+ },
+ "responderID": {
+ "type": "integer"
+ },
+ "instructionPointer": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "processorContextInfo": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": ["registerContextType", "registerArraySize", "msrAddress", "mmRegisterAddress"],
+ "additionalProperties": false,
+ "properties": {
+ "registerContextType": {
+ "type": "object",
+ "$ref": "../common/cper-json-nvp.json"
+ },
+ "registerArraySize": {
+ "type": "integer"
+ },
+ "msrAddress": {
+ "type": "integer"
+ },
+ "mmRegisterAddress": {
+ "type": "integer"
+ },
+ "registerArray": {
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "required": ["eax", "ebx", "ecx", "edx", "esi", "edi", "ebp", "esp", "cs", "ds", "ss", "es", "fs", "gs", "eflags", "eip", "cr0", "cr1", "cr2", "cr3", "cr4", "gdtr", "idtr", "ldtr", "tr"],
+ "additionalProperties": false,
+ "properties": {
+ "eax": { "type": "integer" },
+ "ebx": { "type": "integer" },
+ "ecx": { "type": "integer" },
+ "edx": { "type": "integer" },
+ "esi": { "type": "integer" },
+ "edi": { "type": "integer" },
+ "ebp": { "type": "integer" },
+ "esp": { "type": "integer" },
+ "cs": { "type": "integer" },
+ "ds": { "type": "integer" },
+ "ss": { "type": "integer" },
+ "es": { "type": "integer" },
+ "fs": { "type": "integer" },
+ "gs": { "type": "integer" },
+ "eflags": { "type": "integer" },
+ "eip": { "type": "integer" },
+ "cr0": { "type": "integer" },
+ "cr1": { "type": "integer" },
+ "cr2": { "type": "integer" },
+ "cr3": { "type": "integer" },
+ "cr4": { "type": "integer" },
+ "gdtr": { "type": "integer" },
+ "idtr": { "type": "integer" },
+ "ldtr": { "type": "integer" },
+ "tr": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["rax", "rbx", "rcx", "rdx", "rsi", "rdi", "rbp", "rsp", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", "cs", "ds", "es", "fs", "gs", "rflags", "eip", "cr0", "cr1", "cr2", "cr3", "cr4", "cr8", "gdtr_0", "gdtr_1", "idtr_0", "idtr_1", "ldtr", "tr"],
+ "additionalProperties": false,
+ "properties": {
+ "rax": { "type": "integer" },
+ "rbx": { "type": "integer" },
+ "rcx": { "type": "integer" },
+ "rdx": { "type": "integer" },
+ "rsi": { "type": "integer" },
+ "rdi": { "type": "integer" },
+ "rbp": { "type": "integer" },
+ "rsp": { "type": "integer" },
+ "r8": { "type": "integer" },
+ "r9": { "type": "integer" },
+ "r10": { "type": "integer" },
+ "r11": { "type": "integer" },
+ "r12": { "type": "integer" },
+ "r13": { "type": "integer" },
+ "r14": { "type": "integer" },
+ "r15": { "type": "integer" },
+ "cs": { "type": "integer" },
+ "ds": { "type": "integer" },
+ "ss": { "type": "integer" },
+ "es": { "type": "integer" },
+ "fs": { "type": "integer" },
+ "gs": { "type": "integer" },
+ "rflags": { "type": "integer" },
+ "eip": { "type": "integer" },
+ "cr0": { "type": "integer" },
+ "cr1": { "type": "integer" },
+ "cr2": { "type": "integer" },
+ "cr3": { "type": "integer" },
+ "cr4": { "type": "integer" },
+ "cr8": { "type": "integer" },
+ "gdtr_0": { "type": "integer" },
+ "gdtr_1": { "type": "integer" },
+ "idtr_0": { "type": "integer" },
+ "idtr_1": { "type": "integer" },
+ "ldtr": { "type": "integer" },
+ "tr": { "type": "integer" }
+ }
+ },
+ {
+ "type": "object",
+ "required": ["data"],
+ "additionalProperties": false,
+ "properties": {
+ "data": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file