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