Mbed OS Reference
Loading...
Searching...
No Matches
NanostackMemoryManager.h
1/* Copyright (c) 2017 ARM Limited
2 * SPDX-License-Identifier: Apache-2.0
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef NANOSTACK_MEMORY_MANAGER_H
18#define NANOSTACK_MEMORY_MANAGER_H
19
20#include "EMACMemoryManager.h"
21
23public:
24
25 /**
26 * Allocates memory buffer from the heap
27 *
28 * Memory buffer allocated from heap is always contiguous and can be arbitrary size.
29 *
30 * @param size Size of the memory to allocate in bytes
31 * @param align Memory alignment requirement in bytes
32 * @return Allocated memory buffer, or NULL in case of error
33 */
34 emac_mem_buf_t *alloc_heap(uint32_t size, uint32_t align) override;
35
36 /**
37 * Allocates memory buffer chain from a pool
38 *
39 * Memory allocated from pool is contiguous if size is equal or less than
40 * (aligned) allocation unit, otherwise may be chained. Will typically come from
41 * fixed-size packet pool memory.
42 *
43 * @param size Total size of the memory to allocate in bytes
44 * @param align Memory alignment requirement for each buffer in bytes
45 * @return Allocated memory buffer chain, or NULL in case of error
46 */
47 emac_mem_buf_t *alloc_pool(uint32_t size, uint32_t align) override;
48
49 /**
50 * Get memory buffer pool allocation unit
51 *
52 * Returns the maximum size of contiguous memory that can be allocated from a pool.
53 *
54 * @param align Memory alignment requirement in bytes
55 * @return Contiguous memory size
56 */
57 uint32_t get_pool_alloc_unit(uint32_t align) const override;
58
59 /**
60 * Free memory buffer chain
61 *
62 * If memory buffer is chained must point to the start of the chain. Frees all buffers
63 * from the chained list.
64 *
65 * @param buf Memory buffer chain to be freed.
66 */
67 void free(emac_mem_buf_t *buf) override;
68
69 /**
70 * Return total length of a memory buffer chain
71 *
72 * Returns a total length of this buffer and any following buffers in the chain.
73 *
74 * @param buf Memory buffer chain
75 * @return Total length in bytes
76 */
77 uint32_t get_total_len(const emac_mem_buf_t *buf) const override;
78
79 /**
80 * Copy a memory buffer chain
81 *
82 * Copies data from one buffer chain to another. Copy operation does not adjust the lengths
83 * of the copied-to memory buffer chain, so chain total lengths must be the same.
84 *
85 * @param to_buf Memory buffer chain to copy to
86 * @param from_buf Memory buffer chain to copy from
87 */
88 void copy(emac_mem_buf_t *to_buf, const emac_mem_buf_t *from_buf) override;
89
90
91
92 /**
93 * Concatenate two memory buffer chains
94 *
95 * Concatenates buffer chain to end of the other buffer chain. Concatenated-to buffer total length
96 * is adjusted accordingly. cat_buf must point to the start of a the chain. After concatenation
97 * to_buf's chain now owns those buffers, and they will be freed when the to_buf chain is freed.
98 *
99 * @param to_buf Memory buffer chain to concatenate to
100 * @param cat_buf Memory buffer chain to concatenate
101 */
102 void cat(emac_mem_buf_t *to_buf, emac_mem_buf_t *cat_buf) override;
103
104 /**
105 * Returns the next buffer
106 *
107 * Returns the next buffer from the memory buffer chain.
108 *
109 * @param buf Memory buffer
110 * @return The next memory buffer, or NULL if last
111 */
112 emac_mem_buf_t *get_next(const emac_mem_buf_t *buf) const override;
113
114 /**
115 * Return pointer to the payload of the buffer
116 *
117 * @param buf Memory buffer
118 * @return Pointer to the payload
119 */
120 void *get_ptr(const emac_mem_buf_t *buf) const override;
121
122 /**
123 * Return payload size of the buffer
124 *
125 * @param buf Memory buffer
126 * @return Size in bytes
127 */
128 uint32_t get_len(const emac_mem_buf_t *buf) const override;
129
130 /**
131 * Sets the payload size of the buffer
132 *
133 * The allocated payload size will not change. It is not permitted
134 * to change the length of a buffer that is not the first (or only) in a chain.
135 *
136 * @param buf Memory buffer
137 * @param len Payload size, must be less or equal allocated size
138 */
139 void set_len(emac_mem_buf_t *buf, uint32_t len) override;
140};
141
142#endif /* NANOSTACK_MEMORY_MANAGER_H */
void set_len(emac_mem_buf_t *buf, uint32_t len) override
Sets the payload size of the buffer.
uint32_t get_pool_alloc_unit(uint32_t align) const override
Get memory buffer pool allocation unit.
emac_mem_buf_t * get_next(const emac_mem_buf_t *buf) const override
Returns the next buffer.
void * get_ptr(const emac_mem_buf_t *buf) const override
Return pointer to the payload of the buffer.
void free(emac_mem_buf_t *buf) override
Free memory buffer chain.
emac_mem_buf_t * alloc_heap(uint32_t size, uint32_t align) override
Allocates memory buffer from the heap.
uint32_t get_total_len(const emac_mem_buf_t *buf) const override
Return total length of a memory buffer chain.
uint32_t get_len(const emac_mem_buf_t *buf) const override
Return payload size of the buffer.
emac_mem_buf_t * alloc_pool(uint32_t size, uint32_t align) override
Allocates memory buffer chain from a pool.
void copy(emac_mem_buf_t *to_buf, const emac_mem_buf_t *from_buf) override
Copy a memory buffer chain.
void cat(emac_mem_buf_t *to_buf, emac_mem_buf_t *cat_buf) override
Concatenate two memory buffer chains.