1*e36866c3SCaleb Palmer{
2*e36866c3SCaleb Palmer    "$schema": "https://json-schema.org/draft/2020-12/schema",
3*e36866c3SCaleb Palmer    "title": "RAS Data schema for openpower-hw-diags",
4*e36866c3SCaleb Palmer    "version": 2,
5*e36866c3SCaleb Palmer    "type": "object",
6*e36866c3SCaleb Palmer    "$defs": {
7*e36866c3SCaleb Palmer        "priority": {
8*e36866c3SCaleb Palmer            "type": "string",
9*e36866c3SCaleb Palmer            "enum": [
10*e36866c3SCaleb Palmer                "HIGH",
11*e36866c3SCaleb Palmer                "MED",
12*e36866c3SCaleb Palmer                "MED_A",
13*e36866c3SCaleb Palmer                "MED_B",
14*e36866c3SCaleb Palmer                "MED_C",
15*e36866c3SCaleb Palmer                "LOW"
16*e36866c3SCaleb Palmer            ]
17*e36866c3SCaleb Palmer        },
18*e36866c3SCaleb Palmer        "flags": {
19*e36866c3SCaleb Palmer            "type": "string",
20*e36866c3SCaleb Palmer            "enum": [
21*e36866c3SCaleb Palmer                "sue_source",
22*e36866c3SCaleb Palmer                "sue_seen",
23*e36866c3SCaleb Palmer                "cs_possible",
24*e36866c3SCaleb Palmer                "external_checkstop",
25*e36866c3SCaleb Palmer                "recovered_error",
26*e36866c3SCaleb Palmer                "informational_only",
27*e36866c3SCaleb Palmer                "mnfg_informational_only",
28*e36866c3SCaleb Palmer                "mask_but_dont_clear",
29*e36866c3SCaleb Palmer                "crc_related_err",
30*e36866c3SCaleb Palmer                "crc_root_cause",
31*e36866c3SCaleb Palmer                "odp_data_corrupt_side_effect",
32*e36866c3SCaleb Palmer                "odp_data_corrupt_root_cause"
33*e36866c3SCaleb Palmer            ]
34*e36866c3SCaleb Palmer        }
35*e36866c3SCaleb Palmer    },
36*e36866c3SCaleb Palmer    "additionalProperties": false,
37*e36866c3SCaleb Palmer    "required": [ "model_ec", "version", "actions", "signatures" ],
38*e36866c3SCaleb Palmer    "properties": {
39*e36866c3SCaleb Palmer        "model_ec": {
40*e36866c3SCaleb Palmer            "type": "string",
41*e36866c3SCaleb Palmer            "pattern": "^[0-9A-Fa-f]{8}$"
42*e36866c3SCaleb Palmer        },
43*e36866c3SCaleb Palmer        "version": {
44*e36866c3SCaleb Palmer            "type": "integer",
45*e36866c3SCaleb Palmer            "minimum": 1
46*e36866c3SCaleb Palmer        },
47*e36866c3SCaleb Palmer        "units": {
48*e36866c3SCaleb Palmer            "type": "object",
49*e36866c3SCaleb Palmer            "additionalProperties": false,
50*e36866c3SCaleb Palmer            "patternProperties": {
51*e36866c3SCaleb Palmer                "^\\w+$": {
52*e36866c3SCaleb Palmer                    "type": "string",
53*e36866c3SCaleb Palmer                    "pattern": "^\\w+(\\/\\w+)*$"
54*e36866c3SCaleb Palmer                }
55*e36866c3SCaleb Palmer            }
56*e36866c3SCaleb Palmer        },
57*e36866c3SCaleb Palmer        "buses": {
58*e36866c3SCaleb Palmer            "type": "object",
59*e36866c3SCaleb Palmer            "additionalProperties": false,
60*e36866c3SCaleb Palmer            "patternProperties": {
61*e36866c3SCaleb Palmer                "^\\w+$": {
62*e36866c3SCaleb Palmer                    "type": "object",
63*e36866c3SCaleb Palmer                    "additionalProperties": false,
64*e36866c3SCaleb Palmer                    "required": [ "type" ],
65*e36866c3SCaleb Palmer                    "properties": {
66*e36866c3SCaleb Palmer                        "type": {
67*e36866c3SCaleb Palmer                            "type": "string",
68*e36866c3SCaleb Palmer                            "enum": [ "SMP_BUS", "OMI_BUS" ]
69*e36866c3SCaleb Palmer                        },
70*e36866c3SCaleb Palmer                        "unit": {
71*e36866c3SCaleb Palmer                            "type": "string",
72*e36866c3SCaleb Palmer                            "pattern": "^\\w+$"
73*e36866c3SCaleb Palmer                        }
74*e36866c3SCaleb Palmer                    }
75*e36866c3SCaleb Palmer                }
76*e36866c3SCaleb Palmer            }
77*e36866c3SCaleb Palmer        },
78*e36866c3SCaleb Palmer        "actions": {
79*e36866c3SCaleb Palmer            "type": "object",
80*e36866c3SCaleb Palmer            "additionalProperties": false,
81*e36866c3SCaleb Palmer            "patternProperties": {
82*e36866c3SCaleb Palmer                "^\\w+$": {
83*e36866c3SCaleb Palmer                    "type": "array",
84*e36866c3SCaleb Palmer                    "items": {
85*e36866c3SCaleb Palmer                        "type": "object",
86*e36866c3SCaleb Palmer                        "required": [ "type" ],
87*e36866c3SCaleb Palmer                        "properties": {
88*e36866c3SCaleb Palmer                            "type": {
89*e36866c3SCaleb Palmer                                "type": "string",
90*e36866c3SCaleb Palmer                                "enum": [
91*e36866c3SCaleb Palmer                                    "action",
92*e36866c3SCaleb Palmer                                    "callout_self",
93*e36866c3SCaleb Palmer                                    "callout_unit",
94*e36866c3SCaleb Palmer                                    "callout_connected",
95*e36866c3SCaleb Palmer                                    "callout_bus",
96*e36866c3SCaleb Palmer                                    "callout_clock",
97*e36866c3SCaleb Palmer                                    "callout_procedure",
98*e36866c3SCaleb Palmer                                    "callout_part",
99*e36866c3SCaleb Palmer                                    "plugin",
100*e36866c3SCaleb Palmer                                    "flag"
101*e36866c3SCaleb Palmer                                ]
102*e36866c3SCaleb Palmer                            },
103*e36866c3SCaleb Palmer                            "priority": {
104*e36866c3SCaleb Palmer                                "$ref": "#/$defs/priority"
105*e36866c3SCaleb Palmer                            },
106*e36866c3SCaleb Palmer                            "guard": {
107*e36866c3SCaleb Palmer                                "type": "boolean"
108*e36866c3SCaleb Palmer                            },
109*e36866c3SCaleb Palmer                            "name": {
110*e36866c3SCaleb Palmer                                "type": "string",
111*e36866c3SCaleb Palmer                                "pattern": "^\\w+$"
112*e36866c3SCaleb Palmer                            }
113*e36866c3SCaleb Palmer                        },
114*e36866c3SCaleb Palmer                        "allOf": [
115*e36866c3SCaleb Palmer                            {
116*e36866c3SCaleb Palmer                                "if": {
117*e36866c3SCaleb Palmer                                    "properties": {
118*e36866c3SCaleb Palmer                                        "type": { "const": "action" }
119*e36866c3SCaleb Palmer                                    }
120*e36866c3SCaleb Palmer                                },
121*e36866c3SCaleb Palmer                                "then": {
122*e36866c3SCaleb Palmer                                    "required": [ "name" ],
123*e36866c3SCaleb Palmer                                    "not": { "required": [ "priority", "guard" ] }
124*e36866c3SCaleb Palmer                                }
125*e36866c3SCaleb Palmer                            },
126*e36866c3SCaleb Palmer                            {
127*e36866c3SCaleb Palmer                                "if": {
128*e36866c3SCaleb Palmer                                    "properties": {
129*e36866c3SCaleb Palmer                                        "type": { "const": "callout_self" }
130*e36866c3SCaleb Palmer                                    }
131*e36866c3SCaleb Palmer                                },
132*e36866c3SCaleb Palmer                                "then": {
133*e36866c3SCaleb Palmer                                    "required": [ "priority", "guard" ],
134*e36866c3SCaleb Palmer                                    "not": { "required": [ "name" ] }
135*e36866c3SCaleb Palmer                                }
136*e36866c3SCaleb Palmer                            },
137*e36866c3SCaleb Palmer                            {
138*e36866c3SCaleb Palmer                                "if": {
139*e36866c3SCaleb Palmer                                    "properties": {
140*e36866c3SCaleb Palmer                                        "type": { "const": "callout_unit" }
141*e36866c3SCaleb Palmer                                    }
142*e36866c3SCaleb Palmer                                },
143*e36866c3SCaleb Palmer                                "then": {
144*e36866c3SCaleb Palmer                                    "required": [ "name", "priority", "guard" ]
145*e36866c3SCaleb Palmer                                }
146*e36866c3SCaleb Palmer                            },
147*e36866c3SCaleb Palmer                            {
148*e36866c3SCaleb Palmer                                "if": {
149*e36866c3SCaleb Palmer                                    "properties": {
150*e36866c3SCaleb Palmer                                        "type": { "const": "callout_connected" }
151*e36866c3SCaleb Palmer                                    }
152*e36866c3SCaleb Palmer                                },
153*e36866c3SCaleb Palmer                                "then": {
154*e36866c3SCaleb Palmer                                    "required": [ "name", "priority", "guard" ]
155*e36866c3SCaleb Palmer                                }
156*e36866c3SCaleb Palmer                            },
157*e36866c3SCaleb Palmer                            {
158*e36866c3SCaleb Palmer                                "if": {
159*e36866c3SCaleb Palmer                                    "properties": {
160*e36866c3SCaleb Palmer                                        "type": { "const": "callout_bus" }
161*e36866c3SCaleb Palmer                                    }
162*e36866c3SCaleb Palmer                                },
163*e36866c3SCaleb Palmer                                "then": {
164*e36866c3SCaleb Palmer                                    "required": [ "name", "priority", "guard" ]
165*e36866c3SCaleb Palmer                                }
166*e36866c3SCaleb Palmer                            },
167*e36866c3SCaleb Palmer                            {
168*e36866c3SCaleb Palmer                                "if": {
169*e36866c3SCaleb Palmer                                    "properties": {
170*e36866c3SCaleb Palmer                                        "type": { "const": "callout_clock" }
171*e36866c3SCaleb Palmer                                    }
172*e36866c3SCaleb Palmer                                },
173*e36866c3SCaleb Palmer                                "then": {
174*e36866c3SCaleb Palmer                                    "required": [ "name", "priority", "guard" ],
175*e36866c3SCaleb Palmer                                    "properties": {
176*e36866c3SCaleb Palmer                                        "name": {
177*e36866c3SCaleb Palmer                                            "enum": [
178*e36866c3SCaleb Palmer                                                "OSC_REF_CLOCK_0",
179*e36866c3SCaleb Palmer                                                "OSC_REF_CLOCK_1",
180*e36866c3SCaleb Palmer                                                "TOD_CLOCK"
181*e36866c3SCaleb Palmer                                            ]
182*e36866c3SCaleb Palmer                                        }
183*e36866c3SCaleb Palmer                                    }
184*e36866c3SCaleb Palmer                                }
185*e36866c3SCaleb Palmer                            },
186*e36866c3SCaleb Palmer                            {
187*e36866c3SCaleb Palmer                                "if": {
188*e36866c3SCaleb Palmer                                    "properties": {
189*e36866c3SCaleb Palmer                                        "type": { "const": "callout_procedure" }
190*e36866c3SCaleb Palmer                                    }
191*e36866c3SCaleb Palmer                                },
192*e36866c3SCaleb Palmer                                "then": {
193*e36866c3SCaleb Palmer                                    "required": [ "name", "priority" ],
194*e36866c3SCaleb Palmer                                    "not": { "required": [ "guard" ] },
195*e36866c3SCaleb Palmer                                    "properties": {
196*e36866c3SCaleb Palmer                                        "name": {
197*e36866c3SCaleb Palmer                                            "enum": [
198*e36866c3SCaleb Palmer                                                "LEVEL2",
199*e36866c3SCaleb Palmer                                                "SUE_SEEN"
200*e36866c3SCaleb Palmer                                            ]
201*e36866c3SCaleb Palmer                                        }
202*e36866c3SCaleb Palmer                                    }
203*e36866c3SCaleb Palmer                                }
204*e36866c3SCaleb Palmer                            },
205*e36866c3SCaleb Palmer                            {
206*e36866c3SCaleb Palmer                                "if": {
207*e36866c3SCaleb Palmer                                    "properties": {
208*e36866c3SCaleb Palmer                                        "type": { "const": "callout_part" }
209*e36866c3SCaleb Palmer                                    }
210*e36866c3SCaleb Palmer                                },
211*e36866c3SCaleb Palmer                                "then": {
212*e36866c3SCaleb Palmer                                    "required": [ "name", "priority" ],
213*e36866c3SCaleb Palmer                                    "not": { "required": [ "guard" ] },
214*e36866c3SCaleb Palmer                                    "properties": {
215*e36866c3SCaleb Palmer                                        "name": {
216*e36866c3SCaleb Palmer                                            "enum": [
217*e36866c3SCaleb Palmer                                                "PNOR"
218*e36866c3SCaleb Palmer                                            ]
219*e36866c3SCaleb Palmer                                        }
220*e36866c3SCaleb Palmer                                    }
221*e36866c3SCaleb Palmer                                }
222*e36866c3SCaleb Palmer                            },
223*e36866c3SCaleb Palmer                            {
224*e36866c3SCaleb Palmer                                "if": {
225*e36866c3SCaleb Palmer                                    "properties": {
226*e36866c3SCaleb Palmer                                        "type": { "const": "plugin" }
227*e36866c3SCaleb Palmer                                    }
228*e36866c3SCaleb Palmer                                },
229*e36866c3SCaleb Palmer                                "then": {
230*e36866c3SCaleb Palmer                                    "required": [ "name", "instance" ],
231*e36866c3SCaleb Palmer                                    "not": { "required": [ "priority", "guard" ] },
232*e36866c3SCaleb Palmer                                    "properties": {
233*e36866c3SCaleb Palmer                                        "instance": {
234*e36866c3SCaleb Palmer                                            "type": "integer"
235*e36866c3SCaleb Palmer                                        }
236*e36866c3SCaleb Palmer                                    }
237*e36866c3SCaleb Palmer                                }
238*e36866c3SCaleb Palmer                            },
239*e36866c3SCaleb Palmer                            {
240*e36866c3SCaleb Palmer                                "if": {
241*e36866c3SCaleb Palmer                                    "properties": {
242*e36866c3SCaleb Palmer                                        "type": { "const": "flag" }
243*e36866c3SCaleb Palmer                                    }
244*e36866c3SCaleb Palmer                                },
245*e36866c3SCaleb Palmer                                "then": {
246*e36866c3SCaleb Palmer                                    "required": ["name"],
247*e36866c3SCaleb Palmer                                    "properties": {
248*e36866c3SCaleb Palmer                                        "name": {
249*e36866c3SCaleb Palmer                                            "$ref": "#/$defs/flags"
250*e36866c3SCaleb Palmer                                        }
251*e36866c3SCaleb Palmer                                    }
252*e36866c3SCaleb Palmer                                }
253*e36866c3SCaleb Palmer                            }
254*e36866c3SCaleb Palmer                        ]
255*e36866c3SCaleb Palmer                    }
256*e36866c3SCaleb Palmer                }
257*e36866c3SCaleb Palmer            }
258*e36866c3SCaleb Palmer        },
259*e36866c3SCaleb Palmer        "signatures": {
260*e36866c3SCaleb Palmer            "type": "object",
261*e36866c3SCaleb Palmer            "additionalProperties": false,
262*e36866c3SCaleb Palmer            "patternProperties": {
263*e36866c3SCaleb Palmer                "^[0-9A-Fa-f]{4}$": {
264*e36866c3SCaleb Palmer                    "type": "object",
265*e36866c3SCaleb Palmer                    "additionalProperties": false,
266*e36866c3SCaleb Palmer                    "patternProperties": {
267*e36866c3SCaleb Palmer                        "^[0-9A-Fa-f]{2}$": {
268*e36866c3SCaleb Palmer                            "type": "object",
269*e36866c3SCaleb Palmer                            "additionalProperties": false,
270*e36866c3SCaleb Palmer                            "patternProperties": {
271*e36866c3SCaleb Palmer                                "^[0-9A-Fa-f]{2}$": {
272*e36866c3SCaleb Palmer                                    "type": "string",
273*e36866c3SCaleb Palmer                                    "pattern": "^\\w+$"
274*e36866c3SCaleb Palmer                                },
275*e36866c3SCaleb Palmer                                "flags": {
276*e36866c3SCaleb Palmer                                    "type": "array",
277*e36866c3SCaleb Palmer                                    "minItems": 1,
278*e36866c3SCaleb Palmer                                    "uniqueItems": true,
279*e36866c3SCaleb Palmer                                    "items":
280*e36866c3SCaleb Palmer                                    {
281*e36866c3SCaleb Palmer                                        "$ref": "#/$defs/flags"
282*e36866c3SCaleb Palmer                                    }
283*e36866c3SCaleb Palmer                                }
284*e36866c3SCaleb Palmer                            }
285*e36866c3SCaleb Palmer                        }
286*e36866c3SCaleb Palmer                    }
287*e36866c3SCaleb Palmer                }
288*e36866c3SCaleb Palmer            }
289*e36866c3SCaleb Palmer        }
290*e36866c3SCaleb Palmer    }
291*e36866c3SCaleb Palmer}
292