blob: 429d3bf16d012774afa20550ab8f6744bb4292ab [file] [log] [blame]
Matt Spinler10f3d932019-09-26 16:24:14 -05001{
2 "title": "PEL message registry schema",
3 "$id": "http://github.com/openbmc/phosphor-logging/extensions/openpower-pels/registry/schema/schema.json",
4 "description": "This schema describes JSON used for creating PELs from OpenBMC event logs.",
5 "type": "object",
6
Patrick Williams26919f02022-12-08 06:12:43 -06007 "properties": {
8 "PELs": {
Matt Spinler10f3d932019-09-26 16:24:14 -05009 "title": "This is an array of entries that specify PEL fields for event logs",
10 "$ref": "#/definitions/pels"
11 }
12 },
13
14 "additionalProperties": false,
15 "minItems": 1,
16 "uniqueItems": true,
17
Patrick Williams26919f02022-12-08 06:12:43 -060018 "definitions": {
19 "pels": {
Matt Spinler10f3d932019-09-26 16:24:14 -050020 "description": "Each entry in this array is for converting an event log to a PEL",
21 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -060022 "items": {
Matt Spinler10f3d932019-09-26 16:24:14 -050023 "description": "The schema for a single event log registry entry",
24 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -060025 "properties": {
26 "Name": { "$ref": "#/definitions/errorName" },
Matt Spinler10f3d932019-09-26 16:24:14 -050027
Patrick Williams26919f02022-12-08 06:12:43 -060028 "SRC": { "$ref": "#/definitions/src" },
Matt Spinler10f3d932019-09-26 16:24:14 -050029
Patrick Williams26919f02022-12-08 06:12:43 -060030 "Subsystem": { "$ref": "#/definitions/subsystem" },
Matt Spinler10f3d932019-09-26 16:24:14 -050031
Patrick Williams26919f02022-12-08 06:12:43 -060032 "PossibleSubsystems": {
33 "$ref": "#/definitions/possibleSubsystems"
34 },
Matt Spinler23970b02022-02-25 16:34:46 -060035
Patrick Williams26919f02022-12-08 06:12:43 -060036 "Severity": { "$ref": "#/definitions/severity" },
Matt Spinler10f3d932019-09-26 16:24:14 -050037
Patrick Williams26919f02022-12-08 06:12:43 -060038 "MfgSeverity": { "$ref": "#/definitions/mfgSeverity" },
Matt Spinler10f3d932019-09-26 16:24:14 -050039
Patrick Williams26919f02022-12-08 06:12:43 -060040 "EventScope": { "$ref": "#/definitions/eventScope" },
Matt Spinler10f3d932019-09-26 16:24:14 -050041
Patrick Williams26919f02022-12-08 06:12:43 -060042 "EventType": { "$ref": "#/definitions/eventType" },
Matt Spinler10f3d932019-09-26 16:24:14 -050043
Patrick Williams26919f02022-12-08 06:12:43 -060044 "ActionFlags": { "$ref": "#/definitions/actionFlags" },
Matt Spinler10f3d932019-09-26 16:24:14 -050045
Patrick Williams26919f02022-12-08 06:12:43 -060046 "MfgActionFlags": {
47 "$ref": "#/definitions/mfgActionFlags"
48 },
Matt Spinler10f3d932019-09-26 16:24:14 -050049
Patrick Williams26919f02022-12-08 06:12:43 -060050 "Documentation": { "$ref": "#/definitions/documentation" },
Matt Spinler10f3d932019-09-26 16:24:14 -050051
Patrick Williams26919f02022-12-08 06:12:43 -060052 "ComponentID": { "$ref": "#/definitions/componentID" },
Matt Spinler9e819c72020-02-12 16:44:16 -060053
Patrick Williams26919f02022-12-08 06:12:43 -060054 "CalloutsUsingAD": {
55 "$ref": "#/definitions/calloutsUsingAD"
56 },
Matt Spinler9e819c72020-02-12 16:44:16 -060057
Matt Spinlerf22b4a12022-12-15 11:20:35 -060058 "Callouts": { "$ref": "#/definitions/callouts" },
59
60 "JournalCapture": { "$ref": "#/definitions/journalCapture" }
Matt Spinler10f3d932019-09-26 16:24:14 -050061 },
62
Matt Spinler23970b02022-02-25 16:34:46 -060063 "required": ["Name", "SRC", "Documentation"],
Matt Spinler9e819c72020-02-12 16:44:16 -060064 "additionalProperties": false,
65
Patrick Williams26919f02022-12-08 06:12:43 -060066 "not": {
Matt Spinler9e819c72020-02-12 16:44:16 -060067 "required": ["CalloutsUsingAD", "Callouts"]
Matt Spinler23970b02022-02-25 16:34:46 -060068 },
69
Patrick Williams26919f02022-12-08 06:12:43 -060070 "oneOf": [
Matt Spinler23970b02022-02-25 16:34:46 -060071 {
72 "required": ["Subsystem"]
73 },
74 {
75 "required": ["PossibleSubsystems"]
76 }
77 ]
Matt Spinler10f3d932019-09-26 16:24:14 -050078 }
79 },
80
Patrick Williams26919f02022-12-08 06:12:43 -060081 "errorName": {
Matt Spinler10f3d932019-09-26 16:24:14 -050082 "description": "The 'Message' property of an OpenBMC event log",
83 "type": "string"
84 },
85
Patrick Williams26919f02022-12-08 06:12:43 -060086 "componentID": {
Matt Spinler10f3d932019-09-26 16:24:14 -050087 "description": "The component ID of the PEL creator, in the form 0xYY00. For BD SRCs, this is optional and if not present the component ID will be taken from the upper byte of the reason code.",
88 "type": "string",
Matt Spinlera6c4ba72023-05-24 13:11:49 -050089 "pattern": "^0x[0-9A-F]{2}00$"
Matt Spinler10f3d932019-09-26 16:24:14 -050090 },
91
Patrick Williams26919f02022-12-08 06:12:43 -060092 "src": {
Matt Spinler10f3d932019-09-26 16:24:14 -050093 "description": "Contains fields describing the primary SRC embedded in the PEL",
94 "type": "object",
95
Patrick Williams26919f02022-12-08 06:12:43 -060096 "properties": {
97 "Type": { "$ref": "#/definitions/srcType" },
Matt Spinler10f3d932019-09-26 16:24:14 -050098
Patrick Williams26919f02022-12-08 06:12:43 -060099 "ReasonCode": { "$ref": "#/definitions/reasonCode" },
Matt Spinler10f3d932019-09-26 16:24:14 -0500100
Patrick Williams26919f02022-12-08 06:12:43 -0600101 "SymptomIDFields": { "$ref": "#/definitions/symptomID" },
Matt Spinler10f3d932019-09-26 16:24:14 -0500102
Matt Spinler3fe93e92023-04-14 14:06:59 -0500103 "Words6To9": { "$ref": "#/definitions/srcWords6To9" },
104
Matt Spinlerda5b76b2023-06-01 15:56:57 -0500105 "DeconfigFlag": { "$ref": "#/definitions/deconfigFlag" },
106
107 "CheckstopFlag": { "$ref": "#/definitions/checkstopFlag" }
Matt Spinler10f3d932019-09-26 16:24:14 -0500108 },
109
110 "required": ["ReasonCode", "Words6To9"],
111 "additionalProperties": false
112 },
113
Patrick Williams26919f02022-12-08 06:12:43 -0600114 "documentation": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500115 "description": "This contains event documentation that will be used by tools and parsers.",
116 "type": "object",
117
Patrick Williams26919f02022-12-08 06:12:43 -0600118 "properties": {
119 "Message": { "$ref": "#/definitions/docMessage" },
Matt Spinler10f3d932019-09-26 16:24:14 -0500120
Patrick Williams26919f02022-12-08 06:12:43 -0600121 "MessageArgSources": {
122 "$ref": "#/definitions/docMessageArgSources"
123 },
Matt Spinler10f3d932019-09-26 16:24:14 -0500124
Patrick Williams26919f02022-12-08 06:12:43 -0600125 "Description": { "$ref": "#/definitions/docDescription" },
Matt Spinler10f3d932019-09-26 16:24:14 -0500126
Patrick Williams26919f02022-12-08 06:12:43 -0600127 "Notes": { "$ref": "#/definitions/docNotes" }
Matt Spinler10f3d932019-09-26 16:24:14 -0500128 },
129 "additionalProperties": false,
130 "required": ["Message", "Description"]
131 },
132
Patrick Williams26919f02022-12-08 06:12:43 -0600133 "srcType": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500134 "description": "The first byte of the SRC ASCII string. Optional and defaults to BD. The '11' SRC is only to be used for events related to power.",
135 "type": "string",
136 "enum": ["BD", "11"]
137 },
138
Matt Spinler3fe93e92023-04-14 14:06:59 -0500139 "deconfigFlag": {
140 "description": "If true, will set bit 6 in hex data word 5, which means 'one or more resources are deconfigured'.",
141 "type": "boolean"
142 },
143
Matt Spinlerda5b76b2023-06-01 15:56:57 -0500144 "checkstopFlag": {
145 "description": "Indicates the SRC is for a hardware checkstop.",
146 "type": "boolean"
147 },
148
Patrick Williams26919f02022-12-08 06:12:43 -0600149 "docNotes": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500150 "description": "Any notes/comments about the error. An array of strings for manual line wrapping. Optional.",
151 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600152 "items": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500153 "description": "Notes",
154 "type": "string"
155 }
156 },
157
Patrick Williams26919f02022-12-08 06:12:43 -0600158 "reasonCode": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500159 "description": "String representation of the 2 byte reason code, like 0xABCD. The reason code is the 2nd half of the 8 character SRC ASCII String field, such as B1FFABCD.",
160 "type": "string",
Matt Spinlera6c4ba72023-05-24 13:11:49 -0500161 "pattern": "^0x[0-9A-F]{4}$",
Matt Spinler10f3d932019-09-26 16:24:14 -0500162
Patrick Williams26919f02022-12-08 06:12:43 -0600163 "examples": ["0x3355"]
164 },
165
166 "subsystem": {
167 "description": "PEL subsystem enumeration. See the PEL spec for more detailed definitions.",
168 "type": "string",
169 "enum": [
170 "processor",
171 "processor_fru",
172 "processor_chip",
173 "processor_unit",
174 "processor_bus",
175
176 "memory",
177 "memory_ctlr",
178 "memory_bus",
179 "memory_dimm",
180 "memory_fru",
181 "external_cache",
182
183 "io",
184 "io_hub",
185 "io_bridge",
186 "io_bus",
187 "io_processor",
188 "io_hub_other",
189 "phb",
190
191 "io_adapter",
192 "io_adapter_comm",
193 "io_device",
194 "io_device_dasd",
195 "io_external_general",
196 "io_external_workstation",
197 "io_storage_mezz",
198
199 "cec_hardware",
200 "cec_sp_a",
201 "cec_sp_b",
202 "cec_node_controller",
203 "cec_vpd",
204 "cec_i2c",
205 "cec_chip_iface",
206 "cec_clocks",
207 "cec_op_panel",
208 "cec_tod",
209 "cec_storage_device",
210 "cec_sp_hyp_iface",
211 "cec_service_network",
212 "cec_sp_hostboot_iface",
213
214 "power",
215 "power_supply",
216 "power_control_hw",
217 "power_fans",
218 "power_sequencer",
219
220 "others",
221 "other_hmc",
222 "other_test_tool",
223 "other_media",
224 "other_multiple_subsystems",
225 "other_na",
226 "other_info_src",
227
228 "surv_hyp_lost_sp",
229 "surv_sp_lost_hyp",
230 "surv_sp_lost_hmc",
231 "surv_hmc_lost_lpar",
232 "surv_hmc_lost_bpa",
233 "surv_hmc_lost_hmc",
234
235 "platform_firmware",
236 "bmc_firmware",
237 "hyp_firmware",
238 "partition_firmware",
239 "slic_firmware",
240 "spcn_firmware",
241 "bulk_power_firmware_side_a",
242 "hmc_code_firmware",
243 "bulk_power_firmware_side_b",
244 "virtual_sp",
245 "hostboot",
246 "occ",
247
248 "software",
249 "os_software",
250 "xpf_software",
251 "app_software",
252
253 "ext_env",
254 "input_power_source",
255 "ambient_temp",
256 "user_error",
257 "corrosion"
Matt Spinler10f3d932019-09-26 16:24:14 -0500258 ]
259 },
260
Patrick Williams26919f02022-12-08 06:12:43 -0600261 "possibleSubsystems": {
Matt Spinler23970b02022-02-25 16:34:46 -0600262 "description": "Required when the PEL creator uses PEL_SUBSYSTEM in the AdditionalData property to pass in the subsystem. Used by scripts that generate documentation to build all possible SRC ASCII strings for this error.",
263 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600264 "items": {
Matt Spinler23970b02022-02-25 16:34:46 -0600265 "$ref": "#/definitions/subsystem"
266 },
267 "minItems": 1,
268 "uniqueItems": true
269 },
270
Patrick Williams26919f02022-12-08 06:12:43 -0600271 "systemAndSeverity": {
Matt Spinler17952d92020-04-10 13:50:31 -0500272 "description": "A severity entry that has an optional system type qualifier. Used when the severity needs to be based on the system type.",
273 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -0600274 "properties": {
Matt Spinler17952d92020-04-10 13:50:31 -0500275 "System": { "$ref": "#/definitions/system" },
276 "SevValue": { "$ref": "#/definitions/severityTypes" }
277 },
278 "additionalProperties": false,
279 "required": ["SevValue"]
280 },
281
Patrick Williams26919f02022-12-08 06:12:43 -0600282 "severity": {
Matt Spinler17952d92020-04-10 13:50:31 -0500283 "description": "PEL severity field. Optional. If not provided, it will use the event log severity. It can either be an enum of the severity value, or an array of them that is based on system type, where an entry without a system type acts as the catch all.",
Patrick Williams26919f02022-12-08 06:12:43 -0600284 "oneOf": [
Matt Spinler17952d92020-04-10 13:50:31 -0500285 {
286 "$ref": "#/definitions/severityTypes"
287 },
288 {
289 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600290 "items": {
Matt Spinler17952d92020-04-10 13:50:31 -0500291 "$ref": "#/definitions/systemAndSeverity"
292 },
293 "minItems": 1,
294 "uniqueItems": true
295 }
296 ],
297
Patrick Williams26919f02022-12-08 06:12:43 -0600298 "examples": [
Matt Spinler17952d92020-04-10 13:50:31 -0500299 "unrecoverable",
300
301 [
302 {
303 "System": "systemA",
304 "SevValue": "predictive"
305 },
306 {
307 "SevValue": "unrecoverable"
308 }
309 ]
310 ]
Matt Spinler17952d92020-04-10 13:50:31 -0500311 },
312
Patrick Williams26919f02022-12-08 06:12:43 -0600313 "severityTypes": {
Matt Spinler17952d92020-04-10 13:50:31 -0500314 "description": "PEL severity enumeration. See the PEL spec for more detailed definitions.",
Matt Spinler10f3d932019-09-26 16:24:14 -0500315 "type": "string",
316
Patrick Williams26919f02022-12-08 06:12:43 -0600317 "enum": [
318 "non_error",
Matt Spinler10f3d932019-09-26 16:24:14 -0500319
Patrick Williams26919f02022-12-08 06:12:43 -0600320 "recovered",
Matt Spinler10f3d932019-09-26 16:24:14 -0500321
Patrick Williams26919f02022-12-08 06:12:43 -0600322 "predictive",
323 "predictive_degraded_perf",
324 "predictive_reboot",
325 "predictive_reboot_degraded",
326 "predictive_redundancy_loss",
Matt Spinler10f3d932019-09-26 16:24:14 -0500327
Patrick Williams26919f02022-12-08 06:12:43 -0600328 "unrecoverable",
329 "unrecoverable_degraded_perf",
330 "unrecoverable_redundancy_loss",
331 "unrecoverable_redundancy_loss_perf",
332 "unrecoverable_loss_of_function",
Matt Spinler10f3d932019-09-26 16:24:14 -0500333
Patrick Williams26919f02022-12-08 06:12:43 -0600334 "critical",
335 "critical_system_term",
336 "critical_imminent_failure",
337 "critical_partition_term",
338 "critical_partition_imminent_failure",
Matt Spinler10f3d932019-09-26 16:24:14 -0500339
Patrick Williams26919f02022-12-08 06:12:43 -0600340 "diagnostic_error",
341 "diagnostic_error_incorrect_results",
Matt Spinler10f3d932019-09-26 16:24:14 -0500342
Patrick Williams26919f02022-12-08 06:12:43 -0600343 "symptom_recovered",
344 "symptom_predictive",
345 "symptom_unrecoverable",
346 "symptom_critical",
347 "symptom_diag_err"
348 ]
Matt Spinler10f3d932019-09-26 16:24:14 -0500349 },
350
Patrick Williams26919f02022-12-08 06:12:43 -0600351 "mfgSeverity": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500352 "description": "The PEL severity to use in manufacturing reporting mode",
353 "$ref": "#/definitions/severity"
354 },
355
Patrick Williams26919f02022-12-08 06:12:43 -0600356 "eventScope": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500357 "description": "The event scope PEL field. Optional and defaults to entire_platform",
358 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600359 "enum": [
360 "entire_platform",
361 "single_partition",
362 "multiple_partitions",
363 "possibly_multiple_platforms"
364 ]
Matt Spinler10f3d932019-09-26 16:24:14 -0500365 },
366
Patrick Williams26919f02022-12-08 06:12:43 -0600367 "eventType": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500368 "description": "The event type PEL field. Optional and defaults to na",
369 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600370 "enum": [
371 "na",
372 "misc_information_only",
373 "tracing_event",
374 "dump_notification",
375 "env_normal"
376 ]
Matt Spinler10f3d932019-09-26 16:24:14 -0500377 },
378
Patrick Williams26919f02022-12-08 06:12:43 -0600379 "actionFlags": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500380 "description": "The action flags Private Header PEL field",
381 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600382 "items": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500383 "description": "List of action flags",
384 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600385 "enum": [
386 "service_action",
387 "hidden",
388 "report",
389 "dont_report",
390 "call_home",
391 "isolation_incomplete",
392 "termination"
393 ]
Matt Spinler10f3d932019-09-26 16:24:14 -0500394 }
395 },
396
Patrick Williams26919f02022-12-08 06:12:43 -0600397 "mfgActionFlags": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500398 "description": "The PEL action flags to use in manufacturing reporting mode",
399 "$ref": "#/definitions/actionFlags"
400 },
401
Patrick Williams26919f02022-12-08 06:12:43 -0600402 "docDescription": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500403 "description": "This is a higher level description of the error. It is required by the Redfish schema to generate a Redfish message entry, but is not used in Redfish or PEL output.",
Matt Spinler88b35412022-06-22 11:00:04 -0500404 "type": "string",
405 "minLength": 8
Matt Spinler10f3d932019-09-26 16:24:14 -0500406 },
407
Patrick Williams26919f02022-12-08 06:12:43 -0600408 "docMessage": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500409 "description": "The error message. This will show up in parsed PELs, and in the Redfish event logs. It can contain placeholders for numeric values using %1, %2, etc, that come from the SRC words 6-9 as defined by the MessageArgSources property.",
410 "type": "string",
Matt Spinler88b35412022-06-22 11:00:04 -0500411 "minLength": 8,
Matt Spinler10f3d932019-09-26 16:24:14 -0500412 "examples": [
Patrick Williams26919f02022-12-08 06:12:43 -0600413 { "Message": "The code update from level %1 to %2 failed" }
Matt Spinler10f3d932019-09-26 16:24:14 -0500414 ]
415 },
416
Patrick Williams26919f02022-12-08 06:12:43 -0600417 "docMessageArgSources": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500418 "description": "The SRC word 6-9 to use as the source of the numeric arguments that will be substituted into any placeholder in the Message field. Only required if there are arguments to substitute.",
419 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600420 "items": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500421 "type": "string",
422 "enum": ["SRCWord6", "SRCWord7", "SRCWord8", "SRCWord9"]
423 },
424 "additionalItems": false
425 },
426
Patrick Williams26919f02022-12-08 06:12:43 -0600427 "symptomID": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500428 "description": "Defines a custom Symptom ID, to be appended to the ASCII string word and separated by underscores. The maximum size of the Symptom ID field is 80 characters. The default is ASCIISTRING_SRCWord3 (e.g. B1103500_12345678).",
429 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600430 "items": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500431 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600432 "enum": [
433 "SRCWord3",
434 "SRCWord4",
435 "SRCWord5",
436 "SRCWord6",
437 "SRCWord7",
438 "SRCWord8",
439 "SRCWord9"
440 ]
Matt Spinler10f3d932019-09-26 16:24:14 -0500441 },
442 "minItems": 1,
443 "maxItems": 8,
444 "uniqueItems": true,
445
Patrick Williams26919f02022-12-08 06:12:43 -0600446 "examples": [["SRCWord3", "SRCWord6"]]
Matt Spinler10f3d932019-09-26 16:24:14 -0500447 },
448
Patrick Williams26919f02022-12-08 06:12:43 -0600449 "srcWords6To9": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500450 "description": "This details what the user defined SRC hex words (6-9) mean, and which AdditionalData properties to get them from. These will be shown in the PEL parser output. Must be present, but can be empty.",
451 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -0600452 "patternProperties": {
453 "^[6-9]$": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500454 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -0600455 "properties": {
456 "Description": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500457 "description": "What the value in the field represents.",
458 "type": "string"
459 },
Patrick Williams26919f02022-12-08 06:12:43 -0600460 "AdditionalDataPropSource": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500461 "description": "Which AdditionalData property key to get the data from.",
462 "type": "string"
463 }
464 },
465
466 "additionalProperties": false
467 },
468
Patrick Williams26919f02022-12-08 06:12:43 -0600469 "examples": {
470 "SRCWords6To9": {
471 "6": {
Matt Spinler10f3d932019-09-26 16:24:14 -0500472 "Description": "Failing PSU number",
473 "AdditionalDataPropSource": "PSU_NUM"
474 }
475 }
476 }
477 },
478 "additionalProperties": false
Matt Spinler9e819c72020-02-12 16:44:16 -0600479 },
Matt Spinler10f3d932019-09-26 16:24:14 -0500480
Patrick Williams26919f02022-12-08 06:12:43 -0600481 "adName": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600482 "description": "The name of the AdditionalData entry to use to index into the callout tables.",
483 "type": "string"
484 },
485
Patrick Williams26919f02022-12-08 06:12:43 -0600486 "adValue": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600487 "description": "The value for the AdditionalData entry specified by ADName that indexes into the callout tables.",
488 "type": "string"
489 },
490
Patrick Williams26919f02022-12-08 06:12:43 -0600491 "locationCode": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600492 "description": "A location code - the segment after the 'UTMS-' prefix. (e.g. P1-C2)",
493 "type": "string"
494 },
495
Patrick Williams26919f02022-12-08 06:12:43 -0600496 "priority": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600497 "description": "The callout priority. See the PEL spec for priority definitions.",
498 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600499 "enum": [
500 "high",
501 "medium",
502 "low",
503 "medium_group_a",
504 "medium_group_b",
505 "medium_group_c"
506 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600507 },
508
Patrick Williams26919f02022-12-08 06:12:43 -0600509 "symbolicFRU": {
Matt Spinlerd4086652020-04-08 15:36:22 -0500510 "description": "The symbolic FRU callout.",
Matt Spinler9e819c72020-02-12 16:44:16 -0600511 "type": "string",
Patrick Williams26919f02022-12-08 06:12:43 -0600512 "enum": [
513 "service_docs",
514 "pwrsply",
515 "air_mover",
516 "pgood_part",
517 "usb_pgood",
518 "ambient_temp",
519 "ambient_temp_back",
520 "ambient_perf_loss",
521 "ac_module",
522 "fan_cable",
523 "cable_continued",
524 "altitude",
525 "pcie_hot_plug",
Jim Wright9b779e42022-12-16 17:50:23 -0600526 "overtemp",
527 "memory_dimm"
Patrick Williams26919f02022-12-08 06:12:43 -0600528 ]
Matt Spinlerd4086652020-04-08 15:36:22 -0500529 },
530
Patrick Williams26919f02022-12-08 06:12:43 -0600531 "symbolicFRUTrusted": {
Matt Spinlerd4086652020-04-08 15:36:22 -0500532 "description": "The symbolic FRU callout with a trusted location code. (Can light LEDs).",
533 "ref": "#/definitions/symbolicFRU"
Matt Spinler9e819c72020-02-12 16:44:16 -0600534 },
535
Patrick Williams26919f02022-12-08 06:12:43 -0600536 "procedure": {
Matt Spinler2edce4e2024-01-17 11:13:51 -0600537 "description": "The maintenance procedure callout. List of available procedures is at https://github.com/ibm-openbmc/openpower-pel-parsers/blob/master/modules/calloutparsers/ocallouts/ocallouts.py ",
538 "type": "string"
Matt Spinler9e819c72020-02-12 16:44:16 -0600539 },
540
Patrick Williams26919f02022-12-08 06:12:43 -0600541 "useInventoryLocCode": {
Matt Spinlerf00f9d02020-10-23 09:14:22 -0500542 "description": "Used along with SymbolicFRUTrusted to specify that the location code to use with the symbolic FRU is to be taken from the passed in CALLOUT_INVENTORY_PATH callout rather than being specified with LocCode.",
543 "type": "boolean"
544 },
545
Patrick Williams26919f02022-12-08 06:12:43 -0600546 "calloutList": {
Matt Spinlerd4086652020-04-08 15:36:22 -0500547 "description": "The list of FRU callouts to add to a PEL. If just LocCode is specified, it is a normal hardware FRU callout. If Procedure is specified, it is a procedure callout. If SymbolicFRU or SymbolicFRUTrusted are specified, it is a Symbolic FRU callout. SymbolicFRUTrusted also requires LocCode.",
Matt Spinler9e819c72020-02-12 16:44:16 -0600548 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600549 "items": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600550 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -0600551 "properties": {
552 "Priority": { "$ref": "#/definitions/priority" },
553 "LocCode": { "$ref": "#/definitions/locationCode" },
554 "SymbolicFRU": { "$ref": "#/definitions/symbolicFRU" },
555 "SymbolicFRUTrusted": {
556 "$ref": "#/definitions/symbolicFRUTrusted"
557 },
558 "Procedure": { "$ref": "#/definitions/procedure" },
559 "UseInventoryLocCode": {
560 "$ref": "#/definitions/useInventoryLocCode"
561 }
Matt Spinler9e819c72020-02-12 16:44:16 -0600562 },
563 "additionalProperties": false,
564 "required": ["Priority"],
565
Patrick Williams26919f02022-12-08 06:12:43 -0600566 "oneOf": [
Matt Spinlerd4086652020-04-08 15:36:22 -0500567 {
Patrick Williams26919f02022-12-08 06:12:43 -0600568 "allOf": [
Matt Spinlerd4086652020-04-08 15:36:22 -0500569 { "required": ["LocCode"] },
Patrick Williams26919f02022-12-08 06:12:43 -0600570 { "not": { "required": ["SymbolicFRU"] } },
571 { "not": { "required": ["SymbolicFRUTrusted"] } },
572 { "not": { "required": ["Procedure"] } },
573 { "not": { "required": ["UseInventoryLocCode"] } }
Matt Spinlerd4086652020-04-08 15:36:22 -0500574 ]
575 },
576 {
Patrick Williams26919f02022-12-08 06:12:43 -0600577 "allOf": [
Matt Spinlerd4086652020-04-08 15:36:22 -0500578 { "required": ["SymbolicFRU"] },
Patrick Williams26919f02022-12-08 06:12:43 -0600579 { "not": { "required": ["SymbolicFRUTrusted"] } },
580 { "not": { "required": ["Procedure"] } },
581 { "not": { "required": ["UseInventoryLocCode"] } }
Matt Spinlerd4086652020-04-08 15:36:22 -0500582 ]
583 },
584
585 {
Patrick Williams26919f02022-12-08 06:12:43 -0600586 "allOf": [
Matt Spinlerf00f9d02020-10-23 09:14:22 -0500587 { "required": ["SymbolicFRUTrusted", "LocCode"] },
Patrick Williams26919f02022-12-08 06:12:43 -0600588 { "not": { "required": ["SymbolicFRU"] } },
589 { "not": { "required": ["Procedure"] } },
590 { "not": { "required": ["UseInventoryLocCode"] } }
Matt Spinlerf00f9d02020-10-23 09:14:22 -0500591 ]
592 },
593
594 {
Patrick Williams26919f02022-12-08 06:12:43 -0600595 "allOf": [
596 {
597 "required": [
598 "SymbolicFRUTrusted",
599 "UseInventoryLocCode"
600 ]
601 },
602 { "not": { "required": ["SymbolicFRU"] } },
603 { "not": { "required": ["Procedure"] } },
604 { "not": { "required": ["LocCode"] } }
Matt Spinlerd4086652020-04-08 15:36:22 -0500605 ]
606 },
607
608 {
Patrick Williams26919f02022-12-08 06:12:43 -0600609 "allOf": [
Matt Spinlerd4086652020-04-08 15:36:22 -0500610 { "required": ["Procedure"] },
Patrick Williams26919f02022-12-08 06:12:43 -0600611 { "not": { "required": ["SymbolicFRU"] } },
612 { "not": { "required": ["SymbolicFRUTrusted"] } },
613 { "not": { "required": ["LocCode"] } },
614 { "not": { "required": ["UseInventoryLocCode"] } }
Matt Spinlerd4086652020-04-08 15:36:22 -0500615 ]
616 }
617 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600618 },
619 "minItems": 1,
620 "maxItems": 10,
621
Patrick Williams26919f02022-12-08 06:12:43 -0600622 "examples": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600623 {
624 "Priority": "high",
625 "LocCode": "P1"
626 },
627 {
628 "Priority": "medium",
629 "LocCode": "P2",
630 "SymbolicFRU": "PROCFRU"
631 },
632 {
633 "Priority": "low",
634 "Procedure": "SVCDOCS"
635 }
636 ]
637 },
638
Patrick Williams26919f02022-12-08 06:12:43 -0600639 "system": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600640 "description": "The system type string, as specified by entity manger. It is used to index into different sections of the JSON.",
Matt Spinler17952d92020-04-10 13:50:31 -0500641 "type": "string",
642 "minLength": 1
Matt Spinler9e819c72020-02-12 16:44:16 -0600643 },
644
Patrick Williams26919f02022-12-08 06:12:43 -0600645 "callouts": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600646 "description": "This contains callouts that can vary based on system type. Each entry contains an optional System property and a required CalloutList property. If the System property is left out it indicates that the CalloutList callouts are valid for every system type, unless there is another Callouts entry that has a matching System property, in which case that entry is valid.",
647 "type": "array",
Patrick Williams26919f02022-12-08 06:12:43 -0600648 "items": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600649 "type": "object",
650
Patrick Williams26919f02022-12-08 06:12:43 -0600651 "properties": {
652 "System": { "$ref": "#/definitions/system" },
653 "CalloutList": { "$ref": "#/definitions/calloutList" }
Matt Spinler9e819c72020-02-12 16:44:16 -0600654 },
655 "required": ["CalloutList"],
656 "additionalProperties": false
657 },
658 "minItems": 1,
659 "maxItems": 10,
660
Patrick Williams26919f02022-12-08 06:12:43 -0600661 "examples": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600662 [
663 {
664 "System": "system1",
Patrick Williams26919f02022-12-08 06:12:43 -0600665 "CalloutList": [{ "Priority": "high", "LocCode": "P1" }]
Matt Spinler9e819c72020-02-12 16:44:16 -0600666 },
667 {
Patrick Williams26919f02022-12-08 06:12:43 -0600668 "CalloutList": [
669 { "Priority": "high", "Procedure": "NEXTLVL" }
670 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600671 }
672 ]
673 ]
674 },
675
Patrick Williams26919f02022-12-08 06:12:43 -0600676 "calloutsWithTheirADValues": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600677 "description": "This contains callouts along with the AdditionalData value used to select an entry into the callout list. The AdditionalData entry was specified by ADName in the CalloutsUsingAD parent entry.",
678 "type": "array",
679
Patrick Williams26919f02022-12-08 06:12:43 -0600680 "items": {
Matt Spinler9e819c72020-02-12 16:44:16 -0600681 "type": "object",
Patrick Williams26919f02022-12-08 06:12:43 -0600682 "properties": {
683 "ADValue": { "$ref": "#/definitions/adValue" },
684 "Callouts": { "$ref": "#/definitions/callouts" }
Matt Spinler9e819c72020-02-12 16:44:16 -0600685 },
686 "additionalProperties": false,
687 "required": ["ADValue", "Callouts"]
688 },
689 "minItems": 1,
Matt Spinler9e819c72020-02-12 16:44:16 -0600690
Patrick Williams26919f02022-12-08 06:12:43 -0600691 "examples": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600692 [
693 {
694 "ADValue": "0",
Patrick Williams26919f02022-12-08 06:12:43 -0600695 "Callouts": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600696 {
Patrick Williams26919f02022-12-08 06:12:43 -0600697 "CalloutList": [
698 { "Priority": "high", "LocCode": "P1" }
699 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600700 }
701 ]
702 },
703 {
704 "ADValue": "1",
Patrick Williams26919f02022-12-08 06:12:43 -0600705 "Callouts": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600706 {
Patrick Williams26919f02022-12-08 06:12:43 -0600707 "CalloutList": [
708 { "Priority": "high", "LocCode": "P2" }
709 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600710 }
711 ]
712 }
713 ]
714 ]
715 },
716
Patrick Williams26919f02022-12-08 06:12:43 -0600717 "calloutsUsingAD": {
Matt Spinler3d923312022-08-01 09:52:55 -0500718 "description": "This contains the callouts that can be specified based on a value in the AdditionalData property.",
Matt Spinler9e819c72020-02-12 16:44:16 -0600719 "type": "object",
720
Patrick Williams26919f02022-12-08 06:12:43 -0600721 "properties": {
722 "ADName": { "$ref": "#/definitions/adName" },
723 "CalloutsWithTheirADValues": {
724 "$ref": "#/definitions/calloutsWithTheirADValues"
725 },
726 "CalloutsWhenNoADMatch": {
727 "$ref": "#/definitions/calloutsWhenNoADMatch"
728 }
Matt Spinler9e819c72020-02-12 16:44:16 -0600729 },
730 "additionalProperties": false,
731 "required": ["ADName", "CalloutsWithTheirADValues"],
732
Patrick Williams26919f02022-12-08 06:12:43 -0600733 "examples": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600734 {
735 "ADName": "PROC_NUM",
Patrick Williams26919f02022-12-08 06:12:43 -0600736 "CalloutsWithTheirADValues": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600737 {
738 "ADValue": "0",
Patrick Williams26919f02022-12-08 06:12:43 -0600739 "Callouts": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600740 {
Patrick Williams26919f02022-12-08 06:12:43 -0600741 "CalloutList": [
742 { "Priority": "high", "LocCode": "P1" }
743 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600744 }
745 ]
746 },
747 {
748 "ADValue": "1",
Patrick Williams26919f02022-12-08 06:12:43 -0600749 "Callouts": [
Matt Spinler9e819c72020-02-12 16:44:16 -0600750 {
Patrick Williams26919f02022-12-08 06:12:43 -0600751 "CalloutList": [
752 { "Priority": "high", "LocCode": "P2" }
753 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600754 }
755 ]
756 }
757 ]
758 }
759 ]
Matt Spinler3d923312022-08-01 09:52:55 -0500760 },
761
Patrick Williams26919f02022-12-08 06:12:43 -0600762 "calloutsWhenNoADMatch": {
Matt Spinler3d923312022-08-01 09:52:55 -0500763 "description": "This contains the callouts to use when a match in the 'CalloutsWithTheirADValues array isn't found.",
764 "$ref": "#/definitions/callouts"
Matt Spinlerf22b4a12022-12-15 11:20:35 -0600765 },
766
767 "numLines": {
768 "description": "The number of lines of the journal to capture.",
769 "type": "integer",
770 "minimum": 1,
771 "maximum": 100
772 },
773
774 "syslogID": {
775 "description": "SYSLOG_IDENTIFIER value from the journal whose entries to capture.",
776 "type": "string",
777 "minLength": 1
778 },
779
780 "journalSection": {
781 "type": "object",
782 "properties": {
783 "SyslogID": { "$ref": "#/definitions/syslogID" },
784 "NumLines": { "$ref": "#/definitions/numLines" }
785 },
786 "additionalProperties": false,
787 "required": ["SyslogID", "NumLines"]
788 },
789
790 "journalSectionList": {
791 "description": "Describes which syslog IDs and how many journal lines to capture",
792 "type": "array",
793 "items": {
794 "$ref": "#/definitions/journalSection"
795 },
796 "minItems": 1,
797 "uniqueItems": true,
798 "examples": [
799 {
800 "Sections": [
801 {
802 "SyslogID": "phosphor-bmc-state-manager",
803 "NumLines": 20
804 }
805 ]
806 }
807 ]
808 },
809
810 "journalCapture": {
811 "description": "Allows a PEL to capture journal data in UserData sections.",
812 "type": "object",
813 "properties": {
814 "NumLines": { "$ref": "#/definitions/numLines" },
815 "Sections": { "$ref": "#/definitions/journalSectionList" }
816 },
817 "oneOf": [
818 {
819 "required": ["NumLines"]
820 },
821 {
822 "required": ["Sections"]
823 }
824 ],
825 "additionalProperties": false,
826 "examples": [
827 {
828 "JournalCapture": {
829 "NumLines": 30
830 }
831 },
832 {
833 "JournalCapture": {
834 "Sections": [
835 {
836 "SyslogID": "phosphor-bmc-state-manager",
837 "NumLines": 20
838 },
839 {
840 "SyslogID": "phosphor-log-manager",
841 "NumLines": 15
842 }
843 ]
844 }
845 }
846 ]
Matt Spinler9e819c72020-02-12 16:44:16 -0600847 }
Matt Spinler10f3d932019-09-26 16:24:14 -0500848 }
849}