aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/shared.h
diff options
context:
space:
mode:
authorEmmanuel Ackaouy <ack@xensource.com>2007-01-05 17:34:29 +0000
committerEmmanuel Ackaouy <ack@xensource.com>2007-01-05 17:34:29 +0000
commitfa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863 (patch)
treeb30f57e0f20a6a5b52e621ed967a0d9004a74d5d /xen/include/xen/shared.h
parent8589463a257a56c0316b002b7d8affc5709e4672 (diff)
downloadxen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.tar.gz
xen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.tar.bz2
xen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.zip
Handle shared info (having different layout for native and compatibility
mode guests) accesses. Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/include/xen/shared.h')
-rw-r--r--xen/include/xen/shared.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/xen/include/xen/shared.h b/xen/include/xen/shared.h
new file mode 100644
index 0000000000..ee0510cf67
--- /dev/null
+++ b/xen/include/xen/shared.h
@@ -0,0 +1,54 @@
+#ifndef __XEN_SHARED_H__
+#define __XEN_SHARED_H__
+
+#include <xen/config.h>
+
+#ifdef CONFIG_COMPAT
+
+#include <compat/xen.h>
+
+typedef union {
+ struct shared_info native;
+ struct compat_shared_info compat;
+} shared_info_t;
+
+#define __shared_info(d, s, field) (*(!IS_COMPAT(d) ? \
+ &(s)->native.field : \
+ &(s)->compat.field))
+#define __shared_info_addr(d, s, field) (!IS_COMPAT(d) ? \
+ (void *)&(s)->native.field : \
+ (void *)&(s)->compat.field)
+
+#define shared_info(d, field) __shared_info(d, (d)->shared_info, field)
+#define shared_info_addr(d, field) __shared_info_addr(d, (d)->shared_info, field)
+
+typedef union {
+ struct vcpu_info native;
+ struct compat_vcpu_info compat;
+} vcpu_info_t;
+
+#define vcpu_info(v, field) (*(!IS_COMPAT((v)->domain) ? \
+ &(v)->vcpu_info->native.field : \
+ &(v)->vcpu_info->compat.field))
+#define vcpu_info_addr(v, field) (!IS_COMPAT((v)->domain) ? \
+ (void *)&(v)->vcpu_info->native.field : \
+ (void *)&(v)->vcpu_info->compat.field)
+
+#else
+
+typedef struct shared_info shared_info_t;
+
+#define __shared_info(d, s, field) ((s)->field)
+#define __shared_info_addr(d, s, field) ((void *)&(s)->field)
+
+#define shared_info(d, field) ((d)->shared_info->field)
+#define shared_info_addr(d, field) ((void *)&(d)->shared_info->field)
+
+typedef struct vcpu_info vcpu_info_t;
+
+#define vcpu_info(v, field) ((v)->vcpu_info->field)
+#define vcpu_info_addr(v, field) ((void *)&(v)->vcpu_info->field)
+
+#endif
+
+#endif /* __XEN_SHARED_H__ */