1 /*
2 * Copyright (c) 2020 - 2023, Nordic Semiconductor ASA
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
18 * contributors may be used to endorse or promote products derived from this
19 * software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 *
33 */
34
35 /**@file nrf_802154_buffer_mgr_src.c
36 * @brief Buffer management on source side of a buffer of a nRF 802.15.4 serialization.
37 *
38 * @note Implementation valid for 32-bit architectures only
39 */
40
41 #include "nrf_802154_buffer_mgr_src.h"
42
43 #include <assert.h>
44
nrf_802154_buffer_mgr_src_init(nrf_802154_buffer_mgr_src_t * p_obj,void * p_map_memory,size_t buffers_count)45 void nrf_802154_buffer_mgr_src_init(
46 nrf_802154_buffer_mgr_src_t * p_obj,
47 void * p_map_memory,
48 size_t buffers_count)
49 {
50 /* Implementation is for 32-bit architectures only
51 * When this is not true we need mapping uint32->void*
52 * When this is true only presence of buffer handle can be checked */
53 assert(sizeof(void *) == sizeof(uint32_t) );
54
55 nrf_802154_kvmap_init(&p_obj->map,
56 p_map_memory,
57 NRF_802154_BUFFER_MGR_SRC_MAP_MEMSIZE(buffers_count),
58 sizeof(uint32_t),
59 0U);
60 }
61
nrf_802154_buffer_mgr_src_add(nrf_802154_buffer_mgr_src_t * p_obj,const void * p_buffer,uint32_t * p_buffer_handle)62 bool nrf_802154_buffer_mgr_src_add(
63 nrf_802154_buffer_mgr_src_t * p_obj,
64 const void * p_buffer,
65 uint32_t * p_buffer_handle)
66 {
67 bool result;
68 uint32_t buffer_handle = (uintptr_t)p_buffer;
69
70 result = nrf_802154_kvmap_add(&p_obj->map, &buffer_handle, NULL);
71 if (result)
72 {
73 *p_buffer_handle = buffer_handle;
74 }
75
76 return result;
77 }
78
nrf_802154_buffer_mgr_src_search_by_buffer_handle(nrf_802154_buffer_mgr_src_t * p_obj,uint32_t buffer_handle,void ** pp_buffer)79 bool nrf_802154_buffer_mgr_src_search_by_buffer_handle(
80 nrf_802154_buffer_mgr_src_t * p_obj,
81 uint32_t buffer_handle,
82 void ** pp_buffer)
83 {
84 bool result = false;
85
86 if (nrf_802154_kvmap_search(&p_obj->map, &buffer_handle, NULL))
87 {
88 *pp_buffer = (void *)buffer_handle;
89 result = true;
90 }
91 return result;
92 }
93
nrf_802154_buffer_mgr_src_remove_by_buffer_handle(nrf_802154_buffer_mgr_src_t * p_obj,uint32_t buffer_handle)94 bool nrf_802154_buffer_mgr_src_remove_by_buffer_handle(
95 nrf_802154_buffer_mgr_src_t * p_obj,
96 uint32_t buffer_handle)
97 {
98 return nrf_802154_kvmap_remove(&p_obj->map, &buffer_handle);
99 }
100