blob: 3ac0a155ce189b407cdd6187f9864de5d9acd3a8 [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",
Zane Shelley352293d2023-04-06 17:38:15 -050087 "ODYSSEY_10"
Zane Shelleyb9ea93c2023-03-10 10:41:41 -060088 ]
89 },
90 "attn_type": {
91 "type": "string",
92 "enum": ["CS", "UCS", "RE", "SPA", "HA"]
93 },
94 "reg_type": {
95 "type": "string",
96 "enum": ["SCOM", "IDSCOM"]
97 },
98 "access_type": {
99 "type": "string",
100 "enum": ["RO", "WO", "RW"]
101 },
102 "register": {
103 "type": "object",
104 "required": ["instances"],
105 "additionalProperties": false,
106 "properties": {
107 "reg_type": { "$ref": "#/$defs/reg_type" },
108 "access": { "$ref": "#/$defs/access_type" },
109 "instances": {
110 "type": "object",
111 "additionalProperties": false,
112 "patternProperties": {
113 "^[0-9]+$": { "$ref": "#/$defs/hex_string" }
114 }
115 }
116 }
117 },
118 "isolation_node": {
119 "type": "object",
120 "required": ["instances", "rules", "bits"],
121 "additionalProperties": false,
122 "properties": {
123 "reg_type": { "$ref": "#/$defs/reg_type" },
124 "instances": { "$ref": "#/$defs/instance_array" },
125 "rules": {
126 "type": "array",
127 "minItems": 1,
128 "uniqueItems": true,
129 "items": { "$ref": "#/$defs/isolation_rule" }
130 },
131 "bits": {
132 "type": "object",
133 "additionalProperties": false,
134 "patternProperties": {
135 "^[0-9]+(:[0-9]+)?$": {
136 "$ref": "#/$defs/isolation_bit"
137 }
138 }
139 },
140 "capture_groups": {
141 "type": "array",
142 "minItems": 1,
143 "uniqueItems": true,
144 "items": { "$ref": "#/$defs/capture_group" }
145 }
146 }
147 },
148 "isolation_rule": {
149 "type": "object",
150 "required": ["attn_type", "node_inst", "expr"],
151 "additionalProperties": false,
152 "properties": {
153 "attn_type": {
154 "type": "array",
155 "minItems": 1,
156 "uniqueItems": true,
157 "items": { "$ref": "#/$defs/attn_type" }
158 },
159 "node_inst": { "$ref": "#/$defs/instance_array" },
160 "expr": { "$ref": "#/$defs/isolation_rule_expression" }
161 }
162 },
163 "isolation_rule_expression": {
164 "type": "object",
165 "required": ["expr_type"],
166 "properties": {
167 "expr_type": {
168 "type": "string",
169 "enum": [
170 "reg",
171 "int",
172 "and",
173 "or",
174 "not",
175 "lshift",
176 "rshift"
177 ]
178 },
179 "reg_name": { "$ref": "#/$defs/name" },
180 "reg_inst": { "$ref": "#/$defs/instance_map" },
181 "int_value": { "$ref": "#/$defs/hex_string" },
182 "expr": { "$ref": "#/$defs/isolation_rule_expression" },
183 "exprs": {
184 "type": "array",
185 "minItems": 2,
186 "items": { "$ref": "#/$defs/isolation_rule_expression" }
187 },
188 "shift_value": {
189 "type": "integer",
190 "minimum": 0
191 }
192 },
193 "allOf": [
194 {
195 "if": { "properties": { "expr_type": { "const": "reg" } } },
196 "then": {
197 "required": ["reg_name"],
198 "not": {
199 "required": [
200 "int_value",
201 "shift_value",
202 "expr",
203 "exprs"
204 ]
205 }
206 }
207 },
208 {
209 "if": { "properties": { "expr_type": { "const": "int" } } },
210 "then": {
211 "required": ["int_value"],
212 "not": {
213 "required": [
214 "reg_name",
215 "reg_inst",
216 "shift_value",
217 "expr",
218 "exprs"
219 ]
220 }
221 }
222 },
223 {
224 "if": {
225 "properties": {
226 "expr_type": { "enum": ["and", "or"] }
227 }
228 },
229 "then": {
230 "required": ["exprs"],
231 "not": {
232 "required": [
233 "reg_name",
234 "reg_inst",
235 "int_value",
236 "shift_value",
237 "expr"
238 ]
239 }
240 }
241 },
242 {
243 "if": { "properties": { "expr_type": { "const": "not" } } },
244 "then": {
245 "required": ["expr"],
246 "not": {
247 "required": [
248 "reg_name",
249 "reg_inst",
250 "int_value",
251 "shift_value",
252 "exprs"
253 ]
254 }
255 }
256 },
257 {
258 "if": {
259 "properties": {
260 "expr_type": { "enum": ["lshift", "rshift"] }
261 }
262 },
263 "then": {
264 "required": ["expr", "shift_value"],
265 "not": {
266 "required": [
267 "reg_name",
268 "reg_inst",
269 "int_value",
270 "exprs"
271 ]
272 }
273 }
274 }
275 ]
276 },
277 "isolation_bit": {
278 "type": "object",
279 "required": ["desc"],
280 "additionalProperties": false,
281 "properties": {
282 "desc": {
283 "type": "string"
284 },
285 "child_node": {
286 "type": "object",
287 "required": ["name"],
288 "additionalProperties": false,
289 "properties": {
290 "name": { "$ref": "#/$defs/name" },
291 "inst": { "$ref": "#/$defs/instance_map" }
292 }
293 },
294 "capture_groups": {
295 "type": "array",
296 "minItems": 1,
297 "uniqueItems": true,
298 "items": { "$ref": "#/$defs/capture_group" }
299 }
300 }
301 },
302 "capture_group": {
303 "type": "object",
304 "required": ["group_name", "group_inst"],
305 "additionalProperties": false,
306 "properties": {
307 "group_name": { "$ref": "#/$defs/name" },
308 "group_inst": { "$ref": "#/$defs/instance_map" }
309 }
310 },
311 "root_node": {
312 "type": "object",
313 "required": ["name", "inst"],
314 "additionalProperties": false,
315 "properties": {
316 "name": { "$ref": "#/$defs/name" },
317 "inst": { "$ref": "#/$defs/instance" }
318 }
319 },
320 "capture_register": {
321 "type": "object",
322 "required": ["reg_name", "reg_inst"],
323 "additionalProperties": false,
324 "properties": {
325 "reg_name": { "$ref": "#/$defs/name" },
326 "reg_inst": { "$ref": "#/$defs/instance_map" }
327 }
328 }
329 }
330}