root/drivers/staging/octeon/ethernet-rx.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * This file is based on code from OCTEON SDK by Cavium Networks.
 *
 * Copyright (c) 2003-2007 Cavium Networks
 */

void cvm_oct_poll_controller(struct net_device *dev);
void cvm_oct_rx_initialize(void);
void cvm_oct_rx_shutdown(void);

static inline void cvm_oct_rx_refill_pool(int fill_threshold)
{
        int number_to_free;
        int num_freed;
        /* Refill the packet buffer pool */
        number_to_free =
                cvmx_fau_fetch_and_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE, 0);

        if (number_to_free > fill_threshold) {
                cvmx_fau_atomic_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE,
                                      -number_to_free);
                num_freed = cvm_oct_mem_fill_fpa(CVMX_FPA_PACKET_POOL,
                                                 CVMX_FPA_PACKET_POOL_SIZE,
                                                 number_to_free);
                if (num_freed != number_to_free) {
                        cvmx_fau_atomic_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE,
                                              number_to_free - num_freed);
                }
        }
}