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

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.