1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/******************************************************************************
* include/asm-x86/grant_table.h
*
* Copyright (c) 2004-2005 K A Fraser
*/
#ifndef __ASM_GRANT_TABLE_H__
#define __ASM_GRANT_TABLE_H__
#define INITIAL_NR_GRANT_FRAMES 4
/*
* Caller must own caller's BIGLOCK, is responsible for flushing the TLB, and
* must hold a reference to the page.
*/
int create_grant_host_mapping(uint64_t addr, unsigned long frame,
unsigned int flags, unsigned int cache_flags);
int replace_grant_host_mapping(
uint64_t addr, unsigned long frame, uint64_t new_addr, unsigned int flags);
#define gnttab_create_shared_page(d, t, i) \
do { \
share_xen_page_with_guest( \
virt_to_page((char *)(t)->shared_raw[i]), \
(d), XENSHARE_writable); \
} while ( 0 )
#define gnttab_create_status_page(d, t, i) \
do { \
share_xen_page_with_guest( \
virt_to_page((char *)(t)->status[i]), \
(d), XENSHARE_writable); \
} while ( 0 )
#define gnttab_shared_mfn(d, t, i) \
((virt_to_maddr((t)->shared_raw[i]) >> PAGE_SHIFT))
#define gnttab_shared_gmfn(d, t, i) \
(mfn_to_gmfn(d, gnttab_shared_mfn(d, t, i)))
#define gnttab_status_mfn(t, i) \
((virt_to_maddr((t)->status[i]) >> PAGE_SHIFT))
#define gnttab_status_gmfn(d, t, i) \
(mfn_to_gmfn(d, gnttab_status_mfn(t, i)))
#define gnttab_mark_dirty(d, f) paging_mark_dirty((d), (f))
static inline void gnttab_clear_flag(unsigned int nr, uint16_t *st)
{
/*
* Note that this cannot be clear_bit(), as the access must be
* confined to the specified 2 bytes.
*/
asm volatile ("lock btrw %w1,%0" : "=m" (*st) : "Ir" (nr), "m" (*st));
}
/* Foreign mappings of HHVM-guest pages do not modify the type count. */
#define gnttab_host_mapping_get_page_type(op, ld, rd) \
(!((op)->flags & GNTMAP_readonly) && \
(((ld) == (rd)) || !paging_mode_external(rd)))
/* Done implicitly when page tables are destroyed. */
#define gnttab_release_host_mappings(domain) ( paging_mode_external(domain) )
static inline int replace_grant_supported(void)
{
return 1;
}
#endif /* __ASM_GRANT_TABLE_H__ */
|