Print this page

        

*** 1,11 **** /* * mr_sas_list.h: header for mr_sas * * Solaris MegaRAID driver for SAS2.0 controllers ! * Copyright (c) 2008-20012, LSI Logic Corporation. * All rights reserved. */ #ifndef _MR_SAS_LIST_H_ #define _MR_SAS_LIST_H_ --- 1,38 ---- /* * mr_sas_list.h: header for mr_sas * * Solaris MegaRAID driver for SAS2.0 controllers ! * Copyright (c) 2008-2012, LSI Logic Corporation. * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. */ #ifndef _MR_SAS_LIST_H_ #define _MR_SAS_LIST_H_
*** 37,166 **** #define INIT_LIST_HEAD(ptr) { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } ! /* ! * Insert a new entry between two known consecutive entries. ! * ! * This is only for internal list manipulation where we know ! * the prev/next entries already! ! */ ! static void __list_add(struct mlist_head *new, ! struct mlist_head *prev, ! struct mlist_head *next) ! { ! next->prev = new; ! new->next = next; ! new->prev = prev; ! prev->next = new; ! } ! ! ! /* ! * mlist_add - add a new entry ! * @new: 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 void mlist_add(struct mlist_head *new, struct mlist_head *head) ! { ! __list_add(new, head, head->next); ! } ! ! ! /* ! * mlist_add_tail - add a new entry ! * @new: 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 void mlist_add_tail(struct mlist_head *new, struct mlist_head *head) ! { ! __list_add(new, 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 void __list_del(struct mlist_head *prev, ! struct mlist_head *next) ! { ! next->prev = prev; ! prev->next = next; ! } ! ! #if 0 ! /* ! * mlist_del - deletes entry from list. ! * @entry: the element to delete from the list. ! * Note: list_empty on entry does not return true after this, the entry ! * is in an undefined state. ! */ ! ! static void mlist_del(struct mlist_head *entry) ! { ! __list_del(entry->prev, entry->next); ! entry->next = entry->prev = 0; ! } #endif - /* - * mlist_del_init - deletes entry from list and reinitialize it. - * @entry: the element to delete from the list. - */ - static void mlist_del_init(struct mlist_head *entry) - { - __list_del(entry->prev, entry->next); - INIT_LIST_HEAD(entry); - } - - - /* - * mlist_empty - tests whether a list is empty - * @head: the list to test. - */ - static int mlist_empty(struct mlist_head *head) - { - return (head->next == head); - } - - - /* - * mlist_splice - join two lists - * @list: the new list to add. - * @head: the place to add it in the first list. - */ - static void mlist_splice(struct mlist_head *list, struct mlist_head *head) - { - struct mlist_head *first = list->next; - - if (first != list) { - struct mlist_head *last = list->prev; - struct mlist_head *at = head->next; - - first->prev = head; - head->next = first; - - last->next = at; - at->prev = last; - } - } - - - /* TODO: set this */ #if 0 #pragma inline(list_add, list_add_tail, __list_del, list_del, list_del_init, list_empty, list_splice) #endif --- 64,82 ---- #define INIT_LIST_HEAD(ptr) { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } ! void mlist_add(struct mlist_head *, struct mlist_head *); ! void mlist_add_tail(struct mlist_head *, struct mlist_head *); #if 0 ! void mlist_del(struct mlist_head *); #endif + void mlist_del_init(struct mlist_head *); + int mlist_empty(struct mlist_head *); + void mlist_splice(struct mlist_head *, struct mlist_head *); /* TODO: set this */ #if 0 #pragma inline(list_add, list_add_tail, __list_del, list_del, list_del_init, list_empty, list_splice) #endif