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)17nrfs_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)28void 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)33nrfs_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)47void 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