aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/rangeset.h
diff options
context:
space:
mode:
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-12-29 15:47:23 +0100
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>2005-12-29 15:47:23 +0100
commit484a058c48287df3fc9fa0b146dd8c827ffff7be (patch)
treeb9d31da22ef993bb6cfdf66f65b4c3ff0ca75563 /xen/include/xen/rangeset.h
parentd17f04f5f88aa3ac4266c43802ba23fd03c9f04c (diff)
downloadxen-484a058c48287df3fc9fa0b146dd8c827ffff7be.tar.gz
xen-484a058c48287df3fc9fa0b146dd8c827ffff7be.tar.bz2
xen-484a058c48287df3fc9fa0b146dd8c827ffff7be.zip
Add auto-destructing per-domain rangeset data structure,
for representing sets of contiguous numeric ranges. This will be used for representing permissions lists (e.g., io memory, io ports, irqs). Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/include/xen/rangeset.h')
-rw-r--r--xen/include/xen/rangeset.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/xen/include/xen/rangeset.h b/xen/include/xen/rangeset.h
new file mode 100644
index 0000000000..ffd14ad17d
--- /dev/null
+++ b/xen/include/xen/rangeset.h
@@ -0,0 +1,68 @@
+/******************************************************************************
+ * rangeset.h
+ *
+ * Creation, maintenance and automatic destruction of per-domain sets of
+ * numeric ranges.
+ *
+ * Copyright (c) 2005, K A Fraser
+ */
+
+#ifndef __XEN_RANGESET_H__
+#define __XEN_RANGESET_H__
+
+struct domain;
+struct rangeset;
+
+/*
+ * Initialise/destroy per-domain rangeset information.
+ *
+ * It is invalid to create or destroy a rangeset belonging to a domain @d
+ * before rangeset_domain_initialise(d) returns or after calling
+ * rangeset_domain_destroy(d).
+ */
+void rangeset_domain_initialise(
+ struct domain *d);
+void rangeset_domain_destroy(
+ struct domain *d);
+
+/*
+ * Create/destroy a rangeset. Optionally attach to specified domain @d for
+ * auto-destruction when the domain dies. A name may be specified, for use
+ * in debug pretty-printing, and various RANGESETF flags (defined below).
+ *
+ * It is invalid to perform any operation on a rangeset @r after calling
+ * rangeset_destroy(r).
+ */
+struct rangeset *rangeset_new(
+ struct domain *d, char *name, unsigned int flags);
+void rangeset_destroy(
+ struct rangeset *r);
+
+/* Flags for passing to rangeset_new(). */
+ /* Pretty-print range limits in hexadecimal. */
+#define _RANGESETF_prettyprint_hex 0
+#define RANGESETF_prettyprint_hex (1U << _RANGESETF_prettyprint_hex)
+
+/* Add/remove/query a numeric range. */
+int rangeset_add_range(
+ struct rangeset *r, unsigned long s, unsigned long e);
+int rangeset_remove_range(
+ struct rangeset *r, unsigned long s, unsigned long e);
+int rangeset_contains_range(
+ struct rangeset *r, unsigned long s, unsigned long e);
+
+/* Add/remove/query a single number. */
+int rangeset_add_singleton(
+ struct rangeset *r, unsigned long s);
+int rangeset_remove_singleton(
+ struct rangeset *r, unsigned long s);
+int rangeset_contains_singleton(
+ struct rangeset *r, unsigned long s);
+
+/* Rangeset pretty printing. */
+void rangeset_printk(
+ struct rangeset *r);
+void rangeset_domain_printk(
+ struct domain *d);
+
+#endif /* __XEN_RANGESET_H__ */