1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019-2023 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 */ ll_init(struct ll * ll)12void ll_init(struct ll *ll) 13 { 14 ll->head = NULL; 15 ll->tail = NULL; 16 ll->cnt = 0; 17 } 18 19 /* insert entry in linked list */ ll_insert(struct ll * ll,struct ll_entry * entry)20void ll_insert(struct ll *ll, 21 struct ll_entry *entry) 22 { 23 if (ll->head == NULL) { 24 ll->head = entry; 25 ll->tail = entry; 26 entry->next = NULL; 27 entry->prev = NULL; 28 } else { 29 entry->next = ll->head; 30 entry->prev = NULL; 31 entry->next->prev = entry; 32 ll->head = entry->next->prev; 33 } 34 ll->cnt++; 35 } 36 37 /* delete entry from linked list */ ll_delete(struct ll * ll,struct ll_entry * entry)38void ll_delete(struct ll *ll, 39 struct ll_entry *entry) 40 { 41 if (ll->head == entry && ll->tail == entry) { 42 ll->head = NULL; 43 ll->tail = NULL; 44 } else if (ll->head == entry) { 45 ll->head = entry->next; 46 ll->head->prev = NULL; 47 } else if (ll->tail == entry) { 48 ll->tail = entry->prev; 49 ll->tail->next = NULL; 50 } else { 51 entry->prev->next = entry->next; 52 entry->next->prev = entry->prev; 53 } 54 ll->cnt--; 55 } 56