Fix PCI config space access for MIPS boards.
[linux-2.6/linux-mips.git] / include / asm-s390 / queue.h
blob1e78ea8bf58bae63800b8e7ca62d4474b0423a90
1 /*
2 * include/asm-s390/queue.h
4 * S390 version
5 * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
6 * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
8 * A little set of queue utilies.
9 */
10 #ifndef __ASM_QUEUE_H
11 #define __ASM_QUEUE_H
12 #include <linux/stddef.h>
14 typedef struct queue
16 struct queue *next;
17 } queue;
19 typedef queue list;
21 typedef struct
23 queue *head;
24 queue *tail;
25 } qheader;
27 static __inline__ void init_queue(qheader *qhead)
29 memset(qhead,0,sizeof(*qhead));
32 static __inline__ void enqueue_tail(qheader *qhead,queue *member)
34 if(member)
36 queue *tail=qhead->tail;
38 if(tail)
39 tail->next=member;
40 else
42 qhead->head=member;
43 qhead->tail=member;
44 member->next=NULL;
48 static __inline__ queue *dequeue_head(qheader *qhead)
50 queue *head=qhead->head,*next_head;
52 if(head)
54 next_head=head->next;
55 qhead->head=next_head;
56 if(!next_head)
57 qhead->tail=NULL;
59 return(head);
62 static __inline__ void init_list(list **lhead)
64 *lhead=NULL;
67 static __inline__ void add_to_list(list **lhead,list *member)
69 member->next=*lhead;
70 *lhead=member;
73 static __inline__ list *remove_listhead(list **lhead)
75 list *oldhead=*lhead;
77 if(oldhead)
78 *lhead=(*lhead)->next;
79 return(oldhead);
82 static __inline__ void add_to_list_tail(list **lhead,list *member)
84 list *curr,*prev;
85 if(*lhead==NULL)
86 *lhead=member;
87 else
89 prev=*lhead;
90 for(curr=(*lhead)->next;curr!=NULL;curr=curr->next)
91 prev=curr;
92 prev->next=member;
95 static __inline__ void add_to_list_tail_null(list **lhead,list *member)
97 member->next=NULL;
98 add_to_list_tail_null(lhead,member);
102 static __inline__ int is_in_list(list *lhead,list *member)
104 list *curr;
106 for(curr=lhead;curr!=NULL;curr=curr->next)
107 if(curr==member)
108 return(1);
109 return(0);
112 static __inline__ int get_prev(list *lhead,list *member,list **prev)
114 list *curr;
116 *prev=NULL;
117 for(curr=lhead;curr!=NULL;curr=curr->next)
119 if(curr==member)
120 return(1);
121 *prev=curr;
123 *prev=NULL;
124 return(0);
129 static __inline__ int remove_from_list(list **lhead,list *member)
131 list *prev;
133 if(get_prev(*lhead,member,&prev))
136 if(prev)
137 prev->next=member->next;
138 else
139 *lhead=member->next;
140 return(1);
142 return(0);
145 static __inline__ int remove_from_queue(qheader *qhead,queue *member)
147 queue *prev;
149 if(get_prev(qhead->head,(list *)member,(list **)&prev))
152 if(prev)
154 prev->next=member->next;
155 if(prev->next==NULL)
156 qhead->tail=prev;
158 else
160 if(qhead->head==qhead->tail)
161 qhead->tail=NULL;
162 qhead->head=member->next;
164 return(1);
166 return(0);
169 #endif /* __ASM_QUEUE_H */