1 /* SPDX-License-Identifier: BSD-3-Clause 2 * 3 * Copyright 2017 NXP 4 * 5 */ 6 7 #ifndef __DPAA_LIST_H 8 #define __DPAA_LIST_H 9 10 /****************/ 11 /* Linked-lists */ 12 /****************/ 13 14 struct list_head { 15 struct list_head *prev; 16 struct list_head *next; 17 }; 18 19 #define COMPAT_LIST_HEAD(n) \ 20 struct list_head n = { \ 21 .prev = &n, \ 22 .next = &n \ 23 } 24 25 #define INIT_LIST_HEAD(p) \ 26 do { \ 27 struct list_head *__p298 = (p); \ 28 __p298->next = __p298; \ 29 __p298->prev = __p298->next; \ 30 } while (0) 31 #define list_entry(node, type, member) \ 32 (type *)((void *)node - offsetof(type, member)) 33 #define list_empty(p) \ 34 __extension__ ({ \ 35 const struct list_head *__p298 = (p); \ 36 ((__p298->next == __p298) && (__p298->prev == __p298)); \ 37 }) 38 #define list_first_entry(ptr, type, member) \ 39 list_entry((ptr)->next, type, member) 40 #define list_add(p, l) \ 41 do { \ 42 struct list_head *__p298 = (p); \ 43 struct list_head *__l298 = (l); \ 44 __p298->next = __l298->next; \ 45 __p298->prev = __l298; \ 46 __l298->next->prev = __p298; \ 47 __l298->next = __p298; \ 48 } while (0) 49 #define list_add_tail(p, l) \ 50 do { \ 51 struct list_head *__p298 = (p); \ 52 struct list_head *__l298 = (l); \ 53 __p298->prev = __l298->prev; \ 54 __p298->next = __l298; \ 55 __l298->prev->next = __p298; \ 56 __l298->prev = __p298; \ 57 } while (0) 58 #define list_for_each(i, l) \ 59 for (i = (l)->next; i != (l); i = i->next) 60 #define list_for_each_safe(i, j, l) \ 61 for (i = (l)->next, j = i->next; i != (l); \ 62 i = j, j = i->next) 63 #define list_for_each_entry(i, l, name) \ 64 for (i = list_entry((l)->next, typeof(*i), name); &i->name != (l); \ 65 i = list_entry(i->name.next, typeof(*i), name)) 66 #define list_for_each_entry_safe(i, j, l, name) \ 67 for (i = list_entry((l)->next, typeof(*i), name), \ 68 j = list_entry(i->name.next, typeof(*j), name); \ 69 &i->name != (l); \ 70 i = j, j = list_entry(j->name.next, typeof(*j), name)) 71 #define list_del(i) \ 72 do { \ 73 (i)->next->prev = (i)->prev; \ 74 (i)->prev->next = (i)->next; \ 75 } while (0) 76 77 #endif /* __DPAA_LIST_H */ 78