OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-s390/] [queue.h] - Rev 1774

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 *  include/asm-s390/queue.h
 *
 *  S390 version
 *    Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
 *    Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
 *
 *  A little set of queue utilies.
 */
#ifndef __ASM_QUEUE_H
#define __ASM_QUEUE_H
#include <linux/stddef.h>
 
typedef struct queue
{
	struct queue *next;	
} queue;
 
typedef queue list;
 
typedef struct
{
	queue *head;
	queue *tail;
} qheader;
 
static __inline__ void init_queue(qheader *qhead)
{
	memset(qhead,0,sizeof(*qhead));
}
 
static __inline__ void enqueue_tail(qheader *qhead,queue *member)
{	
	if(member)
	{
		queue *tail=qhead->tail;
 
		if(tail)
			tail->next=member;
		else
 
			qhead->head=member;
		qhead->tail=member;
		member->next=NULL;
	}
} 
 
static __inline__ queue *dequeue_head(qheader *qhead)
{
	queue *head=qhead->head,*next_head;
 
	if(head)
	{
		next_head=head->next;
		qhead->head=next_head;
	        if(!next_head)
			qhead->tail=NULL;
	}
	return(head);
}
 
static __inline__ void init_list(list **lhead)
{
	*lhead=NULL;
}
 
static __inline__ void add_to_list(list **lhead,list *member)
{
	member->next=*lhead;
	*lhead=member;
}
 
static __inline__ list *remove_listhead(list **lhead)
{
	list *oldhead=*lhead;
 
	if(oldhead)
		*lhead=(*lhead)->next;
	return(oldhead);
}
 
static __inline__ void add_to_list_tail(list **lhead,list *member)
{
	list *curr,*prev;
	if(*lhead==NULL)
		*lhead=member;
	else
	{
		prev=*lhead;
		for(curr=(*lhead)->next;curr!=NULL;curr=curr->next)
			prev=curr;
		prev->next=member;
	}
}
static __inline__ void add_to_list_tail_null(list **lhead,list *member)
{
	member->next=NULL;
	add_to_list_tail_null(lhead,member);
}
 
 
static __inline__ int is_in_list(list *lhead,list *member)
{
	list *curr;
 
	for(curr=lhead;curr!=NULL;curr=curr->next)
		if(curr==member)
			return(1);
	return(0);
}
 
static __inline__ int get_prev(list *lhead,list *member,list **prev)
{
	list *curr;
 
	*prev=NULL;
	for(curr=lhead;curr!=NULL;curr=curr->next)
	{
		if(curr==member)
			return(1);
		*prev=curr;
	}
	*prev=NULL;
	return(0);
}
 
 
 
static __inline__ int remove_from_list(list **lhead,list *member)
{
	list *prev;
 
	if(get_prev(*lhead,member,&prev))
	{
 
		if(prev)
			prev->next=member->next;
		else
			*lhead=member->next;
		return(1);
	}
	return(0);
}
 
static __inline__ int remove_from_queue(qheader *qhead,queue *member)
{
	queue *prev;
 
	if(get_prev(qhead->head,(list *)member,(list **)&prev))
	{
 
		if(prev)
		{
			prev->next=member->next;
			if(prev->next==NULL)
				qhead->tail=prev;
		}
		else
		{
			if(qhead->head==qhead->tail)
				qhead->tail=NULL;
			qhead->head=member->next;
		}
		return(1);
	}
	return(0);
}
 
#endif /* __ASM_QUEUE_H */
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.