FreeBSD kernel pms device code
dmlist.h
Go to the documentation of this file.
1
/*******************************************************************************
2
**
3
*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
4
*
5
*Redistribution and use in source and binary forms, with or without modification, are permitted provided
6
*that the following conditions are met:
7
*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8
*following disclaimer.
9
*2. Redistributions in binary form must reproduce the above copyright notice,
10
*this list of conditions and the following disclaimer in the documentation and/or other materials provided
11
*with the distribution.
12
*
13
*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
14
*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
15
*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17
*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
18
*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
19
*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
20
*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
21
*
22
* $FreeBSD$
23
*
24
********************************************************************************/
25
26
#ifndef __DMLIST_H__
27
#define __DMLIST_H__
28
29
typedef
struct
dmList_s
dmList_t
;
30
31
struct
dmList_s
{
32
dmList_t
*
flink
;
33
dmList_t
*
blink
;
34
};
35
36
#define DMLIST_INIT_HDR(hdr) \
37
do { \
38
((dmList_t *)(hdr))->flink = (dmList_t *)(hdr); \
39
((dmList_t *)(hdr))->blink = (dmList_t *)(hdr); \
40
} while (0)
41
42
#define DMLIST_INIT_ELEMENT(hdr) \
43
do { \
44
((dmList_t *)(hdr))->flink = (dmList_t *)agNULL; \
45
((dmList_t *)(hdr))->blink = (dmList_t *)agNULL; \
46
} while (0)
47
48
#define DMLIST_ENQUEUE_AT_HEAD(toAddHdr,listHdr) \
49
do { \
50
((dmList_t *)(toAddHdr))->flink = ((dmList_t *)(listHdr))->flink; \
51
((dmList_t *)(toAddHdr))->blink = (dmList_t *)(listHdr) ; \
52
((dmList_t *)(listHdr))->flink->blink = (dmList_t *)(toAddHdr); \
53
((dmList_t *)(listHdr))->flink = (dmList_t *)(toAddHdr); \
54
} while (0)
55
56
#define DMLIST_ENQUEUE_AT_TAIL(toAddHdr,listHdr) \
57
do { \
58
((dmList_t *)(toAddHdr))->flink = (dmList_t *)(listHdr); \
59
((dmList_t *)(toAddHdr))->blink = ((dmList_t *)(listHdr))->blink; \
60
((dmList_t *)(listHdr))->blink->flink = (dmList_t *)(toAddHdr); \
61
((dmList_t *)(listHdr))->blink = (dmList_t *)(toAddHdr); \
62
} while (0)
63
64
#define DMLIST_EMPTY(listHdr) \
65
(((dmList_t *)(listHdr))->flink == ((dmList_t *)(listHdr)))
66
67
#define DMLIST_NOT_EMPTY(listHdr) \
68
(!DMLIST_EMPTY(listHdr))
69
70
#define DMLIST_DEQUEUE_THIS(hdr) \
71
do { \
72
((dmList_t *)(hdr))->blink->flink = ((dmList_t *)(hdr))->flink; \
73
((dmList_t *)(hdr))->flink->blink = ((dmList_t *)(hdr))->blink; \
74
((dmList_t *)(hdr))->flink = ((dmList_t *)(hdr))->blink = agNULL; \
75
} while (0)
76
77
#define DMLIST_DEQUEUE_FROM_HEAD_FAST(atHeadHdr,listHdr) \
78
do { \
79
*((dmList_t **)(atHeadHdr)) = ((dmList_t *)(listHdr))->flink; \
80
(*((dmList_t **)(atHeadHdr)))->flink->blink = (dmList_t *)(listHdr); \
81
((dmList_t *)(listHdr))->flink = (*(dmList_t **)(atHeadHdr))->flink; \
82
} while (0)
83
84
#define DMLIST_DEQUEUE_FROM_HEAD(atHeadHdr,listHdr) \
85
do { \
86
if (DMLIST_NOT_EMPTY((listHdr))) \
87
{ \
88
DMLIST_DEQUEUE_FROM_HEAD_FAST(atHeadHdr,listHdr); \
89
} \
90
else \
91
{ \
92
(*((dmList_t **)(atHeadHdr))) = (dmList_t *)agNULL; \
93
} \
94
} while (0)
95
96
#define DMLIST_DEQUEUE_FROM_TAIL_FAST(atTailHdr,listHdr) \
97
do { \
98
(*((dmList_t **)(atTailHdr))) = ((dmList_t *)(listHdr))->blink; \
99
(*((dmList_t **)(atTailHdr)))->blink->flink = (dmList_t *)(listHdr); \
100
((dmList_t *)(listHdr))->blink = (*((dmList_t **)(atTailHdr)))->blink; \
101
} while (0)
102
103
#define DMLIST_DEQUEUE_FROM_TAIL(atTailHdr,listHdr) \
104
do { \
105
if (DMLIST_NOT_EMPTY((listHdr))) \
106
{ \
107
DMLIST_DEQUEUE_FROM_TAIL_FAST(atTailHdr,listHdr); \
108
} \
109
else \
110
{ \
111
(*((dmList_t **)(atTailHdr))) = (dmList_t *)agNULL; \
112
} \
113
} while (0)
114
115
#define DMLIST_ENQUEUE_LIST_AT_TAIL_FAST(toAddListHdr, listHdr) \
116
do { \
117
((dmList_t *)toAddListHdr)->blink->flink = ((dmList_t *)listHdr); \
118
((dmList_t *)toAddListHdr)->flink->blink = ((dmList_t *)listHdr)->blink; \
119
((dmList_t *)listHdr)->blink->flink = ((dmList_t *)toAddListHdr)->flink; \
120
((dmList_t *)listHdr)->blink = ((dmList_t *)toAddListHdr)->blink; \
121
DMLIST_INIT_HDR(toAddListHdr); \
122
} while (0)
123
124
#define DMLIST_ENQUEUE_LIST_AT_TAIL(toAddListHdr, listHdr) \
125
do { \
126
if (DMLIST_NOT_EMPTY(toAddListHdr)) \
127
{ \
128
DMLIST_ENQUEUE_LIST_AT_TAIL_FAST(toAddListHdr, listHdr); \
129
} \
130
} while (0)
131
132
#define DMLIST_ENQUEUE_LIST_AT_HEAD_FAST(toAddListHdr, listHdr) \
133
do { \
134
((dmList_t *)toAddListHdr)->blink->flink = ((dmList_t *)listHdr)->flink; \
135
((dmList_t *)toAddListHdr)->flink->blink = ((dmList_t *)listHdr); \
136
((dmList_t *)listHdr)->flink->blink = ((dmList_t *)toAddListHdr)->blink; \
137
((dmList_t *)listHdr)->flink = ((dmList_t *)toAddListHdr)->flink; \
138
DMLIST_INIT_HDR(toAddListHdr); \
139
} while (0)
140
141
#define DMLIST_ENQUEUE_LIST_AT_HEAD(toAddListHdr, listHdr) \
142
do { \
143
if (DMLIST_NOT_EMPTY(toAddListHdr)) \
144
{ \
145
DMLIST_ENQUEUE_LIST_AT_HEAD_FAST(toAddListHdr, listHdr); \
146
} \
147
} while (0)
148
149
#define TD_FIELD_OFFSET(baseType,fieldName) \
150
((bit32)((bitptr)(&(((baseType *)0)->fieldName))))
151
152
#define DMLIST_OBJECT_BASE(baseType,fieldName,fieldPtr) \
153
(void *)fieldPtr == (void *)0 ? (baseType *)0 : \
154
((baseType *)((bit8 *)(fieldPtr) - ((bitptr)(&(((baseType *)0)->fieldName)))))
155
156
157
158
159
#endif
/* __DMLIST_H__ */
160
161
dmList_s
Definition:
dmlist.h:31
dmList_s::blink
dmList_t * blink
Definition:
dmlist.h:33
dmList_s::flink
dmList_t * flink
Definition:
dmlist.h:32
dev
pms
RefTisa
discovery
dm
dmlist.h
Generated by
1.9.3