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