FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
physmem_funcs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cisco and/or its affiliates.
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  * physmem.h: virtual <-> physical memory mapping for VLIB buffers
17  *
18  * Copyright (c) 2008 Eliot Dresselhaus
19  *
20  * Permission is hereby granted, free of charge, to any person obtaining
21  * a copy of this software and associated documentation files (the
22  * "Software"), to deal in the Software without restriction, including
23  * without limitation the rights to use, copy, modify, merge, publish,
24  * distribute, sublicense, and/or sell copies of the Software, and to
25  * permit persons to whom the Software is furnished to do so, subject to
26  * the following conditions:
27  *
28  * The above copyright notice and this permission notice shall be
29  * included in all copies or substantial portions of the Software.
30  *
31  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38  */
39 
40 #ifndef included_vlib_physmem_funcs_h
41 #define included_vlib_physmem_funcs_h
42 
43 #include <vppinfra/clib.h>
44 #include <vppinfra/clib_error.h>
45 #include <vlib/physmem.h>
46 #include <vlib/main.h>
47 
50  uword size, u32 log2_page_sz,
51  u32 numa_node, u32 * map_index);
52 
54 
55 always_inline void *
57 {
59  return clib_pmalloc_alloc_aligned (pm, n_bytes, alignment);
60 }
61 
62 always_inline void *
64  uword alignment, u32 numa_node)
65 {
67  return clib_pmalloc_alloc_aligned_on_numa (pm, n_bytes, alignment,
68  numa_node);
69 }
70 
71 /* By default allocate I/O memory with cache line alignment. */
72 always_inline void *
74 {
76 }
77 
78 always_inline void *
80  uword n_bytes, uword alignment)
81 {
83  vlib_physmem_map_t *map = vlib_physmem_get_map (vm, physmem_map_index);
84  return clib_pmalloc_alloc_from_arena (pm, map->base, n_bytes,
86 }
87 
88 always_inline void
90 {
91  if (p)
93 }
94 
97 {
99  return clib_pmalloc_get_page_index (pm, mem);
100 }
101 
104 {
106  return clib_pmalloc_get_pa (pm, mem);
107 }
108 
111 {
113  return pm->error;
114 }
115 
116 #endif /* included_vlib_physmem_funcs_h */
117 
118 /*
119  * fd.io coding-style-patch-verification: ON
120  *
121  * Local Variables:
122  * eval: (c-set-style "gnu")
123  * End:
124  */
vlib_physmem_get_page_index
static u64 vlib_physmem_get_page_index(vlib_main_t *vm, void *mem)
Definition: physmem_funcs.h:96
vlib_physmem_alloc_aligned
static void * vlib_physmem_alloc_aligned(vlib_main_t *vm, uword n_bytes, uword alignment)
Definition: physmem_funcs.h:56
vlib_physmem_map_t
Definition: physmem.h:45
name
string name[64]
Definition: fib.api:25
clib.h
clib_pmalloc_get_pa
static uword clib_pmalloc_get_pa(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.h:146
vlib_physmem_alloc
static void * vlib_physmem_alloc(vlib_main_t *vm, uword n_bytes)
Definition: physmem_funcs.h:73
vlib_physmem_free
static void vlib_physmem_free(vlib_main_t *vm, void *p)
Definition: physmem_funcs.h:89
vm
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Definition: nat44_ei.c:3047
mem
void * mem
Definition: flowhash_template.h:361
vlib_physmem_main_t::pmalloc_main
clib_pmalloc_main_t * pmalloc_main
Definition: physmem.h:64
vlib_physmem_get_map
vlib_physmem_map_t * vlib_physmem_get_map(vlib_main_t *vm, u32 index)
Definition: physmem.c:86
clib_pmalloc_get_page_index
static u32 clib_pmalloc_get_page_index(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.h:128
vlib_physmem_get_pa
static u64 vlib_physmem_get_pa(vlib_main_t *vm, void *mem)
Definition: physmem_funcs.h:103
clib_pmalloc_free
__clib_export void clib_pmalloc_free(clib_pmalloc_main_t *pm, void *va)
Definition: pmalloc.c:517
vlib_main_t::physmem_main
vlib_physmem_main_t physmem_main
Definition: main.h:168
map
counters map
Definition: map.api:356
clib_pmalloc_alloc_aligned
void * clib_pmalloc_alloc_aligned(clib_pmalloc_main_t *pm, uword size, uword align)
Definition: pmalloc.c:480
uword
u64 uword
Definition: types.h:112
vlib_physmem_shared_map_create
clib_error_t * vlib_physmem_shared_map_create(vlib_main_t *vm, char *name, uword size, u32 log2_page_sz, u32 numa_node, u32 *map_index)
Definition: physmem.c:41
clib_pmalloc_main_t
Definition: pmalloc.h:60
CLIB_CACHE_LINE_BYTES
#define CLIB_CACHE_LINE_BYTES
Definition: cache.h:59
clib_pmalloc_alloc_from_arena
__clib_export void * clib_pmalloc_alloc_from_arena(clib_pmalloc_main_t *pm, void *arena_va, uword size, uword align)
Definition: pmalloc.c:487
size
u32 size
Definition: vhost_user.h:125
index
u32 index
Definition: flow_types.api:221
always_inline
#define always_inline
Definition: rdma_mlx5dv.h:23
clib_pmalloc_main_t::error
clib_error_t * error
Definition: pmalloc.h:99
u64
unsigned long u64
Definition: types.h:89
u32
unsigned int u32
Definition: types.h:88
n_bytes
u32 n_bytes
Definition: interface_output.c:401
main.h
physmem.h
vlib_physmem_last_error
static clib_error_t * vlib_physmem_last_error(struct vlib_main_t *vm)
Definition: physmem_funcs.h:110
vlib_main_t
Definition: main.h:102
vlib_physmem_init
clib_error_t * vlib_physmem_init(vlib_main_t *vm)
Definition: physmem.c:93
clib_error_t
Definition: clib_error.h:21
clib_error.h
vlib_physmem_alloc_aligned_on_numa
static void * vlib_physmem_alloc_aligned_on_numa(vlib_main_t *vm, uword n_bytes, uword alignment, u32 numa_node)
Definition: physmem_funcs.h:63
clib_pmalloc_alloc_aligned_on_numa
__clib_export void * clib_pmalloc_alloc_aligned_on_numa(clib_pmalloc_main_t *pm, uword size, uword align, u32 numa_node)
Definition: pmalloc.c:473
vlib_physmem_alloc_from_map
static void * vlib_physmem_alloc_from_map(vlib_main_t *vm, u32 physmem_map_index, uword n_bytes, uword alignment)
Definition: physmem_funcs.h:79