.. _OPAL_ELOG: OPAL_ELOG: Error logging ======================== OPAL provides an abstraction to platform specific methods of storing and retrieving error logs. Some service processors may be able to store information in the Platform Error Log (PEL) format. These may be generated at runtime by the service processor or OPAL in reaction to certain events. For example, an IPL failure could be recorded in an error log, as could the reason and details of an unexpected shut-down/reboot (e.g. hard thermal limits, check-stop). There are five OPAL calls from host to OPAL on error log: .. code-block:: c #define OPAL_ELOG_READ 71 #define OPAL_ELOG_WRITE 72 #define OPAL_ELOG_ACK 73 #define OPAL_ELOG_RESEND 74 #define OPAL_ELOG_SIZE 75 Note: :ref:`OPAL_ELOG_WRITE` (72) Unused for now, might be supported in the future. Not all platforms support these calls, so it's important for a host Operating System to use the :ref:`OPAL_CHECK_TOKEN` call first. If :ref:`OPAL_ELOG_READ`, :ref:`OPAL_ELOG_ACK`, :ref:`OPAL_ELOG_RESEND`, or :ref:`OPAL_ELOG_SIZE` is present, then the rest of that group is also present. The presence of :ref:`OPAL_ELOG_WRITE` must be checked separately. **TODO**: we need a good explanation of the notification mechanism and in what order and *when* to call each of the OPAL APIs. .. _OPAL_ELOG_READ: OPAL_ELOG_READ -------------- The :ref:`OPAL_ELOG_READ` call will copy the error log identified by ``id`` into the ``buffer`` of size ``size``. ``OPAL_ELOG_READ`` accepts 3 parameters: :: uint64_t *elog_buffer uint64_t elog_size uint64_t elog_id Returns: :ref:`OPAL_WRONG_STATE` When there are no error logs to read, or ``OPAL_ELOG`` calls are done in the wrong order. :ref:`OPAL_PARAMETER` The ``id`` does not match the log id that is available. :ref:`OPAL_SUCCESS` Error log is copied to ``buffer``. Other generic OPAL error codes may also be returned and should be treated like :ref:`OPAL_INTERNAL_ERROR`. .. _OPAL_ELOG_ACK: OPAL_ELOG_ACK ------------- Acknowledging (ACKing) an error log tells OPAL and the service processor that the host operating system has dealt with the error log successfully. This allows OPAL and the service processor to delete the error log from their memory/storage. :ref:`OPAL_ELOG_ACK` accepts 1 parameter: :: uint64_t ack_id Returns: :ref:`OPAL_INTERNAL_ERROR` OPAL failed to send acknowledgement to the error log creator. :ref:`OPAL_SUCCESS` Success! Other generic OPAL error codes may also be returned, and should be treated like :ref:`OPAL_INTERNAL_ERROR`. .. _OPAL_ELOG_RESEND: OPAL_ELOG_RESEND ---------------- The :ref:`OPAL_ELOG_RESEND` call will cause OPAL to resend notification to the host operating system of all outstanding error logs. This is commonly used (although doesn't have to be) in a kexec scenario. The call registered with this token accepts no parameter and returns type is void. .. _OPAL_ELOG_SIZE: OPAL_ELOG_SIZE -------------- The :ref:`OPAL_ELOG_SIZE` call retrieves information about an error log. Here, ``type`` specifies error log format. Supported types are : :: 0 -> Platform Error Log :ref:`OPAL_ELOG_SIZE` accepts 3 parameters: :: uint64_t *elog_id uint64_t *elog_size uint64_t *elog_type Returns: :ref:`OPAL_WRONG_STATE` There is no error log to fetch information about. :ref:`OPAL_SUCCESS` Success. Other general OPAL errors may be returned.