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