1 /*
2  * Copyright (c) 2024 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef NRFS_MRAM_H
8 #define NRFS_MRAM_H
9 
10 #include <internal/services/nrfs_mram.h>
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /** @brief MRAM latency service response notification types. */
17 typedef enum __NRFS_PACKED {
18 	NRFS_MRAM_LATENCY_REQ_APPLIED,	/** sent only as a response to
19                                             the request MRAM_LATENCY_NOT_ALLOWED */
20 	NRFS_MRAM_LATENCY_REQ_REJECTED, /** Request rejected. */
21 } nrfs_mram_latency_evt_type_t;
22 
23 /** @brief MRAM latency service response data structure. */
24 typedef struct {
25 	nrfs_mram_latency_evt_type_t type;
26 } nrfs_mram_latency_evt_t;
27 
28 /** @brief MRAM latency event handler type. */
29 typedef void (*nrfs_mram_latency_evt_handler_t)(nrfs_mram_latency_evt_t const * p_evt,
30 						void * context);
31 
32 /**
33  * @brief Function for initializing the MRAM latency service.
34  *
35  * @param[in] handler             Function called as a response to the request.
36  *
37  * @retval NRFS_SUCCESS           Service initialized successfully.
38  * @retval NRFS_ERR_INVALID_STATE Service was already initialized.
39  */
40 nrfs_err_t nrfs_mram_init(nrfs_mram_latency_evt_handler_t handler);
41 
42 /**
43  * @brief Function for uninitializing the MRAM latency service.
44  *
45  * @warning Notifications from previous requests are dropped after service uninitialization.
46  */
47 void nrfs_mram_uninit(void);
48 
49 /**
50  * @brief Function for requesting a new acceptable MRAM latency.
51  *
52  * @param[in] mram_latency_request Enum value:  MRAM_LATENCY_ALLOWED
53                                                 MRAM_LATENCY_NOT_ALLOWED
54  * @param[in] p_context Opaque user data that will be passed to registered callback.
55  *
56  * @retval NRFS_SUCCESS           Request sent successfully.
57  * @retval NRFS_ERR_INVALID_STATE Service is uninitialized.
58  * @retval NRFS_ERR_IPC           Backend returned error during request sending.
59  */
60 nrfs_err_t nrfs_mram_set_latency(mram_latency_request_t mram_latency_request, void * p_context);
61 
62 #ifdef __cplusplus
63 }
64 #endif
65 
66 #endif /* NRFS_MRAM_H */
67