1{ 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", 7 8 "properties": 9 { 10 "comments": 11 { 12 "$ref": "#/definitions/comments" 13 }, 14 "rules": 15 { 16 "$ref": "#/definitions/rules" 17 }, 18 "chassis": 19 { 20 "$ref": "#/definitions/chassis" 21 } 22 }, 23 24 "required": ["chassis"], 25 "additionalProperties": false, 26 27 "definitions": 28 { 29 "rules": 30 { 31 "type": "array", 32 "items": 33 { 34 "type": "object", 35 "properties": 36 { 37 "comments": {"$ref": "#/definitions/comments" }, 38 39 "id": {"$ref": "#/definitions/id" }, 40 41 "actions": {"$ref": "#/definitions/actions" } 42 }, 43 44 "required": ["id", "actions"], 45 "additionalProperties": false 46 }, 47 "minItems": 1 48 }, 49 50 "comments": 51 { 52 "type": "array", 53 "items": 54 { 55 "type": "string" 56 }, 57 58 "minItems": 1 59 }, 60 61 "id": 62 { 63 "type": "string", 64 "pattern": "^[A-Za-z0-9_]+$" 65 }, 66 67 "action": 68 { 69 "type": "object", 70 "properties": 71 { 72 "comments": {"$ref": "#/definitions/comments" }, 73 74 "and": {"$ref": "#/definitions/actions" }, 75 76 "compare_presence": {"$ref": "#/definitions/compare_presence" }, 77 78 "compare_vpd": {"$ref": "#/definitions/compare_vpd" }, 79 80 "i2c_compare_bit": {"$ref": "#/definitions/i2c_bit" }, 81 82 "i2c_compare_byte": {"$ref": "#/definitions/i2c_byte" }, 83 84 "i2c_compare_bytes": {"$ref": "#/definitions/i2c_bytes" }, 85 86 "i2c_write_bit": {"$ref": "#/definitions/i2c_bit" }, 87 88 "i2c_write_byte": {"$ref": "#/definitions/i2c_byte" }, 89 90 "i2c_write_bytes": {"$ref": "#/definitions/i2c_bytes" }, 91 92 "if": {"$ref": "#/definitions/if" }, 93 94 "not": {"$ref": "#/definitions/action" }, 95 96 "or": {"$ref": "#/definitions/actions" }, 97 98 "pmbus_read_sensor": {"$ref": "#/definitions/pmbus_read_sensor" }, 99 100 "pmbus_write_vout_command": {"$ref": "#/definitions/pmbus_write_vout_command" }, 101 102 "run_rule": {"$ref": "#/definitions/id" }, 103 104 "set_device": {"$ref": "#/definitions/id" } 105 }, 106 "additionalProperties": false, 107 "oneOf": [ 108 {"required": ["and"]}, 109 {"required": ["compare_presence"]}, 110 {"required": ["compare_vpd"]}, 111 {"required": ["i2c_compare_bit"]}, 112 {"required": ["i2c_compare_byte"]}, 113 {"required": ["i2c_compare_bytes"]}, 114 {"required": ["i2c_write_bit"]}, 115 {"required": ["i2c_write_byte"]}, 116 {"required": ["i2c_write_bytes"]}, 117 {"required": ["if"]}, 118 {"required": ["not"]}, 119 {"required": ["or"]}, 120 {"required": ["pmbus_write_vout_command"]}, 121 {"required": ["pmbus_read_sensor"]}, 122 {"required": ["run_rule"]}, 123 {"required": ["set_device"]} 124 ] 125 }, 126 127 "actions": 128 { 129 "type": "array", 130 "items": {"$ref": "#/definitions/action" }, 131 "minItems": 1 132 }, 133 134 "compare_presence": 135 { 136 "type": "object", 137 "properties": 138 { 139 "fru": {"$ref": "#/definitions/fru" }, 140 141 "value": {"$ref": "#/definitions/boolean_value" } 142 }, 143 "required": ["fru", "value"], 144 "additionalProperties": false 145 }, 146 147 "fru": 148 { 149 "type": "string", 150 "minLength": 1 151 }, 152 153 "boolean_value": 154 { 155 "type": "boolean" 156 }, 157 158 "compare_vpd": 159 { 160 "type": "object", 161 "properties": 162 { 163 "fru": {"$ref": "#/definitions/fru" }, 164 165 "keyword": {"$ref": "#/definitions/keyword" }, 166 167 "value": {"$ref": "#/definitions/string_value" } 168 }, 169 "required": ["fru", "keyword", "value"], 170 "additionalProperties": false 171 }, 172 173 "keyword": 174 { 175 "type": "string", 176 "enum": ["CCIN", "Manufacturer", "Model", "PartNumber"] 177 }, 178 179 "string_value": 180 { 181 "type": "string" 182 }, 183 184 "i2c_bit": 185 { 186 "type": "object", 187 "properties": 188 { 189 "register": {"$ref": "#/definitions/register" }, 190 191 "position": {"$ref": "#/definitions/position" }, 192 193 "value": {"$ref": "#/definitions/bit_value" } 194 }, 195 "required": ["register", "position","value"], 196 "additionalProperties": false 197 }, 198 199 "register": 200 { 201 "type": "string", 202 "pattern": "^0x[0-9A-Fa-f]{2}$" 203 }, 204 205 "position": 206 { 207 "type": "integer", 208 "minimum": 0, 209 "maximum": 7 210 }, 211 212 "bit_value": 213 { 214 "type": "integer", 215 "minimum": 0, 216 "maximum": 1 217 }, 218 219 "i2c_byte": 220 { 221 "type": "object", 222 "properties": 223 { 224 "register": {"$ref": "#/definitions/register" }, 225 226 "value": {"$ref": "#/definitions/byte_value" }, 227 228 "mask": {"$ref": "#/definitions/byte_mask" } 229 }, 230 "required": ["register", "value"], 231 "additionalProperties": false 232 }, 233 234 "byte_value": 235 { 236 "type": "string", 237 "pattern": "^0x[0-9A-Fa-f]{2}$" 238 }, 239 240 "byte_mask": 241 { 242 "type": "string", 243 "pattern": "^0x[0-9A-Fa-f]{2}$" 244 }, 245 246 "i2c_bytes": 247 { 248 "type": "object", 249 "properties": 250 { 251 "register": {"$ref": "#/definitions/register" }, 252 253 "values": {"$ref": "#/definitions/bytes_values" }, 254 255 "masks": {"$ref": "#/definitions/bytes_masks" } 256 }, 257 "required": ["register", "values"], 258 "additionalProperties": false 259 }, 260 261 "bytes_values": 262 { 263 "type": "array", 264 "items": {"$ref": "#/definitions/byte_value" }, 265 "minItems": 1 266 }, 267 268 "bytes_masks": 269 { 270 "type": "array", 271 "items": {"$ref": "#/definitions/byte_mask" }, 272 "minItems": 1 273 }, 274 275 "if": 276 { 277 "type": "object", 278 "properties": 279 { 280 "condition": {"$ref": "#/definitions/action" }, 281 282 "then": {"$ref": "#/definitions/actions" }, 283 284 "else": {"$ref": "#/definitions/actions" } 285 }, 286 "required": ["condition", "then"], 287 "additionalProperties": false 288 }, 289 290 "pmbus_write_vout_command": 291 { 292 "type": "object", 293 "properties": 294 { 295 "volts": {"$ref": "#/definitions/volts" }, 296 297 "format": {"$ref": "#/definitions/write_vout_format" }, 298 299 "exponent": {"$ref": "#/definitions/exponent" }, 300 301 "is_verified": {"$ref": "#/definitions/is_verified" } 302 }, 303 "required": ["format"], 304 "additionalProperties": false 305 }, 306 307 "volts": 308 { 309 "type": "number" 310 }, 311 312 "write_vout_format": 313 { 314 "type": "string", 315 "enum": ["linear"] 316 }, 317 318 "exponent": 319 { 320 "type": "integer" 321 }, 322 323 "is_verified": 324 { 325 "type": "boolean" 326 }, 327 328 "pmbus_read_sensor": 329 { 330 "type": "object", 331 "properties": 332 { 333 "type": {"$ref": "#/definitions/pmbus_read_sensor_type" }, 334 335 "command": {"$ref": "#/definitions/pmbus_read_sensor_command" }, 336 337 "format": {"$ref": "#/definitions/read_sensor_format" }, 338 339 "exponent": {"$ref": "#/definitions/exponent" } 340 }, 341 "required": ["type", "command", "format"], 342 "additionalProperties": false 343 }, 344 345 "pmbus_read_sensor_type": 346 { 347 "type": "string", 348 "enum": ["iout", "iout_peak", "iout_valley", "pout", "temperature", "temperature_peak", "vout", "vout_peak", "vout_valley"] 349 }, 350 351 "pmbus_read_sensor_command": 352 { 353 "type": "string", 354 "pattern": "^0x[0-9a-fA-F]{2}$" 355 }, 356 357 "read_sensor_format": 358 { 359 "type": "string", 360 "enum": ["linear_11", "linear_16"] 361 }, 362 363 "chassis": 364 { 365 "type": "array", 366 "items": 367 { 368 "type": "object", 369 "properties": 370 { 371 "comments": {"$ref": "#/definitions/comments" }, 372 373 "number": {"$ref": "#/definitions/number" }, 374 375 "devices": {"$ref": "#/definitions/devices" } 376 }, 377 378 "required": ["number"], 379 "additionalProperties": false 380 }, 381 "minItems": 1 382 }, 383 384 "number": 385 { 386 "type": "integer", 387 "minimum": 1 388 }, 389 390 "devices": 391 { 392 "type": "array", 393 "items": 394 { 395 "type": "object", 396 "properties": 397 { 398 "comments": {"$ref": "#/definitions/comments" }, 399 400 "id": {"$ref": "#/definitions/id" }, 401 402 "is_regulator": {"$ref": "#/definitions/is_regulator" }, 403 404 "fru": {"$ref": "#/definitions/fru" }, 405 406 "i2c_interface": {"$ref": "#/definitions/i2c_interface" }, 407 408 "presence_detection": {"$ref": "#/definitions/presence_detection" }, 409 410 "configuration": {"$ref": "#/definitions/configuration" }, 411 412 "rails": {"$ref": "#/definitions/rails" } 413 }, 414 "required": ["id", "is_regulator", "fru", "i2c_interface"], 415 "if": 416 { 417 "properties": { "is_regulator": { "const": false } } 418 }, 419 "then": 420 { 421 "not" : { "required" : ["rails"] } 422 }, 423 "additionalProperties": false 424 }, 425 "minItems": 1 426 }, 427 428 "is_regulator": 429 { 430 "type": "boolean" 431 }, 432 433 "i2c_interface": 434 { 435 "type": "object", 436 437 "properties": 438 { 439 "bus": {"$ref": "#/definitions/bus" }, 440 441 "address": {"$ref": "#/definitions/address" } 442 }, 443 444 "required": ["bus", "address"], 445 "additionalProperties": false 446 }, 447 448 "bus": 449 { 450 "type": "integer", 451 "minimum": 0 452 }, 453 454 "address": 455 { 456 "type": "string", 457 "pattern": "^0x[0-9A-Fa-f]{2}$" 458 }, 459 460 "presence_detection": 461 { 462 "type": "object", 463 464 "properties": 465 { 466 "comments": {"$ref": "#/definitions/comments" }, 467 468 "rule_id": {"$ref": "#/definitions/id" }, 469 470 "actions": {"$ref": "#/definitions/actions" } 471 }, 472 "additionalProperties": false, 473 "oneOf": [ 474 {"required": ["rule_id"]}, 475 {"required": ["actions"]} 476 ] 477 }, 478 479 "configuration": 480 { 481 "type": "object", 482 483 "properties": 484 { 485 "comments": {"$ref": "#/definitions/comments" }, 486 487 "volts": {"$ref": "#/definitions/volts" }, 488 489 "rule_id": {"$ref": "#/definitions/id" }, 490 491 "actions": {"$ref": "#/definitions/actions" } 492 }, 493 "additionalProperties": false, 494 "oneOf": [ 495 {"required": ["rule_id"]}, 496 {"required": ["actions"]} 497 ] 498 }, 499 500 "rail": 501 { 502 "type": "object", 503 "properties": 504 { 505 "comments": {"$ref": "#/definitions/comments" }, 506 507 "id": {"$ref": "#/definitions/id" }, 508 509 "configuration": {"$ref": "#/definitions/configuration" }, 510 511 "sensor_monitoring": {"$ref": "#/definitions/sensor_monitoring" } 512 }, 513 514 "required": ["id"], 515 "additionalProperties": false 516 }, 517 518 "rails": 519 { 520 "type": "array", 521 "items": {"$ref": "#/definitions/rail" }, 522 "minItems": 1 523 }, 524 525 "sensor_monitoring": 526 { 527 "type": "object", 528 529 "properties": 530 { 531 "comments": {"$ref": "#/definitions/comments" }, 532 533 "rule_id": {"$ref": "#/definitions/id" }, 534 535 "actions": {"$ref": "#/definitions/actions" } 536 }, 537 "additionalProperties": false, 538 "oneOf": [ 539 {"required": ["rule_id"]}, 540 {"required": ["actions"]} 541 ] 542 } 543 544 } 545} 546