========================================= OPAL Timed Power On and Delayed Power Off ========================================= .. code-block:: c #define OPAL_WRITE_TPO 103 #define OPAL_READ_TPO 104 #define OPAL_GET_DPO_STATUS 105 TPO is a Timed Power On facility, and DPO is Delayed Power Off. It is an OPTIONAL part of the OPAL spec. If a platform supports Timed Power On (TPO), the RTC node in the device tree (itself under the "ibm,opal" node will have the has-tpo property: .. code-block:: dts rtc { compatible = "ibm,opal-rtc"; has-tpo; }; If the "has-tpo" proprety is *NOT* present then OPAL does *NOT* support TPO. .. _OPAL_READ_TPO: OPAL_READ_TPO ============= .. code-block:: c #define OPAL_READ_TPO 104 static int64_t opal_read_tpo(uint64_t async_token, uint32_t *y_m_d, uint32_t *hr_min); .. _OPAL_WRITE_TPO: OPAL_WRITE_TPO ============== .. code-block:: c #define OPAL_WRITE_TPO 103 int64_t fsp_opal_tpo_write(uint64_t async_token, uint32_t y_m_d, uint32_t hr_min); .. _OPAL_GET_DPO_STATUS: OPAL_GET_DPO_STATUS =================== .. code-block:: c #define OPAL_GET_DPO_STATUS 105 static int64_t opal_get_dpo_status(int64_t *dpo_timeout); A :ref:`OPAL_MSG_DPO` message may be sent to indicate that there will shortly be a forced system shutdown. In this case, an OS can call :ref:`OPAL_GET_DPO_STATUS` to find out how many seconds it has before power is cut to the system. This call could be present on systems where the service processor is integrated with a UPS or similar. Returns zero if Delayed Power Off is not active, positive value indicating number of seconds remaining for a forced system shutdown. This will enable the host to schedule for shutdown voluntarily before timeout occurs. Returns ------- :ref:`OPAL_SUCCESS` ``dpo_timeout`` is set to the number of seconds remaining before power is cut. :ref:`OPAL_WRONG_STATE` A Delayed Power Off is not pending, ``dpo_timeout`` is set to zero.