dpdk/drivers/net/bnxt/tf_core/stack.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(c) 2019-2021 Broadcom
   3 * All rights reserved.
   4 */
   5#ifndef _STACK_H_
   6#define _STACK_H_
   7
   8#include <stdio.h>
   9#include <stdlib.h>
  10#include <stdbool.h>
  11#include <stdint.h>
  12
  13/** Stack data structure
  14 */
  15struct stack {
  16        int max;         /**< Maximum number of entries */
  17        int top;         /**< maximum value in stack */
  18        uint32_t *items; /**< items in the stack */
  19};
  20
  21/** Initialize stack of uint32_t elements
  22 *
  23 *  [in] num_entries
  24 *    maximum number of elements in the stack
  25 *
  26 *  [in] items
  27 *    pointer to items (must be sized to (uint32_t * num_entries)
  28 *
  29 *  s[in] st
  30 *    pointer to the stack structure
  31 *
  32 *  return
  33 *    0 for success
  34 */
  35int stack_init(int num_entries,
  36               uint32_t *items,
  37               struct stack *st);
  38
  39/** Return the address of the stack contents
  40 *
  41 *  [in] st
  42 *    pointer to the stack
  43 *
  44 *  return
  45 *    pointer to the stack contents
  46 */
  47uint32_t *stack_items(struct stack *st);
  48
  49/** Return the size of the stack
  50 *
  51 *  [in] st
  52 *    pointer to the stack
  53 *
  54 *  return
  55 *    number of elements
  56 */
  57int32_t stack_size(struct stack *st);
  58
  59/** Check if the stack is empty
  60 *
  61 * [in] st
  62 *   pointer to the stack
  63 *
  64 * return
  65 *   true or false
  66 */
  67bool stack_is_empty(struct stack *st);
  68
  69/** Check if the stack is full
  70 *
  71 * [in] st
  72 *   pointer to the stack
  73 *
  74 * return
  75 *   true or false
  76 */
  77bool stack_is_full(struct stack *st);
  78
  79/** Add  element x to  the stack
  80 *
  81 * [in] st
  82 *   pointer to the stack
  83 *
  84 * [in] x
  85 *   value to push on the stack
  86 * return
  87 *  0 for success
  88 */
  89int stack_push(struct stack *st, uint32_t x);
  90
  91/** Pop top element x from the stack and return
  92 * in user provided location.
  93 *
  94 * [in] st
  95 *   pointer to the stack
  96 *
  97 * [in, out] x
  98 *  pointer to where the value popped will be written
  99 *
 100 * return
 101 *  0 for success
 102 */
 103int stack_pop(struct stack *st, uint32_t *x);
 104
 105/** Dump stack information
 106 *
 107 * Warning: Don't use for large stacks due to prints
 108 *
 109 * [in] st
 110 *   pointer to the stack
 111 *
 112 * return
 113 *    none
 114 */
 115void stack_dump(struct stack *st);
 116
 117#endif /* _STACK_H_ */
 118