6f58662f55f22b4d7a03445e26ad601bec0fbf5a
[dpdk.git] / drivers / net / bnxt / tf_core / ll.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019-2020 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 }