xref: /linux/net/core/page_pool_priv.h (revision 8ab79ed50cf10f338465c296012500de1081646f)
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
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 
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 #endif
39