GNU Linux-libre 4.19.286-gnu1
[releases.git] / drivers / staging / octeon / ethernet-rx.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * This file is based on code from OCTEON SDK by Cavium Networks.
4  *
5  * Copyright (c) 2003-2007 Cavium Networks
6  */
7
8 #include <asm/octeon/cvmx-fau.h>
9
10 void cvm_oct_poll_controller(struct net_device *dev);
11 void cvm_oct_rx_initialize(void);
12 void cvm_oct_rx_shutdown(void);
13
14 static inline void cvm_oct_rx_refill_pool(int fill_threshold)
15 {
16         int number_to_free;
17         int num_freed;
18         /* Refill the packet buffer pool */
19         number_to_free =
20                 cvmx_fau_fetch_and_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE, 0);
21
22         if (number_to_free > fill_threshold) {
23                 cvmx_fau_atomic_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE,
24                                       -number_to_free);
25                 num_freed = cvm_oct_mem_fill_fpa(CVMX_FPA_PACKET_POOL,
26                                                  CVMX_FPA_PACKET_POOL_SIZE,
27                                                  number_to_free);
28                 if (num_freed != number_to_free) {
29                         cvmx_fau_atomic_add32(FAU_NUM_PACKET_BUFFERS_TO_FREE,
30                                               number_to_free - num_freed);
31                 }
32         }
33 }