The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/drm/drm_linux_list.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /* drm_linux_list.h -- linux list functions for the BSDs.
    2  * Created: Mon Apr 7 14:30:16 1999 by anholt@FreeBSD.org
    3  */
    4 /*-
    5  * Copyright 2003 Eric Anholt
    6  * All Rights Reserved.
    7  *
    8  * Permission is hereby granted, free of charge, to any person obtaining a
    9  * copy of this software and associated documentation files (the "Software"),
   10  * to deal in the Software without restriction, including without limitation
   11  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   12  * and/or sell copies of the Software, and to permit persons to whom the
   13  * Software is furnished to do so, subject to the following conditions:
   14  *
   15  * The above copyright notice and this permission notice (including the next
   16  * paragraph) shall be included in all copies or substantial portions of the
   17  * Software.
   18  *
   19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   22  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
   23  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
   24  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   25  * OTHER DEALINGS IN THE SOFTWARE.
   26  *
   27  * Authors:
   28  *    Eric Anholt <anholt@FreeBSD.org>
   29  *
   30  */
   31 
   32 #include <sys/cdefs.h>
   33 __FBSDID("$FreeBSD$");
   34 
   35 #ifndef _DRM_LINUX_LIST_H_
   36 #define _DRM_LINUX_LIST_H_
   37 
   38 struct list_head {
   39         struct list_head *next, *prev;
   40 };
   41 
   42 #define list_entry(ptr, type, member) container_of(ptr,type,member)
   43 #define hlist_entry(ptr, type, member) container_of(ptr,type,member)
   44 
   45 static __inline__ void
   46 INIT_LIST_HEAD(struct list_head *head) {
   47         (head)->next = head;
   48         (head)->prev = head;
   49 }
   50 
   51 static __inline__ int
   52 list_empty(struct list_head *head) {
   53         return (head)->next == head;
   54 }
   55 
   56 static __inline__ void
   57 list_add(struct list_head *new, struct list_head *head) {
   58         (head)->next->prev = new;
   59         (new)->next = (head)->next;
   60         (new)->prev = head;
   61         (head)->next = new;
   62 }
   63 
   64 static __inline__ void
   65 list_add_tail(struct list_head *entry, struct list_head *head) {
   66         (entry)->prev = (head)->prev;
   67         (entry)->next = head;
   68         (head)->prev->next = entry;
   69         (head)->prev = entry;
   70 }
   71 
   72 static __inline__ void
   73 list_del(struct list_head *entry) {
   74         (entry)->next->prev = (entry)->prev;
   75         (entry)->prev->next = (entry)->next;
   76 }
   77 
   78 static __inline__ void
   79 list_del_init(struct list_head *entry) {
   80         (entry)->next->prev = (entry)->prev;
   81         (entry)->prev->next = (entry)->next;
   82         INIT_LIST_HEAD(entry);
   83 }
   84 
   85 #define list_for_each(entry, head)                              \
   86     for (entry = (head)->next; entry != head; entry = (entry)->next)
   87 
   88 #define list_for_each_prev(entry, head) \
   89         for (entry = (head)->prev; entry != (head); \
   90                 entry = entry->prev)
   91 
   92 #define list_for_each_safe(entry, temp, head)                   \
   93     for (entry = (head)->next, temp = (entry)->next;            \
   94         entry != head;                                          \
   95         entry = temp, temp = entry->next)
   96 
   97 /**
   98  * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
   99  * @pos:        the type * to use as a loop cursor.
  100  * @n:          another type * to use as temporary storage
  101  * @head:       the head for your list.
  102  * @member:     the name of the list_struct within the struct.
  103  */
  104 #define list_for_each_entry_safe(pos, n, head, member)                  \
  105         for (pos = list_entry((head)->next, __typeof(*pos), member),    \
  106             n = list_entry(pos->member.next, __typeof(*pos), member);   \
  107             &pos->member != (head);                                     \
  108             pos = n, n = list_entry(n->member.next, __typeof(*n), member))
  109 
  110 #endif /* _DRM_LINUX_LIST_H_ */

Cache object: e8c06064d73d96b22713a125ab4197bf


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.