1 /*
2  * Copyright (c) 2024 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <internal/nrfs_backend.h>
8 #include <internal/nrfs_callbacks.h>
9 #include <nrfs_mram.h>
10 
11 typedef struct {
12 	nrfs_mram_latency_evt_handler_t handler;
13 	bool is_initialized;
14 } nrfs_mram_cb_t;
15 static nrfs_mram_cb_t m_cb;
16 
nrfs_mram_init(nrfs_mram_latency_evt_handler_t handler)17 nrfs_err_t nrfs_mram_init(nrfs_mram_latency_evt_handler_t handler)
18 {
19 	if (m_cb.is_initialized) {
20 		return NRFS_ERR_INVALID_STATE;
21 	}
22 
23 	m_cb.handler	    = handler;
24 	m_cb.is_initialized = true;
25 	return NRFS_SUCCESS;
26 }
27 
nrfs_mram_uninit(void)28 void nrfs_mram_uninit(void)
29 {
30 	m_cb.is_initialized = false;
31 }
32 
nrfs_mram_set_latency(mram_latency_request_t mram_latency_request,void * p_context)33 nrfs_err_t nrfs_mram_set_latency(mram_latency_request_t mram_latency_request, void *p_context)
34 {
35 	if (!m_cb.is_initialized) {
36 		return NRFS_ERR_INVALID_STATE;
37 	}
38 
39 	nrfs_mram_set_latency_t req;
40 
41 	NRFS_SERVICE_HDR_FILL(&req, NRFS_MRAM_REQ_SET_LATENCY);
42 	req.ctx.ctx		      = (uint32_t)p_context;
43 	req.data.mram_latency_request = mram_latency_request;
44 	return nrfs_backend_send(&req, sizeof(req));
45 }
46 
nrfs_mram_service_notify(void * p_notification,size_t size)47 void nrfs_mram_service_notify(void *p_notification, size_t size)
48 {
49 	if (!m_cb.handler || !m_cb.is_initialized) {
50 		return;
51 	}
52 
53 	nrfs_mram_latency_evt_t evt;
54 	nrfs_generic_t *p_data = (nrfs_generic_t *)p_notification;
55 	if (NRFS_HDR_FILTER_ERR_GET(&p_data->hdr)) {
56 		evt.type = NRFS_MRAM_LATENCY_REQ_REJECTED;
57 		m_cb.handler(&evt, (void *)p_data->ctx.ctx);
58 		return;
59 	}
60 
61 	switch (p_data->hdr.req) {
62 	case NRFS_MRAM_REQ_SET_LATENCY: /*  sent only as a response to
63 					the request MRAM_LATENCY_NOT_ALLOWED */
64 		evt.type = NRFS_MRAM_LATENCY_REQ_APPLIED;
65 		m_cb.handler(&evt, (void *)p_data->ctx.ctx);
66 		break;
67 
68 	default:
69 		break;
70 	}
71 }
72