Switchtec Userspace
PROJECT_NUMBER = 3.1
inc
switchtec
utils.h
1
/*
2
* Microsemi Switchtec(tm) PCIe Management Library
3
* Copyright (c) 2017, Microsemi Corporation
4
*
5
* Permission is hereby granted, free of charge, to any person obtaining a
6
* copy of this software and associated documentation files (the "Software"),
7
* to deal in the Software without restriction, including without limitation
8
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
* and/or sell copies of the Software, and to permit persons to whom the
10
* Software is furnished to do so, subject to the following conditions:
11
*
12
* The above copyright notice and this permission notice shall be included
13
* in all copies or substantial portions of the Software.
14
*
15
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
* OTHER DEALINGS IN THE SOFTWARE.
22
*
23
*/
24
25
#ifndef LIBSWITCHTEC_MACROS_H
26
#define LIBSWITCHTEC_MACROS_H
27
28
#ifndef ARRAY_SIZE
29
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
30
#endif
31
32
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
33
34
struct
range
{
35
int
start, end, step;
36
};
37
38
#define _RANGE_CNT(start, end, step) DIV_ROUND_UP((end) - (start) + 1, (step))
39
#define RANGE_CNT(rng) _RANGE_CNT((rng)->start, (rng)->end, (rng)->step)
40
#define RANGE_TO_IDX(rng, x) DIV_ROUND_UP((x) - (rng)->start, (rng)->step)
41
42
#define for_range(i, rng) \
43
for((i) = (rng)->start; (i) <= (rng)->end; (i) += (rng)->step)
44
45
#define for_rev_range(i, rng) \
46
for((i) = (rng)->start + (RANGE_CNT(rng) - 1) * (rng)->step; \
47
(i) >= (rng)->start; (i) -= (rng)->step)
48
49
#endif
range
Definition:
utils.h:34
Generated by
1.9.1