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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [include/] [linux/] [lists.h] - Blame information for rev 1782

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1633 jcastillo
/*
2
 * lists.h:  Simple list macros for Linux
3
 */
4
 
5
#define DLNODE(ptype)                                           \
6
        struct {                                                \
7
                ptype * dl_prev;                                \
8
                ptype * dl_next;                                \
9
        }
10
 
11
#define DNODE_SINGLE(node) {(node),(node)}
12
#define DNODE_NULL {0,0}
13
 
14
#define DLIST_INIT(listnam)                                     \
15
        (listnam).dl_prev = &(listnam);                         \
16
        (listnam).dl_next = &(listnam);
17
 
18
#define DLIST_NEXT(listnam)     listnam.dl_next
19
#define DLIST_PREV(listnam)     listnam.dl_prev
20
 
21
#define DLIST_INSERT_AFTER(node, new, listnam)  do {            \
22
        (new)->listnam.dl_prev = (node);                        \
23
        (new)->listnam.dl_next = (node)->listnam.dl_next;       \
24
        (node)->listnam.dl_next->listnam.dl_prev = (new);       \
25
        (node)->listnam.dl_next = (new);                        \
26
        } while (0)
27
 
28
#define DLIST_INSERT_BEFORE(node, new, listnam) do {            \
29
        (new)->listnam.dl_next = (node);                        \
30
        (new)->listnam.dl_prev = (node)->listnam.dl_prev;       \
31
        (node)->listnam.dl_prev->listnam.dl_next = (new);       \
32
        (node)->listnam.dl_prev = (new);                        \
33
        } while (0)
34
 
35
#define DLIST_DELETE(node, listnam)     do {            \
36
        node->listnam.dl_prev->listnam.dl_next =                \
37
                node->listnam.dl_next;                          \
38
        node->listnam.dl_next->listnam.dl_prev =                \
39
                node->listnam.dl_prev;                          \
40
        } while (0)
41
 
42
/*
43
 * queue-style operations, which have a head and tail
44
 */
45
 
46
#define QUEUE_INIT(head, listnam, ptype)                                \
47
        (head)->listnam.dl_prev = (head)->listnam.dl_next = (ptype)(head);
48
 
49
#define QUEUE_FIRST(head, listnam) (head)->DLIST_NEXT(listnam)
50
#define QUEUE_LAST(head, listnam) (head)->DLIST_PREV(listnam)
51
#define QUEUE_EMPTY(head, listnam) \
52
        ((QUEUE_FIRST(head, listnam) == QUEUE_LAST(head, listnam)) && \
53
         ((u_long)QUEUE_FIRST(head, listnam) == (u_long)head))
54
 
55
#define QUEUE_ENTER(head, new, listnam, ptype) do {             \
56
        (new)->listnam.dl_prev = (ptype)(head);                 \
57
        (new)->listnam.dl_next = (head)->listnam.dl_next;       \
58
        (head)->listnam.dl_next->listnam.dl_prev = (new);       \
59
        (head)->listnam.dl_next = (new);                        \
60
        } while (0)
61
 
62
#define QUEUE_REMOVE(head, node, listnam) DLIST_DELETE(node, listnam)

powered by: WebSVN 2.1.0

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