/root/src/xen/xen/include/xen/rangeset.h
Line | Count | Source |
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 | 8 | #define _RANGESETF_prettyprint_hex 0 |
53 | 8 | #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/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_remove_range( |
62 | | struct rangeset *r, unsigned long s, unsigned long e); |
63 | | bool_t __must_check rangeset_contains_range( |
64 | | struct rangeset *r, unsigned long s, unsigned long e); |
65 | | bool_t __must_check rangeset_overlaps_range( |
66 | | struct rangeset *r, unsigned long s, unsigned long e); |
67 | | int rangeset_report_ranges( |
68 | | struct rangeset *r, unsigned long s, unsigned long e, |
69 | | int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt); |
70 | | |
71 | | /* |
72 | | * Note that the consume function can return an error value apart from |
73 | | * -ERESTART, and that no cleanup is performed (ie: the user should call |
74 | | * rangeset_destroy if needed). |
75 | | */ |
76 | | int rangeset_consume_ranges(struct rangeset *r, |
77 | | int (*cb)(unsigned long s, unsigned long e, |
78 | | void *, unsigned long *c), |
79 | | void *ctxt); |
80 | | |
81 | | /* Add/remove/query a single number. */ |
82 | | int __must_check rangeset_add_singleton( |
83 | | struct rangeset *r, unsigned long s); |
84 | | int __must_check rangeset_remove_singleton( |
85 | | struct rangeset *r, unsigned long s); |
86 | | bool_t __must_check rangeset_contains_singleton( |
87 | | struct rangeset *r, unsigned long s); |
88 | | |
89 | | /* swap contents */ |
90 | | void rangeset_swap(struct rangeset *a, struct rangeset *b); |
91 | | |
92 | | /* Rangeset pretty printing. */ |
93 | | void rangeset_printk( |
94 | | struct rangeset *r); |
95 | | void rangeset_domain_printk( |
96 | | struct domain *d); |
97 | | |
98 | | #endif /* __XEN_RANGESET_H__ */ |
99 | | |
100 | | /* |
101 | | * Local variables: |
102 | | * mode: C |
103 | | * c-file-style: "BSD" |
104 | | * c-basic-offset: 4 |
105 | | * tab-width: 4 |
106 | | * indent-tabs-mode: nil |
107 | | * End: |
108 | | */ |