FreeBSD kernel pms device code
smlist.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
25
#ifndef __SMLIST_H__
26
#define __SMLIST_H__
27
28
typedef
struct
smList_s
smList_t
;
29
30
struct
smList_s
{
31
smList_t
*
flink
;
32
smList_t
*
blink
;
33
};
34
35
#define SMLIST_INIT_HDR(hdr) \
36
do { \
37
((smList_t *)(hdr))->flink = (smList_t *)(hdr); \
38
((smList_t *)(hdr))->blink = (smList_t *)(hdr); \
39
} while (0)
40
41
#define SMLIST_INIT_ELEMENT(hdr) \
42
do { \
43
((smList_t *)(hdr))->flink = (smList_t *)agNULL; \
44
((smList_t *)(hdr))->blink = (smList_t *)agNULL; \
45
} while (0)
46
47
#define SMLIST_ENQUEUE_AT_HEAD(toAddHdr,listHdr) \
48
do { \
49
((smList_t *)(toAddHdr))->flink = ((smList_t *)(listHdr))->flink; \
50
((smList_t *)(toAddHdr))->blink = (smList_t *)(listHdr) ; \
51
((smList_t *)(listHdr))->flink->blink = (smList_t *)(toAddHdr); \
52
((smList_t *)(listHdr))->flink = (smList_t *)(toAddHdr); \
53
} while (0)
54
55
#define SMLIST_ENQUEUE_AT_TAIL(toAddHdr,listHdr) \
56
do { \
57
((smList_t *)(toAddHdr))->flink = (smList_t *)(listHdr); \
58
((smList_t *)(toAddHdr))->blink = ((smList_t *)(listHdr))->blink; \
59
((smList_t *)(listHdr))->blink->flink = (smList_t *)(toAddHdr); \
60
((smList_t *)(listHdr))->blink = (smList_t *)(toAddHdr); \
61
} while (0)
62
63
#define SMLIST_EMPTY(listHdr) \
64
(((smList_t *)(listHdr))->flink == ((smList_t *)(listHdr)))
65
66
#define SMLIST_NOT_EMPTY(listHdr) \
67
(!SMLIST_EMPTY(listHdr))
68
69
#define SMLIST_DEQUEUE_THIS(hdr) \
70
do { \
71
((smList_t *)(hdr))->blink->flink = ((smList_t *)(hdr))->flink; \
72
((smList_t *)(hdr))->flink->blink = ((smList_t *)(hdr))->blink; \
73
((smList_t *)(hdr))->flink = ((smList_t *)(hdr))->blink = agNULL; \
74
} while (0)
75
76
#define SMLIST_DEQUEUE_FROM_HEAD_FAST(atHeadHdr,listHdr) \
77
do { \
78
*((smList_t **)(atHeadHdr)) = ((smList_t *)(listHdr))->flink; \
79
(*((smList_t **)(atHeadHdr)))->flink->blink = (smList_t *)(listHdr); \
80
((smList_t *)(listHdr))->flink = (*(smList_t **)(atHeadHdr))->flink; \
81
} while (0)
82
83
#define SMLIST_DEQUEUE_FROM_HEAD(atHeadHdr,listHdr) \
84
do { \
85
if (SMLIST_NOT_EMPTY((listHdr))) \
86
{ \
87
SMLIST_DEQUEUE_FROM_HEAD_FAST(atHeadHdr,listHdr); \
88
} \
89
else \
90
{ \
91
(*((smList_t **)(atHeadHdr))) = (smList_t *)agNULL; \
92
} \
93
} while (0)
94
95
#define SMLIST_DEQUEUE_FROM_TAIL_FAST(atTailHdr,listHdr) \
96
do { \
97
(*((smList_t **)(atTailHdr))) = ((smList_t *)(listHdr))->blink; \
98
(*((smList_t **)(atTailHdr)))->blink->flink = (smList_t *)(listHdr); \
99
((smList_t *)(listHdr))->blink = (*((smList_t **)(atTailHdr)))->blink; \
100
} while (0)
101
102
#define SMLIST_DEQUEUE_FROM_TAIL(atTailHdr,listHdr) \
103
do { \
104
if (SMLIST_NOT_EMPTY((listHdr))) \
105
{ \
106
SMLIST_DEQUEUE_FROM_TAIL_FAST(atTailHdr,listHdr); \
107
} \
108
else \
109
{ \
110
(*((smList_t **)(atTailHdr))) = (smList_t *)agNULL; \
111
} \
112
} while (0)
113
114
#define SMLIST_ENQUEUE_LIST_AT_TAIL_FAST(toAddListHdr, listHdr) \
115
do { \
116
((smList_t *)toAddListHdr)->blink->flink = ((smList_t *)listHdr); \
117
((smList_t *)toAddListHdr)->flink->blink = ((smList_t *)listHdr)->blink; \
118
((smList_t *)listHdr)->blink->flink = ((smList_t *)toAddListHdr)->flink; \
119
((smList_t *)listHdr)->blink = ((smList_t *)toAddListHdr)->blink; \
120
SMLIST_INIT_HDR(toAddListHdr); \
121
} while (0)
122
123
#define SMLIST_ENQUEUE_LIST_AT_TAIL(toAddListHdr, listHdr) \
124
do { \
125
if (SMLIST_NOT_EMPTY(toAddListHdr)) \
126
{ \
127
SMLIST_ENQUEUE_LIST_AT_TAIL_FAST(toAddListHdr, listHdr); \
128
} \
129
} while (0)
130
131
#define SMLIST_ENQUEUE_LIST_AT_HEAD_FAST(toAddListHdr, listHdr) \
132
do { \
133
((smList_t *)toAddListHdr)->blink->flink = ((smList_t *)listHdr)->flink; \
134
((smList_t *)toAddListHdr)->flink->blink = ((smList_t *)listHdr); \
135
((smList_t *)listHdr)->flink->blink = ((smList_t *)toAddListHdr)->blink; \
136
((smList_t *)listHdr)->flink = ((smList_t *)toAddListHdr)->flink; \
137
SMLIST_INIT_HDR(toAddListHdr); \
138
} while (0)
139
140
#define SMLIST_ENQUEUE_LIST_AT_HEAD(toAddListHdr, listHdr) \
141
do { \
142
if (SMLIST_NOT_EMPTY(toAddListHdr)) \
143
{ \
144
SMLIST_ENQUEUE_LIST_AT_HEAD_FAST(toAddListHdr, listHdr); \
145
} \
146
} while (0)
147
148
#define TD_FIELD_OFFSET(baseType,fieldName) \
149
((bit32)((bitptr)(&(((baseType *)0)->fieldName))))
150
151
#define SMLIST_OBJECT_BASE(baseType,fieldName,fieldPtr) \
152
(void *)fieldPtr == (void *)0 ? (baseType *)0 : \
153
((baseType *)((bit8 *)(fieldPtr) - ((bitptr)(&(((baseType *)0)->fieldName)))))
154
155
156
157
158
#endif
/* __SMLIST_H__ */
159
160
161
smList_s
Definition:
smlist.h:30
smList_s::flink
smList_t * flink
Definition:
smlist.h:31
smList_s::blink
smList_t * blink
Definition:
smlist.h:32
dev
pms
RefTisa
sat
src
smlist.h
Generated by
1.9.3