Tick Chen <tick@openmoko.com>
- Copyright (C) 2008 Openmoko Inc.
+ Copyright (C) 2008 Openmoko Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
#ifndef _LINUX_LIST_H
#define _LINUX_LIST_H
-#define LIST_POISON1 ((void *) 0x00100100)
-#define LIST_POISON2 ((void *) 0x00200200)
-
struct list_head {
- struct list_head *next, *prev;
+ struct list_head *next, *prev;
};
+#define LIST_POISON1 ((struct list_head *) 0x00100100)
+#define LIST_POISON2 ((struct list_head *) 0x00200200)
+
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
-static inline void __list_add(struct list_head *new,
- struct list_head *prev,
- struct list_head *next) {
- next->prev = new;
- new->next = next;
- new->prev = prev;
- prev->next = new;
+static inline void __list_add(struct list_head *newitem,
+ struct list_head *prev, struct list_head *next)
+{
+ next->prev = newitem;
+ newitem->next = next;
+ newitem->prev = prev;
+ prev->next = newitem;
}
/**
* list_add - add a new entry
- * @new: new entry to be added
+ * @newitem: new entry to be added
* @head: list head to add it after
*
* Insert a new entry after the specified head.
* This is good for implementing stacks.
*/
-static inline void list_add(struct list_head *new, struct list_head *head) {
- __list_add(new, head, head->next);
+static inline void list_add(struct list_head *newitem, struct list_head *head)
+{
+ __list_add(newitem, head, head->next);
}
/**
* list_add_tail - add a new entry
- * @new: new entry to be added
+ * @newitem: new entry to be added
* @head: list head to add it before
*
* Insert a new entry before the specified head.
* This is useful for implementing queues.
*/
-static inline void list_add_tail(struct list_head *new, struct list_head *head) {
- __list_add(new, head->prev, head);
+static inline void list_add_tail(struct list_head *newitem,
+ struct list_head *head)
+{
+ __list_add(newitem, head->prev, head);
}
-
/*
* Delete a list entry by making the prev/next entries
* point to each other.
* This is only for internal list manipulation where we know
* the prev/next entries already!
*/
-static inline void __list_del(struct list_head * prev, struct list_head * next) {
- next->prev = prev;
- prev->next = next;
+static inline void __list_del(struct list_head *prev, struct list_head *next)
+{
+ next->prev = prev;
+ prev->next = next;
}
/**
* Note: list_empty on entry does not return true after this, the entry is
* in an undefined state.
*/
-static inline void list_del(struct list_head *entry) {
- __list_del(entry->prev, entry->next);
- entry->next = LIST_POISON1;
- entry->prev = LIST_POISON2;
+static inline void list_del(struct list_head *entry)
+{
+ __list_del(entry->prev, entry->next);
+ entry->next = LIST_POISON1;
+ entry->prev = LIST_POISON2;
}
/**
* list_del_init - deletes entry from list and reinitialize it.
* @entry: the element to delete from the list.
*/
-static inline void list_del_init(struct list_head *entry) {
- __list_del(entry->prev, entry->next);
- INIT_LIST_HEAD(entry);
+static inline void list_del_init(struct list_head *entry)
+{
+ __list_del(entry->prev, entry->next);
+ INIT_LIST_HEAD(entry);
}
/**
* @list: the entry to move
* @head: the head that will precede our entry
*/
-static inline void list_move(struct list_head *list, struct list_head *head) {
- __list_del(list->prev, list->next);
- list_add(list, head);
+static inline void list_move(struct list_head *list, struct list_head *head)
+{
+ __list_del(list->prev, list->next);
+ list_add(list, head);
}
/**
* @head: the head that will follow our entry
*/
static inline void list_move_tail(struct list_head *list,
- struct list_head *head) {
- __list_del(list->prev, list->next);
- list_add_tail(list, head);
+ struct list_head *head)
+{
+ __list_del(list->prev, list->next);
+ list_add_tail(list, head);
}
/**
* list_empty - tests whether a list is empty
* @head: the list to test.
*/
-static inline int list_empty(const struct list_head *head) {
- return head->next == head;
+static inline int list_empty(const struct list_head *head)
+{
+ return head->next == head;
}
/**
*
* @head: the list to test.
*/
-static inline int list_empty_careful(const struct list_head *head) {
- struct list_head *next = head->next;
- return (next == head) && (next == head->prev);
+static inline int list_empty_careful(const struct list_head *head)
+{
+ struct list_head *next = head->next;
+ return (next == head) && (next == head->prev);
}
-static inline void __list_splice(struct list_head *list,
- struct list_head *head) {
- struct list_head *first = list->next;
- struct list_head *last = list->prev;
- struct list_head *at = head->next;
+static inline void __list_splice(struct list_head *list, struct list_head *head)
+{
+ struct list_head *first = list->next;
+ struct list_head *last = list->prev;
+ struct list_head *at = head->next;
- first->prev = head;
- head->next = first;
+ first->prev = head;
+ head->next = first;
- last->next = at;
- at->prev = last;
+ last->next = at;
+ at->prev = last;
}
/**
* @list: the new list to add.
* @head: the place to add it in the first list.
*/
-static inline void list_splice(struct list_head *list, struct list_head *head) {
- if (!list_empty(list))
- __list_splice(list, head);
+static inline void list_splice(struct list_head *list, struct list_head *head)
+{
+ if (!list_empty(list))
+ __list_splice(list, head);
}
/**
* The list at @list is reinitialised
*/
static inline void list_splice_init(struct list_head *list,
- struct list_head *head) {
- if (!list_empty(list)) {
- __list_splice(list, head);
- INIT_LIST_HEAD(list);
- }
+ struct list_head *head)
+{
+ if (!list_empty(list)) {
+ __list_splice(list, head);
+ INIT_LIST_HEAD(list);
+ }
}
-
-
#define _offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \