1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/******************************************************************************
* 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)
int __must_check rangeset_is_empty(
struct rangeset *r);
/* Add/remove/query a numeric range. */
int __must_check rangeset_add_range(
struct rangeset *r, unsigned long s, unsigned long e);
int __must_check rangeset_remove_range(
struct rangeset *r, unsigned long s, unsigned long e);
int __must_check rangeset_contains_range(
struct rangeset *r, unsigned long s, unsigned long e);
int __must_check rangeset_overlaps_range(
struct rangeset *r, unsigned long s, unsigned long e);
int rangeset_report_ranges(
struct rangeset *r, unsigned long s, unsigned long e,
int (*cb)(unsigned long s, unsigned long e, void *), void *ctxt);
/* Add/remove/query a single number. */
int __must_check rangeset_add_singleton(
struct rangeset *r, unsigned long s);
int __must_check rangeset_remove_singleton(
struct rangeset *r, unsigned long s);
int __must_check 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__ */
|