| /* |
| * Copyright (c) 2024 Nordic Semiconductor ASA |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * nRF SoC specific public APIs for MRAM latency management |
| * @brief Experimental. It will be replaced by the PM latency policy API in the future. |
| */ |
| |
| #ifndef SOC_NORDIC_COMMON_MRAM_LATENCY_H_ |
| #define SOC_NORDIC_COMMON_MRAM_LATENCY_H_ |
| |
| #include <zephyr/sys/onoff.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** @internal For test purposes only. */ |
| extern struct onoff_manager mram_latency_mgr; |
| |
| /** @brief Request MRAM operations without latency. |
| * |
| * The return value indicates the success or failure of an attempt to initiate |
| * an operation to request the MRAM low latency. If initiation of the |
| * operation succeeds, the result of the request operation is provided through |
| * the configured client notification method, possibly before this call returns. |
| * |
| * @param cli pointer to client state providing instructions on synchronous |
| * expectations and how to notify the client when the request |
| * completes. Behavior is undefined if client passes a pointer |
| * object associated with an incomplete service operation. |
| * |
| * @retval non-negative the observed state of the on-off service associated |
| * with the MRAM latency service. |
| * @retval -EIO if MRAM latency service returned error. |
| * @retval -EINVAL if the parameters are invalid. |
| * @retval -EAGAIN if the reference count would overflow. |
| */ |
| int mram_no_latency_request(struct onoff_client *cli); |
| |
| /** @brief Request MRAM operations without latency. |
| * |
| * Request is synchronous and blocks until it is completed. It can be called only |
| * from the thread context and cannot be called in the pre kernel stage. |
| * |
| * @retval 0 on successful request. |
| * @retval -EIO if MRAM latency service returned error. |
| * @retval -EAGAIN if request was not completed on time. |
| */ |
| int mram_no_latency_sync_request(void); |
| |
| /** |
| * @brief Safely cancel a request for MRAM operations without latency. |
| * |
| * It may be that a client has issued a reservation request but needs to |
| * shut down before the request has completed. This function attempts to |
| * cancel the request and issues a release if cancellation fails because |
| * the request was completed. This synchronously ensures that ownership |
| * data reverts to the client so is available for a future request. |
| * |
| * @param cli a pointer to the same client state that was provided |
| * when the operation to be cancelled was issued. |
| * |
| * @retval ONOFF_STATE_TO_ON if the cancellation occurred before the transition |
| * completed. |
| * @retval ONOFF_STATE_ON if the cancellation occurred after the transition |
| * completed. |
| * @retval -EINVAL if the parameters are invalid. |
| * @retval -EIO if MRAM latency service returned error. |
| * @retval negative other errors produced by onoff_release(). |
| */ |
| int mram_no_latency_cancel_or_release(struct onoff_client *cli); |
| |
| /** |
| * @brief Release a request for MRAM operations without latency. |
| * |
| * It should match with a completed @ref mram_no_latency_sync_request call. |
| * |
| * @retval 0 on successful request. |
| * @retval -EIO if MRAM latency service returned error. |
| */ |
| int mram_no_latency_sync_release(void); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* SOC_NORDIC_COMMON_MRAM_LATENCY_H_ */ |