xref: /dpdk/drivers/net/bnxt/tf_core/ll.c (revision 68a03efeed657e6e05f281479b33b51102797e15)
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