1 #ifndef __XEN_FRAME_NUM_H__
2 #define __XEN_FRAME_NUM_H__
3
4 #include <xen/kernel.h>
5 #include <xen/typesafe.h>
6
7 TYPE_SAFE(unsigned long, mfn);
8 #define PRI_mfn "05lx"
9 #define INVALID_MFN_RAW (~0UL)
10 #define INVALID_MFN _mfn(INVALID_MFN_RAW)
11 /*
12 * To be used for global variable initialization. This workaround a bug
13 * in GCC < 5.0.
14 */
15 #define INVALID_MFN_INITIALIZER { INVALID_MFN_RAW }
16
17 #if 0
18 #define mfn_t /* Grep fodder: mfn_t, _mfn() and mfn_x() are defined above */
19 #define _mfn
20 #define mfn_x
21 #endif
22
mfn_add(mfn_t mfn,unsigned long i)23 static inline mfn_t __must_check mfn_add(mfn_t mfn, unsigned long i)
24 {
25 return _mfn(mfn_x(mfn) + i);
26 }
27
mfn_max(mfn_t x,mfn_t y)28 static inline mfn_t mfn_max(mfn_t x, mfn_t y)
29 {
30 return _mfn(max(mfn_x(x), mfn_x(y)));
31 }
32
mfn_min(mfn_t x,mfn_t y)33 static inline mfn_t mfn_min(mfn_t x, mfn_t y)
34 {
35 return _mfn(min(mfn_x(x), mfn_x(y)));
36 }
37
mfn_eq(mfn_t x,mfn_t y)38 static inline bool mfn_eq(mfn_t x, mfn_t y)
39 {
40 return mfn_x(x) == mfn_x(y);
41 }
42
43 TYPE_SAFE(unsigned long, gfn);
44 #define PRI_gfn "05lx"
45 #define INVALID_GFN_RAW (~0UL)
46 #define INVALID_GFN _gfn(INVALID_GFN_RAW)
47 /*
48 * To be used for global variable initialization. This workaround a bug
49 * in GCC < 5.0 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64856
50 */
51 #define INVALID_GFN_INITIALIZER { INVALID_GFN_RAW }
52
53 #if 0
54 #define gfn_t /* Grep fodder: gfn_t, _gfn() and gfn_x() are defined above */
55 #define _gfn
56 #define gfn_x
57 #endif
58
gfn_add(gfn_t gfn,unsigned long i)59 static inline gfn_t __must_check gfn_add(gfn_t gfn, unsigned long i)
60 {
61 return _gfn(gfn_x(gfn) + i);
62 }
63
gfn_max(gfn_t x,gfn_t y)64 static inline gfn_t gfn_max(gfn_t x, gfn_t y)
65 {
66 return _gfn(max(gfn_x(x), gfn_x(y)));
67 }
68
gfn_min(gfn_t x,gfn_t y)69 static inline gfn_t gfn_min(gfn_t x, gfn_t y)
70 {
71 return _gfn(min(gfn_x(x), gfn_x(y)));
72 }
73
gfn_eq(gfn_t x,gfn_t y)74 static inline bool gfn_eq(gfn_t x, gfn_t y)
75 {
76 return gfn_x(x) == gfn_x(y);
77 }
78
79 TYPE_SAFE(unsigned long, pfn);
80 #define PRI_pfn "05lx"
81
82 #if 0
83 #define pfn_t /* Grep fodder: pfn_t, _pfn() and pfn_x() are defined above */
84 #define _pfn
85 #define pfn_x
86 #endif
87
88 #endif /* __XEN_FRAME_NUM_H__ */
89