Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
xen
grant_table.h
Go to the documentation of this file.
1
/******************************************************************************
2
* grant_table.h
3
*
4
* Two sets of functionality:
5
* 1. Granting foreign access to our memory reservation.
6
* 2. Accessing others' memory reservations via grant references.
7
* (i.e., mechanisms for both sender and recipient of grant references)
8
*
9
* Copyright (c) 2004-2005, K A Fraser
10
* Copyright (c) 2005, Christopher Clark
11
*
12
* This program is free software; you can redistribute it and/or
13
* modify it under the terms of the GNU General Public License version 2
14
* as published by the Free Software Foundation; or, when distributed
15
* separately from the Linux kernel or incorporated into other
16
* software packages, subject to the following license:
17
*
18
* Permission is hereby granted, free of charge, to any person obtaining a copy
19
* of this source file (the "Software"), to deal in the Software without
20
* restriction, including without limitation the rights to use, copy, modify,
21
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
22
* and to permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be included in
26
* all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
29
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
30
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
33
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
34
* IN THE SOFTWARE.
35
*/
36
37
#ifndef __ASM_GNTTAB_H__
38
#define __ASM_GNTTAB_H__
39
40
#include <asm/page.h>
41
42
#include <
xen/interface/xen.h
>
43
#include <
xen/interface/grant_table.h
>
44
45
#include <asm/xen/hypervisor.h>
46
47
#include <
xen/features.h
>
48
49
#define GNTTAB_RESERVED_XENSTORE 1
50
51
/* NR_GRANT_FRAMES must be less than or equal to that configured in Xen */
52
#define NR_GRANT_FRAMES 4
53
54
struct
gnttab_free_callback
{
55
struct
gnttab_free_callback
*
next
;
56
void
(*
fn
)(
void
*);
57
void
*
arg
;
58
u16
count
;
59
};
60
61
int
gnttab_init
(
void
);
62
int
gnttab_suspend
(
void
);
63
int
gnttab_resume
(
void
);
64
65
int
gnttab_grant_foreign_access
(
domid_t
domid
,
unsigned
long
frame
,
66
int
readonly
);
67
int
gnttab_grant_foreign_access_subpage
(
domid_t
domid
,
unsigned
long
frame
,
68
int
flags
,
unsigned
page_off,
69
unsigned
length
);
70
int
gnttab_grant_foreign_access_trans
(
domid_t
domid
,
int
flags
,
71
domid_t
trans_domid,
72
grant_ref_t
trans_gref);
73
74
/*
75
* Are sub-page grants available on this version of Xen? Returns true if they
76
* are, and false if they're not.
77
*/
78
bool
gnttab_subpage_grants_available
(
void
);
79
80
/*
81
* Are transitive grants available on this version of Xen? Returns true if they
82
* are, and false if they're not.
83
*/
84
bool
gnttab_trans_grants_available
(
void
);
85
86
/*
87
* End access through the given grant reference, iff the grant entry is no
88
* longer in use. Return 1 if the grant entry was freed, 0 if it is still in
89
* use.
90
*/
91
int
gnttab_end_foreign_access_ref
(
grant_ref_t
ref,
int
readonly
);
92
93
/*
94
* Eventually end access through the given grant reference, and once that
95
* access has been ended, free the given page too. Access will be ended
96
* immediately iff the grant entry is not in use, otherwise it will happen
97
* some time later. page may be 0, in which case no freeing will occur.
98
*/
99
void
gnttab_end_foreign_access
(
grant_ref_t
ref,
int
readonly
,
100
unsigned
long
page
);
101
102
int
gnttab_grant_foreign_transfer
(
domid_t
domid
,
unsigned
long
pfn);
103
104
unsigned
long
gnttab_end_foreign_transfer_ref
(
grant_ref_t
ref);
105
unsigned
long
gnttab_end_foreign_transfer
(
grant_ref_t
ref);
106
107
int
gnttab_query_foreign_access
(
grant_ref_t
ref);
108
109
/*
110
* operations on reserved batches of grant references
111
*/
112
int
gnttab_alloc_grant_references
(
u16
count
,
grant_ref_t
*pprivate_head);
113
114
void
gnttab_free_grant_reference
(
grant_ref_t
ref);
115
116
void
gnttab_free_grant_references
(
grant_ref_t
head
);
117
118
int
gnttab_empty_grant_references
(
const
grant_ref_t
*pprivate_head);
119
120
int
gnttab_claim_grant_reference
(
grant_ref_t
*pprivate_head);
121
122
void
gnttab_release_grant_reference
(
grant_ref_t
*private_head,
123
grant_ref_t
release
);
124
125
void
gnttab_request_free_callback
(
struct
gnttab_free_callback
*
callback
,
126
void
(*
fn
)(
void
*),
void
*
arg
,
u16
count
);
127
void
gnttab_cancel_free_callback
(
struct
gnttab_free_callback
*callback);
128
129
void
gnttab_grant_foreign_access_ref
(
grant_ref_t
ref,
domid_t
domid
,
130
unsigned
long
frame
,
int
readonly
);
131
int
gnttab_grant_foreign_access_subpage_ref
(
grant_ref_t
ref,
domid_t
domid
,
132
unsigned
long
frame
,
int
flags
,
133
unsigned
page_off,
134
unsigned
length
);
135
int
gnttab_grant_foreign_access_trans_ref
(
grant_ref_t
ref,
domid_t
domid
,
136
int
flags
,
domid_t
trans_domid,
137
grant_ref_t
trans_gref);
138
139
void
gnttab_grant_foreign_transfer_ref
(
grant_ref_t
,
domid_t
domid
,
140
unsigned
long
pfn);
141
142
static
inline
void
143
gnttab_set_map_op(
struct
gnttab_map_grant_ref
*
map
,
phys_addr_t
addr
,
144
uint32_t
flags
,
grant_ref_t
ref,
domid_t
domid
)
145
{
146
if
(flags &
GNTMAP_contains_pte
)
147
map->
host_addr
=
addr
;
148
else
if
(xen_feature(
XENFEAT_auto_translated_physmap
))
149
map->
host_addr
=
__pa
(addr);
150
else
151
map->
host_addr
=
addr
;
152
153
map->
flags
=
flags
;
154
map->
ref
= ref;
155
map->
dom
=
domid
;
156
}
157
158
static
inline
void
159
gnttab_set_unmap_op(
struct
gnttab_unmap_grant_ref
*
unmap
,
phys_addr_t
addr,
160
uint32_t
flags,
grant_handle_t
handle
)
161
{
162
if
(flags & GNTMAP_contains_pte)
163
unmap->
host_addr
=
addr
;
164
else
if
(xen_feature(
XENFEAT_auto_translated_physmap
))
165
unmap->
host_addr
=
__pa
(addr);
166
else
167
unmap->
host_addr
=
addr
;
168
169
unmap->
handle
=
handle
;
170
unmap->
dev_bus_addr
= 0;
171
}
172
173
int
arch_gnttab_map_shared
(
xen_pfn_t
*frames,
unsigned
long
nr_gframes,
174
unsigned
long
max_nr_gframes,
175
void
**__shared);
176
int
arch_gnttab_map_status
(
uint64_t
*frames,
unsigned
long
nr_gframes,
177
unsigned
long
max_nr_gframes,
178
grant_status_t
**__shared);
179
void
arch_gnttab_unmap
(
void
*
shared
,
unsigned
long
nr_gframes);
180
181
extern
unsigned
long
xen_hvm_resume_frames
;
182
unsigned
int
gnttab_max_grant_frames
(
void
);
183
184
#define gnttab_map_vaddr(map) ((void *)(map.host_virt_addr))
185
186
int
gnttab_map_refs
(
struct
gnttab_map_grant_ref
*map_ops,
187
struct
gnttab_map_grant_ref
*kmap_ops,
188
struct
page
**
pages
,
unsigned
int
count
);
189
int
gnttab_unmap_refs
(
struct
gnttab_unmap_grant_ref
*unmap_ops,
190
struct
gnttab_map_grant_ref
*kunmap_ops,
191
struct
page
**
pages
,
unsigned
int
count
);
192
193
/* Perform a batch of grant map/copy operations. Retry every batch slot
194
* for which the hypervisor returns GNTST_eagain. This is typically due
195
* to paged out target frames.
196
*
197
* Will retry for 1, 2, ... 255 ms, i.e. 256 times during 32 seconds.
198
*
199
* Return value in each iand every status field of the batch guaranteed
200
* to not be GNTST_eagain.
201
*/
202
void
gnttab_batch_map
(
struct
gnttab_map_grant_ref
*batch,
unsigned
count
);
203
void
gnttab_batch_copy
(
struct
gnttab_copy
*batch,
unsigned
count
);
204
205
#endif
/* __ASM_GNTTAB_H__ */
Generated on Thu Jan 10 2013 14:53:58 for Linux Kernel by
1.8.2