diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-07-02 15:36:20 +1000 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-07-02 15:36:20 +1000 |
commit | 1d880992fd8c8457a2d990ac6622cfd58fb1b261 (patch) | |
tree | c4c843b12e96b5612c315db5a23c5da1a900618c /include/opal-internal.h | |
download | skiboot-1d880992fd8c8457a2d990ac6622cfd58fb1b261.zip skiboot-1d880992fd8c8457a2d990ac6622cfd58fb1b261.tar.gz skiboot-1d880992fd8c8457a2d990ac6622cfd58fb1b261.tar.bz2 |
Initial commit of Open Source release
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'include/opal-internal.h')
-rw-r--r-- | include/opal-internal.h | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/include/opal-internal.h b/include/opal-internal.h new file mode 100644 index 0000000..0330b28 --- /dev/null +++ b/include/opal-internal.h @@ -0,0 +1,234 @@ +/* Copyright 2013-2014 IBM Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @file opal-internal.h + * @brief OPAL related internal definitions + * + */ + +#ifndef __OPAL_INTERNAL_H +#define __OPAL_INTERNAL_H + +#include <skiboot.h> + +struct opal_table_entry { + void *func; + uint32_t token; + uint32_t nargs; +}; + +#define opal_call(__tok, __func, __nargs) \ +static struct opal_table_entry __e_##__func __used __section(".opal_table") = \ +{ .func = __func, .token = __tok, \ + .nargs = __nargs + 0 * sizeof(__func( __test_args##__nargs )) } + +/* Make sure function takes args they claim. Look away now... */ +#define __test_args0 +#define __test_args1 0 +#define __test_args2 0,0 +#define __test_args3 0,0,0 +#define __test_args4 0,0,0,0 +#define __test_args5 0,0,0,0,0 +#define __test_args6 0,0,0,0,0,0 +#define __test_args7 0,0,0,0,0,0,0 + +extern struct opal_table_entry __opal_table_start[]; +extern struct opal_table_entry __opal_table_end[]; + +extern uint64_t opal_pending_events; + +extern struct dt_node *opal_node; + +extern void opal_table_init(void); +extern void opal_update_pending_evt(uint64_t evt_mask, uint64_t evt_values); +extern void add_opal_node(void); + +#define opal_register(token, func, nargs) \ + __opal_reister((token) + 0*sizeof(func(__test_args##nargs)), \ + (func), (nargs)) +extern void __opal_register(uint64_t token, void *func, unsigned num_args); + +/** @defgroup POLLER Poller + * Warning: no locking at the moment, do at init time only + * XXX TODO: Add the big RCU-ish "opal API lock" to protect us here + * which will also be used for other things such as runtime updates + * @ingroup OPAL_INTERNAL POLLER + * @{ */ +/** Function Doc */ +extern void opal_add_poller(void (*poller)(void *data), void *data); +/** Function Doc */ +extern void opal_del_poller(void (*poller)(void *data)); +/** @} */ + +/** @defgroup NOTIFIER Host Sync Notifier + * Warning: no locking, only call that from the init processor + * @ingroup OPAL_INTERNAL NOTIFIER + * @{ */ +/** Function Doc */ +extern void opal_add_host_sync_notifier(bool (*notify)(void *data), void *data); +/** Function Doc */ +extern void opal_del_host_sync_notifier(bool (*notify)(void *data)); +/** @} */ + + +/** @ingroup OPAL_INTERNAL + * @defgroup ERR_TYPE Classification of error/events type reported on OPAL + * OPAL error/event type classification + * @ingroup OPAL_INTERNAL ERR_TYPE + * @{ */ +/** Platform Events/Errors: Report Machine Check Interrupt */ +#define OPAL_PLATFORM_ERR_EVT 0x01 +/** INPUT_OUTPUT: Report all I/O related events/errors */ +#define OPAL_INPUT_OUTPUT_ERR_EVT 0x02 +/** RESOURCE_DEALLOC: Hotplug events and errors */ +#define OPAL_RESOURCE_DEALLOC_ERR_EVT 0x03 +/** MISC: Miscellanous error */ +#define OPAL_MISC_ERR_EVT 0x04 +/** @} */ + +/** + * @ingroup OPAL_INTERNAL + * @defgroup ERR_ID OPAL Subsystem IDs listed for reporting events/errors + * @ingroup ERR_ID OPAL_INTERNAL + * @{ */ +#define OPAL_PROCESSOR_SUBSYSTEM 0x10 +#define OPAL_MEMORY_SUBSYSTEM 0x20 +#define OPAL_IO_SUBSYSTEM 0x30 +#define OPAL_IO_DEVICES 0x40 +#define OPAL_CEC_HARDWARE 0x50 +#define OPAL_POWER_COOLING 0x60 +#define OPAL_MISC_SUBSYSTEM 0x70 +#define OPAL_SURVEILLANCE_ERR 0x7A +#define OPAL_PLATFORM_FIRMWARE 0x80 +#define OPAL_SOFTWARE 0x90 +#define OPAL_EXTERNAL_ENV 0xA0 +/** @} */ + +/** + * @ingroup OPAL_INTERNAL + * @defgroup ERR_SEV OPAL Error Severity + * During reporting an event/error the following represents how + * serious the logged event/error is. (Severity) + * @ingroup OPAL_INTERNAL ERR_SEV + * @{ */ +#define OPAL_INFO 0x00 +#define OPAL_RECOVERED_ERR_GENERAL 0x10 +/** @} */ + +/** + * @ingroup ERR_SEV OPAL_INTERNAL + * @defgroup ERR_SEV_2 Predictive Error defines + * @ingroup ERR_SEV_2 ERR_SEV OPAL_INTERNAL + * @{ */ +/** 0x20 Generic predictive error */ +#define OPAL_PREDICTIVE_ERR_GENERAL 0x20 +/** 0x21 Predictive error, degraded performance */ +#define OPAL_PREDICTIVE_ERR_DEGRADED_PERF 0x21 +/** 0x22 Predictive error, fault may be corrected after reboot */ +#define OPAL_PREDICTIVE_ERR_FAULT_RECTIFY_REBOOT 0x22 +/** + * 0x23 Predictive error, fault may be corrected after reboot, + * degraded performance + */ +#define OPAL_PREDICTIVE_ERR_FAULT_RECTIFY_BOOT_DEGRADE_PERF 0x23 +/** 0x24 Predictive error, loss of redundancy */ +#define OPAL_PREDICTIVE_ERR_LOSS_OF_REDUNDANCY 0x24 +/** @} */ + +/** @ingroup ERR_SEV OPAL_INTERNAL + * @defgroup ERR_SEV_4 Unrecoverable Error defines + * @ingroup ERR_SEV_4 ERR_SEV OPAL_INTERNAL + * @{ */ +/** 0x40 Generic Unrecoverable error */ +#define OPAL_UNRECOVERABLE_ERR_GENERAL 0x40 +/** 0x41 Unrecoverable error bypassed with degraded performance */ +#define OPAL_UNRECOVERABLE_ERR_DEGRADE_PERF 0x41 +/** 0x44 Unrecoverable error bypassed with loss of redundancy */ +#define OPAL_UNRECOVERABLE_ERR_LOSS_REDUNDANCY 0x44 +/** 0x45 Unrecoverable error bypassed with loss of redundancy and performance */ +#define OPAL_UNRECOVERABLE_ERR_LOSS_REDUNDANCY_PERF 0x45 +/** 0x48 Unrecoverable error bypassed with loss of function */ +#define OPAL_UNRECOVERABLE_ERR_LOSS_OF_FUNCTION 0x48 +/** 0x50 In case of PANIC */ +#define OPAL_ERROR_PANIC 0x50 +/** @} */ + +/** + * @ingroup OPAL_INTERNAL + * @defgroup OPAL_EVENT_SUB_TYPE Event Sub-Type + * This field provides additional information on the non-error + * event type + * @ingroup OPAL_EVENT_SUB_TYPE OPAL_INTERNAL + * @{ */ +#define OPAL_NA 0x00 +#define OPAL_MISCELLANEOUS_INFO_ONLY 0x01 +#define OPAL_PREV_REPORTED_ERR_RECTIFIED 0x10 +#define OPAL_SYS_RESOURCES_DECONFIG_BY_USER 0x20 +#define OPAL_SYS_RESOURCE_DECONFIG_PRIOR_ERR 0x21 +#define OPAL_RESOURCE_DEALLOC_EVENT_NOTIFY 0x22 +#define OPAL_CONCURRENT_MAINTENANCE_EVENT 0x40 +#define OPAL_CAPACITY_UPGRADE_EVENT 0x60 +#define OPAL_RESOURCE_SPARING_EVENT 0x70 +#define OPAL_DYNAMIC_RECONFIG_EVENT 0x80 +#define OPAL_NORMAL_SYS_PLATFORM_SHUTDOWN 0xD0 +#define OPAL_ABNORMAL_POWER_OFF 0xE0 +/** @} */ + +/** @ingroup OPAL_INTERNAL + * Max user dump size is 14K */ +#define OPAL_LOG_MAX_DUMP 14336 + +/** + * @struct opal_user_data_section + * @ingroup OPAL_INTERNAL + * Multiple user data sections + */ +struct opal_user_data_section { + uint32_t tag; + uint16_t size; + uint16_t component_id; + char data_dump[1]; +} __attribute__((__packed__)); + +/** + * @struct opal_errorlog + * @ingroup OPAL_INTERNAL + * All the information regarding an error/event to be reported + * needs to populate this structure using pre-defined interfaces + * only + */ +struct opal_errorlog { + + uint16_t component_id; + uint8_t error_event_type; + uint8_t subsystem_id; + + uint8_t event_severity; + uint8_t event_subtype; + uint8_t user_section_count; + uint8_t elog_origin; + + uint32_t user_section_size; + uint32_t reason_code; + uint32_t additional_info[4]; + + char user_data_dump[OPAL_LOG_MAX_DUMP]; + struct list_node link; +} __attribute__((__packed__)); + +#endif /* __ASSEMBLY__ */ + +#endif /* __OPAL_INTERNAL_H */ |