/* * Copyright (c) 2020 Synopsys, Inc. * * SPDX-License-Identifier: Apache-2.0 */ #include "pktqueue.h" /* Put a packet header in a queue defined in argument */ void phdr_desc_enqueue(struct phdr_desc_queue *queue, struct phdr_desc *desc, struct k_mutex *mutex) { /* Locking queue */ k_mutex_lock(mutex, K_FOREVER); if (queue->count == 0) { queue->head = queue->tail = desc; } else { queue->tail->next = desc; queue->tail = desc; } queue->count++; desc->next = NULL; /* Unlocking queue */ k_mutex_unlock(mutex); } /* Take a packet header from queue defined in argument */ struct phdr_desc *phdr_desc_dequeue(struct phdr_desc_queue *queue, struct k_mutex *mutex) { struct phdr_desc *return_ptr = NULL; /* Locking queue */ k_mutex_lock(mutex, K_FOREVER); if (queue->count != 0) { queue->count--; return_ptr = queue->head; queue->head = queue->head->next; } /* Unlocking queue */ k_mutex_unlock(mutex); return return_ptr; }