source: mainline/boot/arch/ia64/loader/gefi/inc/efilink.h@ 86018c1

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 86018c1 was 7208b6c, checked in by Jakub Vana <jakub.vana@…>, 17 years ago

Basic IA64 boot and kernel suport for real machines

  • Property mode set to 100644
File size: 3.8 KB
Line 
1#ifndef _EFI_LINK_H
2#define _EFI_LINK_H
3
4/*++
5
6Copyright (c) 1998 Intel Corporation
7
8Module Name:
9
10 link.h (renamed efilink.h to avoid conflicts)
11
12Abstract:
13
14 EFI link list macro's
15
16
17
18Revision History
19
20--*/
21
22#ifndef EFI_NT_EMUL
23
24//
25// List entry - doubly linked list
26//
27
28typedef struct _LIST_ENTRY {
29 struct _LIST_ENTRY *Flink;
30 struct _LIST_ENTRY *Blink;
31} LIST_ENTRY;
32
33#endif
34
35
36//
37// VOID
38// InitializeListHead(
39// LIST_ENTRY *ListHead
40// );
41//
42
43#define InitializeListHead(ListHead) \
44 (ListHead)->Flink = ListHead; \
45 (ListHead)->Blink = ListHead;
46
47//
48// BOOLEAN
49// IsListEmpty(
50// PLIST_ENTRY ListHead
51// );
52//
53
54#define IsListEmpty(ListHead) \
55 ((ListHead)->Flink == (ListHead))
56
57//
58// VOID
59// RemoveEntryList(
60// PLIST_ENTRY Entry
61// );
62//
63
64#define _RemoveEntryList(Entry) { \
65 LIST_ENTRY *_Blink, *_Flink; \
66 _Flink = (Entry)->Flink; \
67 _Blink = (Entry)->Blink; \
68 _Blink->Flink = _Flink; \
69 _Flink->Blink = _Blink; \
70 }
71
72#if EFI_DEBUG
73 #define RemoveEntryList(Entry) \
74 _RemoveEntryList(Entry); \
75 (Entry)->Flink = (LIST_ENTRY *) BAD_POINTER; \
76 (Entry)->Blink = (LIST_ENTRY *) BAD_POINTER;
77#else
78 #define RemoveEntryList(Entry) \
79 _RemoveEntryList(Entry);
80#endif
81
82//
83// VOID
84// InsertTailList(
85// PLIST_ENTRY ListHead,
86// PLIST_ENTRY Entry
87// );
88//
89
90#define InsertTailList(ListHead,Entry) {\
91 LIST_ENTRY *_ListHead, *_Blink; \
92 _ListHead = (ListHead); \
93 _Blink = _ListHead->Blink; \
94 (Entry)->Flink = _ListHead; \
95 (Entry)->Blink = _Blink; \
96 _Blink->Flink = (Entry); \
97 _ListHead->Blink = (Entry); \
98 }
99
100//
101// VOID
102// InsertHeadList(
103// PLIST_ENTRY ListHead,
104// PLIST_ENTRY Entry
105// );
106//
107
108#define InsertHeadList(ListHead,Entry) {\
109 LIST_ENTRY *_ListHead, *_Flink; \
110 _ListHead = (ListHead); \
111 _Flink = _ListHead->Flink; \
112 (Entry)->Flink = _Flink; \
113 (Entry)->Blink = _ListHead; \
114 _Flink->Blink = (Entry); \
115 _ListHead->Flink = (Entry); \
116 }
117
118// VOID
119// SwapListEntries(
120// PLIST_ENTRY Entry1,
121// PLIST_ENTRY Entry2
122// );
123//
124// Put Entry2 before Entry1
125//
126#define SwapListEntries(Entry1,Entry2) {\
127 LIST_ENTRY *Entry1Flink, *Entry1Blink; \
128 LIST_ENTRY *Entry2Flink, *Entry2Blink; \
129 Entry2Flink = (Entry2)->Flink; \
130 Entry2Blink = (Entry2)->Blink; \
131 Entry1Flink = (Entry1)->Flink; \
132 Entry1Blink = (Entry1)->Blink; \
133 Entry2Blink->Flink = Entry2Flink; \
134 Entry2Flink->Blink = Entry2Blink; \
135 (Entry2)->Flink = Entry1; \
136 (Entry2)->Blink = Entry1Blink; \
137 Entry1Blink->Flink = (Entry2); \
138 (Entry1)->Blink = (Entry2); \
139 }
140
141//
142// EFI_FIELD_OFFSET - returns the byte offset to a field within a structure
143//
144
145#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field)))
146
147//
148// CONTAINING_RECORD - returns a pointer to the structure
149// from one of it's elements.
150//
151
152#define _CR(Record, TYPE, Field) \
153 ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
154
155#if EFI_DEBUG
156 #define CR(Record, TYPE, Field, Sig) \
157 _CR(Record, TYPE, Field)->Signature != Sig ? \
158 (TYPE *) ASSERT_STRUCT(_CR(Record, TYPE, Field), Record) : \
159 _CR(Record, TYPE, Field)
160#else
161 #define CR(Record, TYPE, Field, Signature) \
162 _CR(Record, TYPE, Field)
163#endif
164
165
166//
167// A lock structure
168//
169
170typedef struct _FLOCK {
171 EFI_TPL Tpl;
172 EFI_TPL OwnerTpl;
173 UINTN Lock;
174} FLOCK;
175
176#endif
177
Note: See TracBrowser for help on using the repository browser.