FD.io VPP
v16.06
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
uword
start
, end,
size
;
45
}
vlib_physmem_region_t
;
46
47
typedef
struct
{
48
vlib_physmem_region_t
virtual
;
49
50
uword
log2_n_bytes_per_page
;
51
52
/* 1 << log2_n_bytes_per_page - 1. */
53
uword
page_mask
;
54
55
u64
*
page_table
;
56
}
vlib_physmem_main_t
;
57
58
always_inline
u64
59
vlib_physmem_offset_to_physical
(
vlib_physmem_main_t
* pm,
uword
o)
60
{
61
uword
page_index = o >> pm->
log2_n_bytes_per_page
;
62
ASSERT
(o < pm->
virtual
.
size
);
63
ASSERT
(pm->
page_table
[page_index] != 0);
64
return
(
vec_elt
(pm->
page_table
, page_index) + (o & pm->
page_mask
));
65
}
66
67
always_inline
int
68
vlib_physmem_is_virtual
(
vlib_physmem_main_t
* pm,
uword
p)
69
{
return
p >= pm->
virtual
.
start
&& p < pm->
virtual
.
end
; }
70
71
always_inline
uword
72
vlib_physmem_offset_of
(
vlib_physmem_main_t
* pm,
void
* p)
73
{
74
uword
a
=
pointer_to_uword
(p);
75
uword
o;
76
77
ASSERT
(
vlib_physmem_is_virtual
(pm, a));
78
o = a - pm->
virtual
.
start
;
79
80
/* Offset must fit in 32 bits. */
81
ASSERT
((
uword
) o == a - pm->
virtual
.
start
);
82
83
return
o;
84
}
85
86
always_inline
void
*
87
vlib_physmem_at_offset
(
vlib_physmem_main_t
* pm,
uword
offset)
88
{
89
ASSERT
(offset < pm->
virtual
.
size
);
90
return
uword_to_pointer
(pm->
virtual
.
start
+ offset,
void
*);
91
}
92
93
#endif
/* included_vlib_physmem_h */
a
a
Definition:
bitmap.h:393
vlib_physmem_region_t::start
uword start
Definition:
physmem.h:44
vlib_physmem_main_t::page_mask
uword page_mask
Definition:
physmem.h:53
vlib_physmem_is_virtual
always_inline int vlib_physmem_is_virtual(vlib_physmem_main_t *pm, uword p)
Definition:
physmem.h:68
vlib_physmem_region_t::end
uword end
Definition:
physmem.h:44
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
uword_to_pointer
#define uword_to_pointer(u, type)
Definition:
types.h:134
vlib_physmem_offset_to_physical
always_inline u64 vlib_physmem_offset_to_physical(vlib_physmem_main_t *pm, uword o)
Definition:
physmem.h:59
ASSERT
#define ASSERT(truth)
Definition:
error_bootstrap.h:69
vlib_physmem_region_t
Definition:
physmem.h:43
size
u32 size
Definition:
vhost-user.h:74
vlib_physmem_main_t::log2_n_bytes_per_page
uword log2_n_bytes_per_page
Definition:
physmem.h:50
uword
u64 uword
Definition:
types.h:112
vec_elt
#define vec_elt(v, i)
Get vector value at index i.
Definition:
vec_bootstrap.h:169
vlib_physmem_main_t::page_table
u64 * page_table
Definition:
physmem.h:55
vlib_physmem_main_t
Definition:
physmem.h:47
vlib_physmem_offset_of
always_inline uword vlib_physmem_offset_of(vlib_physmem_main_t *pm, void *p)
Definition:
physmem.h:72
vlib_physmem_main_t::virtual
vlib_physmem_region_t virtual
Definition:
physmem.h:48
vlib_physmem_at_offset
always_inline void * vlib_physmem_at_offset(vlib_physmem_main_t *pm, uword offset)
Definition:
physmem.h:87
vlib
vlib
physmem.h
Generated on Thu Sep 1 2016 09:11:31 for FD.io VPP by
1.8.11