blob: d18da6da6f24febc33dbfc5c06263a69da7d4237 [file] [log] [blame]
Bob Kingdcb4b3b2019-12-17 18:07:06 +08001{
2 "$schema": "http://json-schema.org/schema#",
3 "title": "JSON schema for the phosphor-regulators config file",
4 "$id": "https://github.com/openbmc/phosphor-power/tree/master/phosphor-regulators/schema/config_schema.json",
5 "description": "This schema describes the JSON format for the phosphor-regulators configuration file.",
6 "type": "object",
Bob Kingdcb4b3b2019-12-17 18:07:06 +08007 "properties":
8 {
Shawn McCarney4dc9a302021-08-14 10:52:47 -05009 "comments": {"$ref": "#/definitions/comments" },
10 "rules": {"$ref": "#/definitions/rules" },
11 "chassis": {"$ref": "#/definitions/chassis" }
Bob Kingdcb4b3b2019-12-17 18:07:06 +080012 },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080013 "required": ["chassis"],
14 "additionalProperties": false,
Bob Kingdcb4b3b2019-12-17 18:07:06 +080015 "definitions":
16 {
Shawn McCarney4dc9a302021-08-14 10:52:47 -050017 "rule":
18 {
19 "type": "object",
20 "properties":
21 {
22 "comments": {"$ref": "#/definitions/comments" },
23 "id": {"$ref": "#/definitions/id" },
24 "actions": {"$ref": "#/definitions/actions" }
25 },
26 "required": ["id", "actions"],
27 "additionalProperties": false
28 },
29
Bob Kingdcb4b3b2019-12-17 18:07:06 +080030 "rules":
31 {
32 "type": "array",
Shawn McCarney4dc9a302021-08-14 10:52:47 -050033 "items": {"$ref": "#/definitions/rule" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080034 "minItems": 1
35 },
36
37 "comments":
38 {
39 "type": "array",
Shawn McCarney4dc9a302021-08-14 10:52:47 -050040 "items": {"type": "string" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080041 "minItems": 1
42 },
43
44 "id":
45 {
46 "type": "string",
47 "pattern": "^[A-Za-z0-9_]+$"
48 },
49
50 "action":
51 {
52 "type": "object",
53 "properties":
54 {
55 "comments": {"$ref": "#/definitions/comments" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080056 "and": {"$ref": "#/definitions/actions" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080057 "compare_presence": {"$ref": "#/definitions/compare_presence" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080058 "compare_vpd": {"$ref": "#/definitions/compare_vpd" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080059 "i2c_compare_bit": {"$ref": "#/definitions/i2c_bit" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080060 "i2c_compare_byte": {"$ref": "#/definitions/i2c_byte" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080061 "i2c_compare_bytes": {"$ref": "#/definitions/i2c_bytes" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080062 "i2c_write_bit": {"$ref": "#/definitions/i2c_bit" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080063 "i2c_write_byte": {"$ref": "#/definitions/i2c_byte" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080064 "i2c_write_bytes": {"$ref": "#/definitions/i2c_bytes" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080065 "if": {"$ref": "#/definitions/if" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080066 "not": {"$ref": "#/definitions/action" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080067 "or": {"$ref": "#/definitions/actions" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080068 "pmbus_read_sensor": {"$ref": "#/definitions/pmbus_read_sensor" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080069 "pmbus_write_vout_command": {"$ref": "#/definitions/pmbus_write_vout_command" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080070 "run_rule": {"$ref": "#/definitions/id" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +080071 "set_device": {"$ref": "#/definitions/id" }
72 },
73 "additionalProperties": false,
74 "oneOf": [
75 {"required": ["and"]},
76 {"required": ["compare_presence"]},
77 {"required": ["compare_vpd"]},
78 {"required": ["i2c_compare_bit"]},
79 {"required": ["i2c_compare_byte"]},
80 {"required": ["i2c_compare_bytes"]},
81 {"required": ["i2c_write_bit"]},
82 {"required": ["i2c_write_byte"]},
83 {"required": ["i2c_write_bytes"]},
84 {"required": ["if"]},
85 {"required": ["not"]},
86 {"required": ["or"]},
87 {"required": ["pmbus_write_vout_command"]},
88 {"required": ["pmbus_read_sensor"]},
89 {"required": ["run_rule"]},
90 {"required": ["set_device"]}
91 ]
92 },
93
94 "actions":
95 {
96 "type": "array",
97 "items": {"$ref": "#/definitions/action" },
98 "minItems": 1
99 },
100
101 "compare_presence":
102 {
103 "type": "object",
104 "properties":
105 {
Shawn McCarneyecbeeea2021-04-29 21:08:18 -0500106 "fru": {"$ref": "#/definitions/inventory_path" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800107 "value": {"$ref": "#/definitions/boolean_value" }
108 },
109 "required": ["fru", "value"],
110 "additionalProperties": false
111 },
112
Shawn McCarneyecbeeea2021-04-29 21:08:18 -0500113 "inventory_path":
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800114 {
115 "type": "string",
116 "minLength": 1
117 },
118
119 "boolean_value":
120 {
121 "type": "boolean"
122 },
123
124 "compare_vpd":
125 {
126 "type": "object",
127 "properties":
128 {
Shawn McCarneyecbeeea2021-04-29 21:08:18 -0500129 "fru": {"$ref": "#/definitions/inventory_path" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800130 "keyword": {"$ref": "#/definitions/keyword" },
Matt Spinleraacc2aa2021-05-25 09:31:35 -0600131 "value": {"$ref": "#/definitions/string_value" },
Matt Spinleraacc2aa2021-05-25 09:31:35 -0600132 "byte_values": {"$ref": "#/definitions/bytes_values" }
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800133 },
Matt Spinleraacc2aa2021-05-25 09:31:35 -0600134 "required": ["fru", "keyword"],
135 "oneOf": [
136 {"required": ["value"]},
137 {"required": ["byte_values"]}
138 ],
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800139 "additionalProperties": false
140 },
141
142 "keyword":
143 {
144 "type": "string",
Matt Spinleraacc2aa2021-05-25 09:31:35 -0600145 "enum": ["CCIN", "Manufacturer", "Model", "PartNumber", "HW"]
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800146 },
147
148 "string_value":
149 {
150 "type": "string"
151 },
152
153 "i2c_bit":
154 {
155 "type": "object",
156 "properties":
157 {
158 "register": {"$ref": "#/definitions/register" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800159 "position": {"$ref": "#/definitions/position" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800160 "value": {"$ref": "#/definitions/bit_value" }
161 },
162 "required": ["register", "position","value"],
163 "additionalProperties": false
164 },
165
166 "register":
167 {
168 "type": "string",
169 "pattern": "^0x[0-9A-Fa-f]{2}$"
170 },
171
172 "position":
173 {
174 "type": "integer",
175 "minimum": 0,
176 "maximum": 7
177 },
178
179 "bit_value":
180 {
181 "type": "integer",
182 "minimum": 0,
183 "maximum": 1
184 },
185
186 "i2c_byte":
187 {
188 "type": "object",
189 "properties":
190 {
191 "register": {"$ref": "#/definitions/register" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800192 "value": {"$ref": "#/definitions/byte_value" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800193 "mask": {"$ref": "#/definitions/byte_mask" }
194 },
195 "required": ["register", "value"],
196 "additionalProperties": false
197 },
198
199 "byte_value":
200 {
201 "type": "string",
202 "pattern": "^0x[0-9A-Fa-f]{2}$"
203 },
204
205 "byte_mask":
206 {
207 "type": "string",
208 "pattern": "^0x[0-9A-Fa-f]{2}$"
209 },
210
211 "i2c_bytes":
212 {
213 "type": "object",
214 "properties":
215 {
216 "register": {"$ref": "#/definitions/register" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800217 "values": {"$ref": "#/definitions/bytes_values" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800218 "masks": {"$ref": "#/definitions/bytes_masks" }
219 },
220 "required": ["register", "values"],
221 "additionalProperties": false
222 },
223
224 "bytes_values":
225 {
226 "type": "array",
227 "items": {"$ref": "#/definitions/byte_value" },
228 "minItems": 1
229 },
230
231 "bytes_masks":
232 {
233 "type": "array",
234 "items": {"$ref": "#/definitions/byte_mask" },
235 "minItems": 1
236 },
237
238 "if":
239 {
240 "type": "object",
241 "properties":
242 {
243 "condition": {"$ref": "#/definitions/action" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800244 "then": {"$ref": "#/definitions/actions" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800245 "else": {"$ref": "#/definitions/actions" }
246 },
247 "required": ["condition", "then"],
248 "additionalProperties": false
249 },
250
251 "pmbus_write_vout_command":
252 {
253 "type": "object",
254 "properties":
255 {
256 "volts": {"$ref": "#/definitions/volts" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800257 "format": {"$ref": "#/definitions/write_vout_format" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800258 "exponent": {"$ref": "#/definitions/exponent" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800259 "is_verified": {"$ref": "#/definitions/is_verified" }
260 },
261 "required": ["format"],
262 "additionalProperties": false
263 },
264
265 "volts":
266 {
267 "type": "number"
268 },
269
270 "write_vout_format":
271 {
272 "type": "string",
273 "enum": ["linear"]
274 },
275
276 "exponent":
277 {
278 "type": "integer"
279 },
280
281 "is_verified":
282 {
283 "type": "boolean"
284 },
285
286 "pmbus_read_sensor":
287 {
288 "type": "object",
289 "properties":
290 {
291 "type": {"$ref": "#/definitions/pmbus_read_sensor_type" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800292 "command": {"$ref": "#/definitions/pmbus_read_sensor_command" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800293 "format": {"$ref": "#/definitions/read_sensor_format" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800294 "exponent": {"$ref": "#/definitions/exponent" }
295 },
296 "required": ["type", "command", "format"],
297 "additionalProperties": false
298 },
299
300 "pmbus_read_sensor_type":
301 {
302 "type": "string",
303 "enum": ["iout", "iout_peak", "iout_valley", "pout", "temperature", "temperature_peak", "vout", "vout_peak", "vout_valley"]
304 },
305
306 "pmbus_read_sensor_command":
307 {
308 "type": "string",
309 "pattern": "^0x[0-9a-fA-F]{2}$"
310 },
311
312 "read_sensor_format":
313 {
314 "type": "string",
315 "enum": ["linear_11", "linear_16"]
316 },
317
Shawn McCarney4dc9a302021-08-14 10:52:47 -0500318 "chassis_object":
319 {
320 "type": "object",
321 "properties":
322 {
323 "comments": {"$ref": "#/definitions/comments" },
324 "number": {"$ref": "#/definitions/number" },
325 "inventory_path": {"$ref": "#/definitions/inventory_path" },
326 "devices": {"$ref": "#/definitions/devices" }
327 },
328 "required": ["number"],
329 "additionalProperties": false
330 },
331
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800332 "chassis":
333 {
334 "type": "array",
Shawn McCarney4dc9a302021-08-14 10:52:47 -0500335 "items": {"$ref": "#/definitions/chassis_object" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800336 "minItems": 1
337 },
338
339 "number":
340 {
341 "type": "integer",
342 "minimum": 1
343 },
344
Shawn McCarney4dc9a302021-08-14 10:52:47 -0500345 "device":
346 {
347 "type": "object",
348 "properties":
349 {
350 "comments": {"$ref": "#/definitions/comments" },
351 "id": {"$ref": "#/definitions/id" },
352 "is_regulator": {"$ref": "#/definitions/is_regulator" },
353 "fru": {"$ref": "#/definitions/inventory_path" },
354 "i2c_interface": {"$ref": "#/definitions/i2c_interface" },
355 "presence_detection": {"$ref": "#/definitions/presence_detection" },
356 "configuration": {"$ref": "#/definitions/configuration" },
357 "rails": {"$ref": "#/definitions/rails" }
358 },
359 "required": ["id", "is_regulator", "fru", "i2c_interface"],
360 "if":
361 {
362 "properties": { "is_regulator": { "const": false } }
363 },
364 "then":
365 {
366 "not" : { "required" : ["rails"] }
367 },
368 "additionalProperties": false
369 },
370
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800371 "devices":
372 {
373 "type": "array",
Shawn McCarney4dc9a302021-08-14 10:52:47 -0500374 "items": {"$ref": "#/definitions/device" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800375 "minItems": 1
376 },
377
378 "is_regulator":
379 {
380 "type": "boolean"
381 },
382
383 "i2c_interface":
384 {
385 "type": "object",
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800386 "properties":
387 {
388 "bus": {"$ref": "#/definitions/bus" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800389 "address": {"$ref": "#/definitions/address" }
390 },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800391 "required": ["bus", "address"],
392 "additionalProperties": false
393 },
394
395 "bus":
396 {
397 "type": "integer",
398 "minimum": 0
399 },
400
401 "address":
402 {
403 "type": "string",
404 "pattern": "^0x[0-9A-Fa-f]{2}$"
405 },
406
407 "presence_detection":
408 {
409 "type": "object",
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800410 "properties":
411 {
412 "comments": {"$ref": "#/definitions/comments" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800413 "rule_id": {"$ref": "#/definitions/id" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800414 "actions": {"$ref": "#/definitions/actions" }
415 },
416 "additionalProperties": false,
417 "oneOf": [
418 {"required": ["rule_id"]},
419 {"required": ["actions"]}
420 ]
421 },
422
423 "configuration":
424 {
425 "type": "object",
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800426 "properties":
427 {
428 "comments": {"$ref": "#/definitions/comments" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800429 "volts": {"$ref": "#/definitions/volts" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800430 "rule_id": {"$ref": "#/definitions/id" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800431 "actions": {"$ref": "#/definitions/actions" }
432 },
433 "additionalProperties": false,
434 "oneOf": [
435 {"required": ["rule_id"]},
436 {"required": ["actions"]}
437 ]
438 },
439
440 "rail":
441 {
442 "type": "object",
443 "properties":
444 {
445 "comments": {"$ref": "#/definitions/comments" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800446 "id": {"$ref": "#/definitions/id" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800447 "configuration": {"$ref": "#/definitions/configuration" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800448 "sensor_monitoring": {"$ref": "#/definitions/sensor_monitoring" }
449 },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800450 "required": ["id"],
451 "additionalProperties": false
452 },
453
454 "rails":
455 {
456 "type": "array",
457 "items": {"$ref": "#/definitions/rail" },
458 "minItems": 1
459 },
460
461 "sensor_monitoring":
462 {
463 "type": "object",
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800464 "properties":
465 {
466 "comments": {"$ref": "#/definitions/comments" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800467 "rule_id": {"$ref": "#/definitions/id" },
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800468 "actions": {"$ref": "#/definitions/actions" }
469 },
470 "additionalProperties": false,
471 "oneOf": [
472 {"required": ["rule_id"]},
473 {"required": ["actions"]}
474 ]
475 }
Bob Kingdcb4b3b2019-12-17 18:07:06 +0800476 }
477}