1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019-2021 Broadcom 3 * All rights reserved. 4 */ 5 6 /* Linked List Functions */ 7 8 #include <stdio.h> 9 #include "ll.h" 10 11 /* init linked list */ 12 void ll_init(struct ll *ll) 13 { 14 ll->head = NULL; 15 ll->tail = NULL; 16 } 17 18 /* insert entry in linked list */ 19 void ll_insert(struct ll *ll, 20 struct ll_entry *entry) 21 { 22 if (ll->head == NULL) { 23 ll->head = entry; 24 ll->tail = entry; 25 entry->next = NULL; 26 entry->prev = NULL; 27 } else { 28 entry->next = ll->head; 29 entry->prev = NULL; 30 entry->next->prev = entry; 31 ll->head = entry->next->prev; 32 } 33 } 34 35 /* delete entry from linked list */ 36 void ll_delete(struct ll *ll, 37 struct ll_entry *entry) 38 { 39 if (ll->head == entry && ll->tail == entry) { 40 ll->head = NULL; 41 ll->tail = NULL; 42 } else if (ll->head == entry) { 43 ll->head = entry->next; 44 ll->head->prev = NULL; 45 } else if (ll->tail == entry) { 46 ll->tail = entry->prev; 47 ll->tail->next = NULL; 48 } else { 49 entry->prev->next = entry->next; 50 entry->next->prev = entry->prev; 51 } 52 } 53