18#define NULL ((void*)0)
22#ifdef INLINE_TO_FORCEINLINE
23#define INLINE__ __inline__ __attribute__((always_inline))
25#define INLINE__ __inline
42#define OSAL_LIST_HEAD_INIT(name) \
47#define OSAL_LIST_HEAD(name) \
48 struct osal_list_head name = OSAL_LIST_HEAD_INIT(name)
88 osal___list_add(cur, head, head->
next);
101 osal___list_add(cur, head->
prev, head);
132 osal___list_del(entry->
prev, entry->
next);
135#define OSAL_LIST_POISON1 0x00100100
136#define OSAL_LIST_POISON2 0x00200200
143 osal___list_del(entry->
prev, entry->
next);
167 osal_list_replace(old, _new);
168 OSAL_INIT_LIST_HEAD(old);
177 osal___list_del_entry(entry);
178 OSAL_INIT_LIST_HEAD(entry);
188 osal___list_del_entry(list);
189 osal_list_add(list, head);
200 osal___list_del_entry(list);
201 osal_list_add_tail(list, head);
216 return list->
next == head;
229 return head->
next == head;
265 if (osal_list_empty(head) == 0) {
267 osal_list_move_tail(first, head);
277 return (osal_list_empty(head) == 0) && (head->
next == head->
prev);
288 head->
next = new_first;
289 new_first->
prev = head;
309 if (osal_list_empty(head) != 0) {
312 if (osal_list_is_singular(head) != 0 &&
313 ((head->
next != entry) && (head != entry))) {
316 (entry == head) ? OSAL_INIT_LIST_HEAD(list) : osal___list_cut_position(list, head, entry);
341 if (osal_list_empty(list) == 0) {
342 osal___list_splice(list, head, head->
next);
354 if (osal_list_empty(list) == 0) {
355 osal___list_splice(list, head->
prev, head);
369 if (osal_list_empty(list) == 0) {
370 osal___list_splice(list, head, head->
next);
371 OSAL_INIT_LIST_HEAD(list);
386 if (osal_list_empty(list) == 0) {
387 osal___list_splice(list, head->
prev, head);
388 OSAL_INIT_LIST_HEAD(list);
393#ifdef __compiler_offsetof
394#define osal_offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
396#define osal_offsetof(TYPE, MEMBER) ((int)(unsigned long)&((TYPE *)0)->MEMBER)
399#define osal_container_of(ptr, type, member) ({ \
400 const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
401 (type *)((char *)__mptr - osal_offsetof(type, member)); })
409#define osal_list_entry(ptr, type, member) \
410 osal_container_of(ptr, type, member)
420#define osal_list_first_entry(ptr, type, member) \
421 osal_list_entry((ptr)->next, type, member)
428#define osal_list_for_each(pos, head) \
429 for ((pos) = (head)->next; (pos) != (head); (pos) = (pos)->next)
439#define osal___list_for_each(pos, head) \
440 for ((pos) = (head)->next; (pos) != (head); (pos) = (pos)->next)
447#define osal_list_for_each_prev(pos, head) \
448 for ((pos) = (head)->prev; (pos) != (head); (pos) = (pos)->prev)
456#define osal_list_for_each_safe(pos, n, head) \
457 for ((pos) = (head)->next, (n) = (pos)->next; (pos) != (head); \
458 (pos) = (n), (n) = (pos)->next)
466#define osal_list_for_each_prev_safe(pos, n, head) \
467 for ((pos) = (head)->prev, (n) = (pos)->prev; \
469 (pos) = (n), (n) = (pos)->prev)
477#define osal_list_for_each_entry(pos, head, member) \
478 for ((pos) = osal_list_entry((head)->next, __typeof__(*pos), member); \
479 &pos->member != (head); \
480 (pos) = osal_list_entry((pos)->member.next, __typeof__(*pos), member))
488#define osal_list_for_each_entry_reverse(pos, head, member) \
489 for ((pos) = osal_list_entry((head)->prev, __typeof__(*pos), member); \
490 &pos->member != (head); \
491 (pos) = osal_list_entry((pos)->member.prev, __typeof__(*pos), member))
501#define osal_list_prepare_entry(pos, head, member) \
502 ((pos) ? : osal_list_entry(head, __typeof__(*pos), member))
513#define osal_list_for_each_entry_continue(pos, head, member) \
514 for ((pos) = osal_list_entry((pos)->member.next, __typeof__(*pos), member); \
515 &pos->member != (head); \
516 (pos) = osal_list_entry((pos)->member.next, __typeof__(*pos), member))
527#define osal_list_for_each_entry_continue_reverse(pos, head, member) \
528 for ((pos) = osal_list_entry((pos)->member.prev, __typeof__(*pos), member); \
529 &pos->member != (head); \
530 (pos) = osal_list_entry((pos)->member.prev, __typeof__(*pos), member))
540#define osal_list_for_each_entry_from(pos, head, member) \
541 for (; &pos->member != (head); \
542 (pos) = osal_list_entry((pos)->member.next, __typeof__(*pos), member))
551#define osal_list_for_each_entry_safe(pos, n, head, member) \
552 for ((pos) = osal_list_entry((head)->next, __typeof__(*pos), member), \
553 (n) = osal_list_entry((pos)->member.next, __typeof__(*pos), member); \
554 &pos->member != (head); \
555 (pos) = (n), (n) = osal_list_entry((n)->member.next, __typeof__(*n), member))
567#define osal_list_for_each_entry_safe_continue(pos, n, head, member) \
568 for ((pos) = osal_list_entry((pos)->member.next, __typeof__(*pos), member), \
569 (n) = osal_list_entry((pos)->member.next, __typeof__(*pos), member); \
570 &pos->member != (head); \
571 (pos) = (n), (n) = osal_list_entry((n)->member.next, __typeof__(*n), member))
583#define osal_list_for_each_entry_safe_from(pos, n, head, member) \
584 for ((n) = osal_list_entry((pos)->member.next, __typeof__(*pos), member); \
585 &pos->member != (head); \
586 (pos) = (n), (n) = osal_list_entry((n)->member.next, __typeof__(*n), member))
599#define osal_list_for_each_entry_safe_reverse(pos, n, head, member) \
600 for ((pos) = osal_list_entry((head)->prev, __typeof__(*pos), member), \
601 (n) = osal_list_entry((pos)->member.prev, __typeof__(*pos), member); \
602 &pos->member != (head); \
603 (pos) = (n), (n) = osal_list_entry((n)->member.prev, __typeof__(*n), member))
617#define osal_list_safe_reset_next(pos, n, member) \
618 (n) = osal_list_entry((pos)->member.next, __typeof__(*pos), member)
633#define OSAL_HLIST_HEAD_INIT \
637#define OSAL_HLIST_HEAD(name) struct osal_hlist_head name = { .first = NULL }
638#define INIT_OSAL_HLIST_HEAD(ptr) ((ptr)->first = NULL)
674 if (osal_hlist_unhashed(n) == 0) {
676 INIT_OSAL_HLIST_NODE(n);
733#define osal_hlist_entry(ptr, type, member) osal_container_of(ptr, type, member)
735#define osal_hlist_for_each(pos, head) \
736 for ((pos) = (head)->first; (pos); (pos) = (pos)->next)
738#define osal_hlist_for_each_safe(pos, n, head) \
739 for ((pos) = (head)->first; (pos) && ({ (n) = (pos)->next; 1; }); \
749#define osal_hlist_for_each_entry(tpos, pos, head, member) \
750 for ((pos) = (head)->first; \
752 ({ (tpos) = osal_hlist_entry((pos), __typeof__(*tpos), member); 1; }); \
761#define osal_hlist_for_each_entry_continue(tpos, pos, member) \
762 for ((pos) = (pos)->next; \
764 ({ (tpos) = osal_hlist_entry((pos), __typeof__(*tpos), member); 1; }); \
773#define osal_hlist_for_each_entry_from(tpos, pos, member) \
775 ({ (tpos) = osal_hlist_entry((pos), __typeof__(*tpos), member); 1; }); \
786#define osal_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
787 for ((pos) = (head)->first; \
788 (pos) && ({ (n) = (pos)->next; 1; }) && \
789 ({ (tpos) = osal_hlist_entry((pos), __typeof__(*tpos), member); 1; }); \
792#define get_first_item(attached, type, member) \
793 ((type *)((char *)((attached)->next) - (unsigned long)(&((type *)0)->member)))
#define NULL
Definition osal_list.h:18
#define OSAL_LIST_POISON1
Definition osal_list.h:135
#define INLINE__
Definition osal_list.h:25
#define OSAL_LIST_POISON2
Definition osal_list.h:136
Definition osal_list.h:629
struct osal_hlist_node * first
Definition osal_list.h:630
Definition osal_list.h:626
struct osal_hlist_node * next
Definition osal_list.h:627
struct osal_hlist_node ** pprev
Definition osal_list.h:627
Definition osal_list.h:39
struct osal_list_head * next
Definition osal_list.h:40
struct osal_list_head * prev
Definition osal_list.h:40