blob: dc24566a9054eeadf792791836a54151bdbaba3a [file] [log] [blame]
/*
* 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_ */