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
35typedef struct tdList_s tdList_t;
36
37struct tdList_s {
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) \
94do { \
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_t * blink
Definition: tdlist.h:39
tdList_t * flink
Definition: tdlist.h:38