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/pms/RefTisa/sat/src/smlist.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 /*******************************************************************************
    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 

Cache object: ef788ed09424823c3e4fe6261876534f


[ 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.