1 /****************************************************************************** 2 * rangeset.h 3 * 4 * Creation, maintenance and automatic destruction of per-domain sets of 5 * numeric ranges. 6 * 7 * Copyright (c) 2005, K A Fraser 8 */ 9 10 #ifndef __XEN_RANGESET_H__ 11 #define __XEN_RANGESET_H__ 12 13 #include <xen/types.h> 14 15 struct domain; 16 struct rangeset; 17 18 /* 19 * Initialise/destroy per-domain rangeset information. 20 * 21 * It is invalid to create or destroy a rangeset belonging to a domain @d 22 * before rangeset_domain_initialise(d) returns or after calling 23 * rangeset_domain_destroy(d). 24 */ 25 void rangeset_domain_initialise( 26 struct domain *d); 27 void rangeset_domain_destroy( 28 struct domain *d); 29 30 /* 31 * Create/destroy a rangeset. Optionally attach to specified domain @d for 32 * auto-destruction when the domain dies. A name may be specified, for use 33 * in debug pretty-printing, and various RANGESETF flags (defined below). 34 * 35 * It is invalid to perform any operation on a rangeset @r after calling 36 * rangeset_destroy(r). 37 */ 38 struct rangeset *rangeset_new( 39 struct domain *d, char *name, unsigned int flags); 40 void rangeset_destroy( 41 struct rangeset *r); 42 43 /* 44 * Set a limit on the number of ranges that may exist in set @r. 45 * NOTE: This must be called while @r is empty. 46 */ 47 void rangeset_limit( 48 struct rangeset *r, unsigned int limit); 49 50 /* Flags for passing to rangeset_new(). */ 51 /* Pretty-print range limits in hexadecimal. */ 52 #define _RANGESETF_prettyprint_hex 0 53 #define RANGESETF_prettyprint_hex (1U << _RANGESETF_prettyprint_hex) 54 55 bool_t __must_check rangeset_is_empty( 56 const struct rangeset *r); 57 58 /* Add/claim/remove/query a numeric range. */ 59 int __must_check rangeset_add_range( 60 struct rangeset *r, unsigned long s, unsigned long e); 61 int __must_check rangeset_claim_range(struct rangeset *r, unsigned long size, 62 unsigned long *s); 63 int __must_check rangeset_remove_range( 64 struct rangeset *r, unsigned long s, unsigned long e); 65 bool_t __must_check rangeset_contains_range( 66 struct rangeset *r, unsigned long s, unsigned long e); 67 bool_t __must_check rangeset_overlaps_range( 68 struct rangeset *r, unsigned long s, unsigned long e); 69 int rangeset_report_ranges( 70 struct rangeset *r, unsigned long s, unsigned long e, 71 int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt); 72 73 /* Add/remove/query a single number. */ 74 int __must_check rangeset_add_singleton( 75 struct rangeset *r, unsigned long s); 76 int __must_check rangeset_remove_singleton( 77 struct rangeset *r, unsigned long s); 78 bool_t __must_check rangeset_contains_singleton( 79 struct rangeset *r, unsigned long s); 80 81 /* swap contents */ 82 void rangeset_swap(struct rangeset *a, struct rangeset *b); 83 84 /* Rangeset pretty printing. */ 85 void rangeset_printk( 86 struct rangeset *r); 87 void rangeset_domain_printk( 88 struct domain *d); 89 90 #endif /* __XEN_RANGESET_H__ */ 91 92 /* 93 * Local variables: 94 * mode: C 95 * c-file-style: "BSD" 96 * c-basic-offset: 4 97 * tab-width: 4 98 * indent-tabs-mode: nil 99 * End: 100 */ 101