155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak/* 355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * Simple list implementation mostly take from the Linux Kernel 455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak */ 555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#ifndef _LIST_H_ 755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define _LIST_H_ 855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakstruct list_head { 1055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak struct list_head *next, *prev; 1155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak}; 1255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 1355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid INIT_LIST_HEAD(struct list_head *list); 1455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid __list_add(struct list_head *new, struct list_head *prev, 1555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak struct list_head *next); 1655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid __list_del(struct list_head *prev, struct list_head *next); 1755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_add(struct list_head *new, struct list_head *head); 1855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_add_tail(struct list_head *new, struct list_head *head); 1955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_del(struct list_head *entry); 2055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_replace(struct list_head *old, struct list_head *new); 2155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define LIST_HEAD_INIT(name) { &(name), &(name) } 2355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) 2555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define list_for_each(pos, head) \ 2755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak for (pos = (head)->next; pos->next, pos != (head); pos = pos->next) 2855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define offsetof(type, member) ((int) &((type *)0)->member) 3055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define container_of(ptr, type, member) ({ \ 3255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak const typeof(((type *)0)->member) *__mptr = (ptr); \ 3355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak (type *)((char *)__mptr - offsetof(type, member)); }) 3455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define list_entry(ptr, type, member) \ 3655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak container_of(ptr, type, member) 3755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define list_for_each_entry(pos, head, member) \ 3955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak for (pos = list_entry((head)->next, typeof(*pos), member); \ 4055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pos->member.next, &pos->member != (head); \ 4155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pos = list_entry(pos->member.next, typeof(*pos), member)) 4255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 4355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define list_for_each_entry_safe(pos, n, head, member) \ 4455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak for (pos = list_entry((head)->next, typeof(*pos), member), \ 4555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak n = list_entry(pos->member.next, typeof(*pos), member); \ 4655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak &pos->member != (head); \ 4755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pos = n, n = list_entry(n->member.next, typeof(*n), member)) 4855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 4955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#define list_for_each_safe(pos, n, head) \ 5055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak for (pos = (head)->next, n = pos->next; pos != (head); \ 5155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak pos = n, n = pos->next) 5255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 5355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#endif 54