blob: 7a47c07bebb8cb067e44c76a5ec4097acef51564 [file] [log] [blame]
Zane Shelleyb9ea93c2023-03-10 10:41:41 -06001{
2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "title": "Chip Data Schema",
4 "version": 1,
5 "type": "object",
6 "required": ["version", "model_ec"],
7 "additionalProperties": false,
8 "properties": {
9 "version": {
10 "type": "integer",
11 "minimum": 1,
12 "maximum": 1
13 },
14 "model_ec": {
15 "type": "array",
16 "minItems": 1,
17 "uniqueItems": true,
18 "items": { "$ref": "#/$defs/model_ec" }
19 },
20 "registers": {
21 "type": "object",
22 "additionalProperties": false,
23 "patternProperties": {
24 "^\\w+$": { "$ref": "#/$defs/register" }
25 }
26 },
27 "isolation_nodes": {
28 "type": "object",
29 "additionalProperties": false,
30 "patternProperties": {
31 "^\\w+$": { "$ref": "#/$defs/isolation_node" }
32 }
33 },
34 "root_nodes": {
35 "type": "object",
36 "propertyNames": { "$ref": "#/$defs/attn_type" },
37 "patternProperties": {
38 "": { "$ref": "#/$defs/root_node" }
39 }
40 },
41 "capture_groups": {
42 "type": "object",
43 "additionalProperties": false,
44 "patternProperties": {
45 "^\\w+$": {
46 "type": "array",
47 "minItems": 1,
48 "uniqueItems": true,
49 "items": { "$ref": "#/$defs/capture_register" }
50 }
51 }
52 }
53 },
54 "$defs": {
55 "name": {
56 "type": "string",
57 "pattern": "^\\w+$"
58 },
59 "instance": {
60 "type": "integer",
61 "minimum": 0
62 },
63 "instance_array": {
64 "type": "array",
65 "minItems": 1,
66 "uniqueItems": true,
67 "items": { "$ref": "#/$defs/instance" }
68 },
69 "instance_map": {
70 "type": "object",
71 "additionalProperties": false,
72 "patternProperties": {
73 "^[0-9]+$": { "$ref": "#/$defs/instance" }
74 }
75 },
76 "hex_string": {
77 "type": "string",
78 "pattern": "^0x([0-9a-fA-F]{8}){1,2}$"
79 },
80 "model_ec": {
81 "type": "string",
82 "enum": [
83 "P10_10",
84 "P10_20",
85 "EXPLORER_11",
86 "EXPLORER_20",
87 "ODYSSEY_10",
88 "P11S_10",
89 "P11T_10"
90 ]
91 },
92 "attn_type": {
93 "type": "string",
94 "enum": ["CS", "UCS", "RE", "SPA", "HA"]
95 },
96 "reg_type": {
97 "type": "string",
98 "enum": ["SCOM", "IDSCOM"]
99 },
100 "access_type": {
101 "type": "string",
102 "enum": ["RO", "WO", "RW"]
103 },
104 "register": {
105 "type": "object",
106 "required": ["instances"],
107 "additionalProperties": false,
108 "properties": {
109 "reg_type": { "$ref": "#/$defs/reg_type" },
110 "access": { "$ref": "#/$defs/access_type" },
111 "instances": {
112 "type": "object",
113 "additionalProperties": false,
114 "patternProperties": {
115 "^[0-9]+$": { "$ref": "#/$defs/hex_string" }
116 }
117 }
118 }
119 },
120 "isolation_node": {
121 "type": "object",
122 "required": ["instances", "rules", "bits"],
123 "additionalProperties": false,
124 "properties": {
125 "reg_type": { "$ref": "#/$defs/reg_type" },
126 "instances": { "$ref": "#/$defs/instance_array" },
127 "rules": {
128 "type": "array",
129 "minItems": 1,
130 "uniqueItems": true,
131 "items": { "$ref": "#/$defs/isolation_rule" }
132 },
133 "bits": {
134 "type": "object",
135 "additionalProperties": false,
136 "patternProperties": {
137 "^[0-9]+(:[0-9]+)?$": {
138 "$ref": "#/$defs/isolation_bit"
139 }
140 }
141 },
142 "capture_groups": {
143 "type": "array",
144 "minItems": 1,
145 "uniqueItems": true,
146 "items": { "$ref": "#/$defs/capture_group" }
147 }
148 }
149 },
150 "isolation_rule": {
151 "type": "object",
152 "required": ["attn_type", "node_inst", "expr"],
153 "additionalProperties": false,
154 "properties": {
155 "attn_type": {
156 "type": "array",
157 "minItems": 1,
158 "uniqueItems": true,
159 "items": { "$ref": "#/$defs/attn_type" }
160 },
161 "node_inst": { "$ref": "#/$defs/instance_array" },
162 "expr": { "$ref": "#/$defs/isolation_rule_expression" }
163 }
164 },
165 "isolation_rule_expression": {
166 "type": "object",
167 "required": ["expr_type"],
168 "properties": {
169 "expr_type": {
170 "type": "string",
171 "enum": [
172 "reg",
173 "int",
174 "and",
175 "or",
176 "not",
177 "lshift",
178 "rshift"
179 ]
180 },
181 "reg_name": { "$ref": "#/$defs/name" },
182 "reg_inst": { "$ref": "#/$defs/instance_map" },
183 "int_value": { "$ref": "#/$defs/hex_string" },
184 "expr": { "$ref": "#/$defs/isolation_rule_expression" },
185 "exprs": {
186 "type": "array",
187 "minItems": 2,
188 "items": { "$ref": "#/$defs/isolation_rule_expression" }
189 },
190 "shift_value": {
191 "type": "integer",
192 "minimum": 0
193 }
194 },
195 "allOf": [
196 {
197 "if": { "properties": { "expr_type": { "const": "reg" } } },
198 "then": {
199 "required": ["reg_name"],
200 "not": {
201 "required": [
202 "int_value",
203 "shift_value",
204 "expr",
205 "exprs"
206 ]
207 }
208 }
209 },
210 {
211 "if": { "properties": { "expr_type": { "const": "int" } } },
212 "then": {
213 "required": ["int_value"],
214 "not": {
215 "required": [
216 "reg_name",
217 "reg_inst",
218 "shift_value",
219 "expr",
220 "exprs"
221 ]
222 }
223 }
224 },
225 {
226 "if": {
227 "properties": {
228 "expr_type": { "enum": ["and", "or"] }
229 }
230 },
231 "then": {
232 "required": ["exprs"],
233 "not": {
234 "required": [
235 "reg_name",
236 "reg_inst",
237 "int_value",
238 "shift_value",
239 "expr"
240 ]
241 }
242 }
243 },
244 {
245 "if": { "properties": { "expr_type": { "const": "not" } } },
246 "then": {
247 "required": ["expr"],
248 "not": {
249 "required": [
250 "reg_name",
251 "reg_inst",
252 "int_value",
253 "shift_value",
254 "exprs"
255 ]
256 }
257 }
258 },
259 {
260 "if": {
261 "properties": {
262 "expr_type": { "enum": ["lshift", "rshift"] }
263 }
264 },
265 "then": {
266 "required": ["expr", "shift_value"],
267 "not": {
268 "required": [
269 "reg_name",
270 "reg_inst",
271 "int_value",
272 "exprs"
273 ]
274 }
275 }
276 }
277 ]
278 },
279 "isolation_bit": {
280 "type": "object",
281 "required": ["desc"],
282 "additionalProperties": false,
283 "properties": {
284 "desc": {
285 "type": "string"
286 },
287 "child_node": {
288 "type": "object",
289 "required": ["name"],
290 "additionalProperties": false,
291 "properties": {
292 "name": { "$ref": "#/$defs/name" },
293 "inst": { "$ref": "#/$defs/instance_map" }
294 }
295 },
296 "capture_groups": {
297 "type": "array",
298 "minItems": 1,
299 "uniqueItems": true,
300 "items": { "$ref": "#/$defs/capture_group" }
301 }
302 }
303 },
304 "capture_group": {
305 "type": "object",
306 "required": ["group_name", "group_inst"],
307 "additionalProperties": false,
308 "properties": {
309 "group_name": { "$ref": "#/$defs/name" },
310 "group_inst": { "$ref": "#/$defs/instance_map" }
311 }
312 },
313 "root_node": {
314 "type": "object",
315 "required": ["name", "inst"],
316 "additionalProperties": false,
317 "properties": {
318 "name": { "$ref": "#/$defs/name" },
319 "inst": { "$ref": "#/$defs/instance" }
320 }
321 },
322 "capture_register": {
323 "type": "object",
324 "required": ["reg_name", "reg_inst"],
325 "additionalProperties": false,
326 "properties": {
327 "reg_name": { "$ref": "#/$defs/name" },
328 "reg_inst": { "$ref": "#/$defs/instance_map" }
329 }
330 }
331 }
332}