xref: /dpdk/drivers/net/bnxt/tf_core/ll.c (revision e6e8f03e5459f25153f1e4cd3e9ac30d3e473a61)
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)12 void 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)20 void 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)38 void 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