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