blob: 53efee155dc495ca259f2f57757121c3afe6a526 [file] [log] [blame]
{
"$schema": "http://json-schema.org/schema#",
"title": "JSON schema for the phosphor-regulators config file",
"$id": "https://github.com/openbmc/phosphor-power/tree/master/phosphor-regulators/schema/config_schema.json",
"description": "This schema describes the JSON format for the phosphor-regulators configuration file.",
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"rules": { "$ref": "#/definitions/rules" },
"chassis": { "$ref": "#/definitions/chassis" }
},
"required": ["chassis"],
"additionalProperties": false,
"definitions": {
"rule": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"id": { "$ref": "#/definitions/id" },
"actions": { "$ref": "#/definitions/actions" }
},
"required": ["id", "actions"],
"additionalProperties": false
},
"rules": {
"type": "array",
"items": { "$ref": "#/definitions/rule" },
"minItems": 1
},
"comments": {
"type": "array",
"items": { "type": "string" },
"minItems": 1
},
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9_]+$"
},
"action": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"and": { "$ref": "#/definitions/actions" },
"compare_presence": {
"$ref": "#/definitions/compare_presence"
},
"compare_vpd": { "$ref": "#/definitions/compare_vpd" },
"i2c_capture_bytes": {
"$ref": "#/definitions/i2c_capture_bytes"
},
"i2c_compare_bit": { "$ref": "#/definitions/i2c_bit" },
"i2c_compare_byte": { "$ref": "#/definitions/i2c_byte" },
"i2c_compare_bytes": { "$ref": "#/definitions/i2c_bytes" },
"i2c_write_bit": { "$ref": "#/definitions/i2c_bit" },
"i2c_write_byte": { "$ref": "#/definitions/i2c_byte" },
"i2c_write_bytes": { "$ref": "#/definitions/i2c_bytes" },
"if": { "$ref": "#/definitions/if" },
"log_phase_fault": { "$ref": "#/definitions/log_phase_fault" },
"not": { "$ref": "#/definitions/action" },
"or": { "$ref": "#/definitions/actions" },
"pmbus_read_sensor": {
"$ref": "#/definitions/pmbus_read_sensor"
},
"pmbus_write_vout_command": {
"$ref": "#/definitions/pmbus_write_vout_command"
},
"run_rule": { "$ref": "#/definitions/id" },
"set_device": { "$ref": "#/definitions/id" }
},
"additionalProperties": false,
"oneOf": [
{ "required": ["and"] },
{ "required": ["compare_presence"] },
{ "required": ["compare_vpd"] },
{ "required": ["i2c_capture_bytes"] },
{ "required": ["i2c_compare_bit"] },
{ "required": ["i2c_compare_byte"] },
{ "required": ["i2c_compare_bytes"] },
{ "required": ["i2c_write_bit"] },
{ "required": ["i2c_write_byte"] },
{ "required": ["i2c_write_bytes"] },
{ "required": ["if"] },
{ "required": ["log_phase_fault"] },
{ "required": ["not"] },
{ "required": ["or"] },
{ "required": ["pmbus_write_vout_command"] },
{ "required": ["pmbus_read_sensor"] },
{ "required": ["run_rule"] },
{ "required": ["set_device"] }
]
},
"actions": {
"type": "array",
"items": { "$ref": "#/definitions/action" },
"minItems": 1
},
"compare_presence": {
"type": "object",
"properties": {
"fru": { "$ref": "#/definitions/inventory_path" },
"value": { "$ref": "#/definitions/boolean_value" }
},
"required": ["fru", "value"],
"additionalProperties": false
},
"inventory_path": {
"type": "string",
"minLength": 1
},
"boolean_value": {
"type": "boolean"
},
"compare_vpd": {
"type": "object",
"properties": {
"fru": { "$ref": "#/definitions/inventory_path" },
"keyword": { "$ref": "#/definitions/keyword" },
"value": { "$ref": "#/definitions/string_value" },
"byte_values": { "$ref": "#/definitions/byte_values_min0" }
},
"required": ["fru", "keyword"],
"oneOf": [
{ "required": ["value"] },
{ "required": ["byte_values"] }
],
"additionalProperties": false
},
"keyword": {
"type": "string",
"enum": ["CCIN", "Manufacturer", "Model", "PartNumber", "HW"]
},
"string_value": {
"type": "string"
},
"i2c_capture_bytes": {
"type": "object",
"properties": {
"register": { "$ref": "#/definitions/register" },
"count": { "$ref": "#/definitions/byte_count" }
},
"required": ["register", "count"],
"additionalProperties": false
},
"i2c_bit": {
"type": "object",
"properties": {
"register": { "$ref": "#/definitions/register" },
"position": { "$ref": "#/definitions/position" },
"value": { "$ref": "#/definitions/bit_value" }
},
"required": ["register", "position", "value"],
"additionalProperties": false
},
"register": {
"type": "string",
"pattern": "^0x[0-9A-Fa-f]{2}$"
},
"position": {
"type": "integer",
"minimum": 0,
"maximum": 7
},
"bit_value": {
"type": "integer",
"minimum": 0,
"maximum": 1
},
"i2c_byte": {
"type": "object",
"properties": {
"register": { "$ref": "#/definitions/register" },
"value": { "$ref": "#/definitions/byte_value" },
"mask": { "$ref": "#/definitions/byte_mask" }
},
"required": ["register", "value"],
"additionalProperties": false
},
"byte_value": {
"type": "string",
"pattern": "^0x[0-9A-Fa-f]{2}$"
},
"byte_mask": {
"type": "string",
"pattern": "^0x[0-9A-Fa-f]{2}$"
},
"byte_count": {
"type": "integer",
"minimum": 1
},
"i2c_bytes": {
"type": "object",
"properties": {
"register": { "$ref": "#/definitions/register" },
"values": { "$ref": "#/definitions/byte_values" },
"masks": { "$ref": "#/definitions/byte_masks" }
},
"required": ["register", "values"],
"additionalProperties": false
},
"byte_values": {
"type": "array",
"items": { "$ref": "#/definitions/byte_value" },
"minItems": 1
},
"byte_values_min0": {
"type": "array",
"items": { "$ref": "#/definitions/byte_value" },
"minItems": 0
},
"byte_masks": {
"type": "array",
"items": { "$ref": "#/definitions/byte_mask" },
"minItems": 1
},
"if": {
"type": "object",
"properties": {
"condition": { "$ref": "#/definitions/action" },
"then": { "$ref": "#/definitions/actions" },
"else": { "$ref": "#/definitions/actions" }
},
"required": ["condition", "then"],
"additionalProperties": false
},
"log_phase_fault": {
"type": "object",
"properties": {
"type": { "$ref": "#/definitions/phase_fault_type" }
},
"required": ["type"],
"additionalProperties": false
},
"phase_fault_type": {
"type": "string",
"enum": ["n+1", "n"]
},
"pmbus_write_vout_command": {
"type": "object",
"properties": {
"volts": { "$ref": "#/definitions/volts" },
"format": { "$ref": "#/definitions/write_vout_format" },
"exponent": { "$ref": "#/definitions/exponent" },
"is_verified": { "$ref": "#/definitions/is_verified" }
},
"required": ["format"],
"additionalProperties": false
},
"volts": {
"type": "number"
},
"write_vout_format": {
"type": "string",
"enum": ["linear"]
},
"exponent": {
"type": "integer"
},
"is_verified": {
"type": "boolean"
},
"pmbus_read_sensor": {
"type": "object",
"properties": {
"type": { "$ref": "#/definitions/pmbus_read_sensor_type" },
"command": {
"$ref": "#/definitions/pmbus_read_sensor_command"
},
"format": { "$ref": "#/definitions/read_sensor_format" },
"exponent": { "$ref": "#/definitions/exponent" }
},
"required": ["type", "command", "format"],
"additionalProperties": false
},
"pmbus_read_sensor_type": {
"type": "string",
"enum": [
"iout",
"iout_peak",
"iout_valley",
"pout",
"temperature",
"temperature_peak",
"vout",
"vout_peak",
"vout_valley"
]
},
"pmbus_read_sensor_command": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{2}$"
},
"read_sensor_format": {
"type": "string",
"enum": ["linear_11", "linear_16"]
},
"chassis_object": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"number": { "$ref": "#/definitions/number" },
"inventory_path": { "$ref": "#/definitions/inventory_path" },
"devices": { "$ref": "#/definitions/devices" }
},
"required": ["number", "inventory_path"],
"additionalProperties": false
},
"chassis": {
"type": "array",
"items": { "$ref": "#/definitions/chassis_object" },
"minItems": 1
},
"number": {
"type": "integer",
"minimum": 1
},
"device": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"id": { "$ref": "#/definitions/id" },
"is_regulator": { "$ref": "#/definitions/is_regulator" },
"fru": { "$ref": "#/definitions/inventory_path" },
"i2c_interface": { "$ref": "#/definitions/i2c_interface" },
"presence_detection": {
"$ref": "#/definitions/presence_detection"
},
"configuration": { "$ref": "#/definitions/configuration" },
"phase_fault_detection": {
"$ref": "#/definitions/phase_fault_detection"
},
"rails": { "$ref": "#/definitions/rails" }
},
"required": ["id", "is_regulator", "fru", "i2c_interface"],
"if": {
"properties": { "is_regulator": { "const": false } }
},
"then": {
"not": {
"anyOf": [
{ "required": ["phase_fault_detection"] },
{ "required": ["rails"] }
]
}
},
"additionalProperties": false
},
"devices": {
"type": "array",
"items": { "$ref": "#/definitions/device" },
"minItems": 1
},
"is_regulator": {
"type": "boolean"
},
"i2c_interface": {
"type": "object",
"properties": {
"bus": { "$ref": "#/definitions/bus" },
"address": { "$ref": "#/definitions/address" }
},
"required": ["bus", "address"],
"additionalProperties": false
},
"bus": {
"type": "integer",
"minimum": 0
},
"address": {
"type": "string",
"pattern": "^0x[0-9A-Fa-f]{2}$"
},
"presence_detection": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"rule_id": { "$ref": "#/definitions/id" },
"actions": { "$ref": "#/definitions/actions" }
},
"additionalProperties": false,
"oneOf": [{ "required": ["rule_id"] }, { "required": ["actions"] }]
},
"configuration": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"volts": { "$ref": "#/definitions/volts" },
"rule_id": { "$ref": "#/definitions/id" },
"actions": { "$ref": "#/definitions/actions" }
},
"additionalProperties": false,
"oneOf": [{ "required": ["rule_id"] }, { "required": ["actions"] }]
},
"phase_fault_detection": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"device_id": { "$ref": "#/definitions/id" },
"rule_id": { "$ref": "#/definitions/id" },
"actions": { "$ref": "#/definitions/actions" }
},
"additionalProperties": false,
"oneOf": [{ "required": ["rule_id"] }, { "required": ["actions"] }]
},
"rail": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"id": { "$ref": "#/definitions/id" },
"configuration": { "$ref": "#/definitions/configuration" },
"sensor_monitoring": {
"$ref": "#/definitions/sensor_monitoring"
}
},
"required": ["id"],
"additionalProperties": false
},
"rails": {
"type": "array",
"items": { "$ref": "#/definitions/rail" },
"minItems": 1
},
"sensor_monitoring": {
"type": "object",
"properties": {
"comments": { "$ref": "#/definitions/comments" },
"rule_id": { "$ref": "#/definitions/id" },
"actions": { "$ref": "#/definitions/actions" }
},
"additionalProperties": false,
"oneOf": [{ "required": ["rule_id"] }, { "required": ["actions"] }]
}
}
}