1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef __PAGE_POOL_PRIV_H
4 #define __PAGE_POOL_PRIV_H
5
6 #include <net/page_pool/helpers.h>
7
8 #include "netmem_priv.h"
9
10 s32 page_pool_inflight(const struct page_pool *pool, bool strict);
11
12 int page_pool_list(struct page_pool *pool);
13 void page_pool_detached(struct page_pool *pool);
14 void page_pool_unlist(struct page_pool *pool);
15
16 static inline bool
page_pool_set_dma_addr_netmem(netmem_ref netmem,dma_addr_t addr)17 page_pool_set_dma_addr_netmem(netmem_ref netmem, dma_addr_t addr)
18 {
19 if (PAGE_POOL_32BIT_ARCH_WITH_64BIT_DMA) {
20 netmem_set_dma_addr(netmem, addr >> PAGE_SHIFT);
21
22 /* We assume page alignment to shave off bottom bits,
23 * if this "compression" doesn't work we need to drop.
24 */
25 return addr != (dma_addr_t)netmem_get_dma_addr(netmem)
26 << PAGE_SHIFT;
27 }
28
29 netmem_set_dma_addr(netmem, addr);
30 return false;
31 }
32
page_pool_set_dma_addr(struct page * page,dma_addr_t addr)33 static inline bool page_pool_set_dma_addr(struct page *page, dma_addr_t addr)
34 {
35 return page_pool_set_dma_addr_netmem(page_to_netmem(page), addr);
36 }
37
38 #if defined(CONFIG_PAGE_POOL)
39 void page_pool_set_pp_info(struct page_pool *pool, netmem_ref netmem);
40 void page_pool_clear_pp_info(netmem_ref netmem);
41 int page_pool_check_memory_provider(struct net_device *dev,
42 struct netdev_rx_queue *rxq);
43 #else
page_pool_set_pp_info(struct page_pool * pool,netmem_ref netmem)44 static inline void page_pool_set_pp_info(struct page_pool *pool,
45 netmem_ref netmem)
46 {
47 }
page_pool_clear_pp_info(netmem_ref netmem)48 static inline void page_pool_clear_pp_info(netmem_ref netmem)
49 {
50 }
page_pool_check_memory_provider(struct net_device * dev,struct netdev_rx_queue * rxq)51 static inline int page_pool_check_memory_provider(struct net_device *dev,
52 struct netdev_rx_queue *rxq)
53 {
54 return 0;
55 }
56 #endif
57
58 #endif
59