Coverage Report

Created: 2017-10-25 09:10

/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
 */