173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Copyright 2001-2008 Texas Instruments - http://www.ti.com/ 373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * you may not use this file except in compliance with the License. 673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * You may obtain a copy of the License at 773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * http://www.apache.org/licenses/LICENSE-2.0 973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 1073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Unless required by applicable law or agreed to in writing, software 1173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * distributed under the License is distributed on an "AS IS" BASIS, 1273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * See the License for the specific language governing permissions and 1473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * limitations under the License. 1573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 1673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 1873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 1973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== list.h ======== 2073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * DSP-BIOS Bridge driver support functions for TI OMAP processors. 2173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 2273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Declarations of list management control structures and definitions 2373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * of inline list management functions. 2473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 2573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Public Functions: 2673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_Create 2773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_Delete 2873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_Exit 2973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_First 3073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_GetHead 3173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_InitElem 3273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_Init 3373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_InsertBefore 3473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_IsEmpty 3573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_Next 3673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_PutTail 3773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST_RemoveElem 3873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 3973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 4073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 4173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! Revision History 4273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! ================ 4373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 10-Aug-2000 ag: Added LST_InsertBefore(). 4473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 29-Oct-1999 kc: Cleaned up for code review. 4573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 16-Aug-1997 cr: added explicit identifiers. 4673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 10-Aug-1996 gp: Acquired from SMM for WinSPOX v.1.1; renamed identifiers. 4773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 21-Oct-1994 dh4: Cleaned / commented for code review. 4873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin *! 08-Jun-1994 dh4: Converted to SPM (added extern "C"). 4973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 5073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifndef LIST_ 5273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define LIST_ 5373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 5573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern "C" { 5673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 5773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 5873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#include <dspapi.h> 5973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#define LST_IsEmpty(l) (((l)->head.next == &(l)->head)) 6173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_ELEM { 6373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_ELEM *next; 6473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_ELEM *prev; 6573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_ELEM *self; 6673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } ; 6773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 6873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /*typedef LST_ELEM *LST_PELEM;*/ 6973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 7073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_LIST { 7173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin struct LST_ELEM head; 7273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin } ; 7373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 7473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin /*typedef LST_LIST *LST_PLIST;*/ 7573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 7673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 7773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_Create ======== 7873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 7973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Allocates and initializes a circular list. 8073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Details: 8173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Uses portable MEM_Calloc() function to allocate a list containing 8273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * a single element and initializes that element to indicate that it 8373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * is the "end of the list" (i.e., the list is empty). 8473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * An empty list is indicated by the "next" pointer in the element 8573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * at the head of the list pointing to the head of the list, itself. 8673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 8773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 8873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to beginning of created list (success) 8973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NULL --> Allocation failed 9073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 9173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST initialized. 9273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 9373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 9473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * The created list contains a single element. This element is the 9573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * "empty" element, because its "next" and "prev" pointers point at 9673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the same location (the element itself). 9773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 9873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern struct LST_LIST* LST_Create(); 9973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 10073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 10173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_Delete ======== 10273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 10373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Removes a list by freeing its control structure's memory space. 10473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Details: 10573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Uses portable MEM_Free() function to deallocate the memory 10673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * block pointed at by the input parameter. 10773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 10873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure of list to be deleted 10973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 11073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Void 11173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 11273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 11373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 11473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 11573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 11673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Must ONLY be used for empty lists, because it does not walk the 11773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * chain of list elements. Calling this function on a non-empty list 11873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * will cause a memory leak. 11973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 12073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID LST_Delete(IN struct LST_LIST* pList); 12173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 12273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 12373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_Exit ======== 12473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 12573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Discontinue usage of module; free resources when reference count 12673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * reaches 0. 12773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 12873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 12973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 13073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST initialized. 13173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 13273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Resources used by module are freed when cRef reaches zero. 13373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 13473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID LST_Exit(); 13573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 13673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 13773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_First ======== 13873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 13973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns a pointer to the first element of the list, or NULL if the list 14073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * is empty. 14173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 14273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure. 14373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 14473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to first list element, or NULL. 14573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 14673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 14773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 14873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 14973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 15073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern struct LST_ELEM* LST_First(IN struct LST_LIST* pList); 15173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 15273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 15373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_GetHead ======== 15473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 15573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pops the head off the list and returns a pointer to it. 15673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Details: 15773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * If the list is empty, returns NULL. 15873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Else, removes the element at the head of the list, making the next 15973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * element the head of the list. 16073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * The head is removed by making the tail element of the list point its 16173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * "next" pointer at the next element after the head, and by making the 16273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * "prev" pointer of the next element after the head point at the tail 16373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * element. So the next element after the head becomes the new head of 16473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the list. 16573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 16673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure of list whose head 16773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * element is to be removed 16873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 16973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to element that was at the head of the list (success) 17073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * NULL No elements in list 17173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 17273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - head.self must be correctly set to &head. 17373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 17473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 17573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 17673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 17773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Because the tail of the list points forward (its "next" pointer) to 17873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the head of the list, and the head of the list points backward (its 17973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * "prev" pointer) to the tail of the list, this list is circular. 18073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 18173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern struct LST_ELEM* LST_GetHead(IN struct LST_LIST* pList); 18273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 18373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 18473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_Init ======== 18573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 18673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Initializes private state of LST module. 18773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 18873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 18973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * TRUE if initialized; FALSE otherwise. 19073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 19173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 19273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST initialized. 19373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 19473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern bool LST_Init(); 19573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 19673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 19773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_InitElem ======== 19873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 19973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Initializes a list element to default (cleared) values 20073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Details: 20173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 20273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pElem: Pointer to list element to be reset 20373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 20473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 20573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST initialized. 20673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 20773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 20873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * This function must not be called to "reset" an element in the middle 20973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * of a list chain -- that would break the chain. 21073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * 21173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 21273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID LST_InitElem(IN struct LST_ELEM* pListElem); 21373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 21473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 21573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_InsertBefore ======== 21673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 21773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Insert the element before the existing element. 21873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 21973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure. 22073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pElem: Pointer to element in list to insert. 22173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pElemExisting: Pointer to existing list element. 22273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 22373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 22473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 22573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 22673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pElem != NULL. 22773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pElemExisting != NULL. 22873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 22973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 23073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID LST_InsertBefore(IN struct LST_LIST* pList, 23173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN struct LST_ELEM* pElem, 23273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN struct LST_ELEM* pElemExisting); 23373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 23473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 23573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_Next ======== 23673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 23773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns a pointer to the next element of the list, or NULL if the next 23873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * element is the head of the list or the list is empty. 23973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 24073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure. 24173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pCurElem: Pointer to element in list to remove. 24273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 24373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Pointer to list element, or NULL. 24473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 24573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 24673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 24773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pCurElem != NULL. 24873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 24973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 25073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern struct LST_ELEM* LST_Next(IN struct LST_LIST* pList, 25173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN struct LST_ELEM* pCurElem); 25273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 25373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 25473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_PutTail ======== 25573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 25673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Adds the specified element to the tail of the list 25773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Details: 25873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Sets new element's "prev" pointer to the address previously held by 25973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the head element's prev pointer. This is the previous tail member of 26073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the list. 26173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Sets the new head's prev pointer to the address of the element. 26273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Sets next pointer of the previous tail member of the list to point to 26373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * the new element (rather than the head, which it had been pointing at). 26473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Sets new element's next pointer to the address of the head element. 26573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Sets head's prev pointer to the address of the new element. 26673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 26773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure to which *pElem will be 26873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * added 26973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pElem: Pointer to list element to be added 27073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 27173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Void 27273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 27373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * *pElem and *pList must both exist. 27473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pElem->self = pElem before pElem is passed to this function. 27573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * LST initialized. 27673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 27773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Notes: 27873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Because the tail is always "just before" the head of the list (the 27973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * tail's "next" pointer points at the head of the list, and the head's 28073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * "prev" pointer points at the tail of the list), the list is circular. 28173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Warning: if pElem->self is not set beforehand, LST_GetHead() will 28273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * return an erroneous pointer when it is called for this element. 28373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 28473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin extern VOID LST_PutTail(IN struct LST_LIST* pList, 28573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN struct LST_ELEM* pListElem); 28673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 28773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin/* 28873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * ======== LST_RemoveElem ======== 28973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Purpose: 29073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Removes (unlinks) the given element from the list, if the list is not 29173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * empty. Does not free the list element. 29273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Parameters: 29373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pList: Pointer to list control structure. 29473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * pCurElem: Pointer to element in list to remove. 29573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Returns: 29673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Requires: 29773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - LST initialized. 29873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pList != NULL. 29973b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * - pCurElem != NULL. 30073b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin * Ensures: 30173b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin */ 30273b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavinextern VOID LST_RemoveElem(IN struct LST_LIST* pList, 30373b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin IN struct LST_ELEM* pCurElem); 30473b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin 30573b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#ifdef __cplusplus 30673b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin} 30773b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif 30873b11d6e96b6d49896738a1a1c87b295c1b96be2Rebecca Schultz Zavin#endif /* LIST_ */ 309