FD.io VPP
v17.04-9-g99c0734
Vector Packet Processing
Main Page
Related Pages
Data Structures
Source
Files
Symbols
physmem.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_h
41
#define included_vlib_physmem_h
42
43
typedef
struct
44
{
45
uword
start
, end,
size
;
46
}
vlib_physmem_region_t
;
47
48
typedef
struct
49
{
50
vlib_physmem_region_t
virtual
;
51
52
uword
log2_n_bytes_per_page
;
53
54
/* 1 << log2_n_bytes_per_page - 1. */
55
uword
page_mask
;
56
57
u64
*
page_table
;
58
59
/* is fake physmem */
60
u8
is_fake
;
61
}
vlib_physmem_main_t
;
62
63
always_inline
u64
64
vlib_physmem_offset_to_physical
(
vlib_physmem_main_t
* pm,
uword
o)
65
{
66
uword
page_index = o >> pm->
log2_n_bytes_per_page
;
67
ASSERT
(o < pm->
virtual
.
size
);
68
ASSERT
(pm->
page_table
[page_index] != 0);
69
return
(
vec_elt
(pm->
page_table
, page_index) + (o & pm->
page_mask
));
70
}
71
72
always_inline
int
73
vlib_physmem_is_virtual
(
vlib_physmem_main_t
* pm,
uword
p)
74
{
75
return
p >= pm->
virtual
.
start
&& p < pm->
virtual
.
end
;
76
}
77
78
always_inline
uword
79
vlib_physmem_offset_of
(
vlib_physmem_main_t
* pm,
void
*p)
80
{
81
uword
a
=
pointer_to_uword
(p);
82
uword
o;
83
84
ASSERT
(
vlib_physmem_is_virtual
(pm, a));
85
o = a - pm->
virtual
.
start
;
86
87
/* Offset must fit in 32 bits. */
88
ASSERT
((
uword
) o == a - pm->
virtual
.
start
);
89
90
return
o;
91
}
92
93
always_inline
void
*
94
vlib_physmem_at_offset
(
vlib_physmem_main_t
* pm,
uword
offset
)
95
{
96
ASSERT
(
offset < pm->
virtual
.
size
);
97
return
uword_to_pointer
(pm->
virtual
.
start
+ offset,
void
*);
98
}
99
100
#endif
/* included_vlib_physmem_h */
101
102
/*
103
* fd.io coding-style-patch-verification: ON
104
*
105
* Local Variables:
106
* eval: (c-set-style "gnu")
107
* End:
108
*/
a
a
Definition:
bitmap.h:516
vlib_physmem_region_t::start
uword start
Definition:
physmem.h:45
vlib_physmem_main_t::page_mask
uword page_mask
Definition:
physmem.h:55
vlib_physmem_at_offset
static void * vlib_physmem_at_offset(vlib_physmem_main_t *pm, uword offset)
Definition:
physmem.h:94
vlib_physmem_region_t::end
uword end
Definition:
physmem.h:45
always_inline
#define always_inline
Definition:
clib.h:84
u64
unsigned long u64
Definition:
types.h:89
pointer_to_uword
static uword pointer_to_uword(const void *p)
Definition:
types.h:131
vlib_physmem_main_t::is_fake
u8 is_fake
Definition:
physmem.h:60
vlib_physmem_offset_to_physical
static u64 vlib_physmem_offset_to_physical(vlib_physmem_main_t *pm, uword o)
Definition:
physmem.h:64
uword_to_pointer
#define uword_to_pointer(u, type)
Definition:
types.h:136
ASSERT
#define ASSERT(truth)
Definition:
error_bootstrap.h:69
vlib_physmem_offset_of
static uword vlib_physmem_offset_of(vlib_physmem_main_t *pm, void *p)
Definition:
physmem.h:79
vlib_physmem_region_t
Definition:
physmem.h:43
vlib_physmem_is_virtual
static int vlib_physmem_is_virtual(vlib_physmem_main_t *pm, uword p)
Definition:
physmem.h:73
size
u64 size
Definition:
vhost-user.h:77
vlib_physmem_main_t::log2_n_bytes_per_page
uword log2_n_bytes_per_page
Definition:
physmem.h:52
uword
u64 uword
Definition:
types.h:112
vec_elt
#define vec_elt(v, i)
Get vector value at index i.
Definition:
vec_bootstrap.h:181
clib_bihash_value
template key/value backing page structure
Definition:
bihash_doc.h:44
vlib_physmem_main_t::page_table
u64 * page_table
Definition:
physmem.h:57
u8
unsigned char u8
Definition:
types.h:56
vlib_physmem_main_t
Definition:
physmem.h:48
vlib_physmem_main_t::virtual
vlib_physmem_region_t virtual
Definition:
physmem.h:50
src
vlib
physmem.h
Generated on Mon May 15 2017 20:49:59 for FD.io VPP by
1.8.11