diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-12-29 15:47:23 +0100 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-12-29 15:47:23 +0100 |
commit | 484a058c48287df3fc9fa0b146dd8c827ffff7be (patch) | |
tree | b9d31da22ef993bb6cfdf66f65b4c3ff0ca75563 /xen/include/xen/rangeset.h | |
parent | d17f04f5f88aa3ac4266c43802ba23fd03c9f04c (diff) | |
download | xen-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.h | 68 |
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__ */ |