1517e0978SBjoern A. Zeeb /*- 2517e0978SBjoern A. Zeeb * Copyright (c) 2023 Bjoern A. Zeeb 3517e0978SBjoern A. Zeeb * 4517e0978SBjoern A. Zeeb * Redistribution and use in source and binary forms, with or without 5517e0978SBjoern A. Zeeb * modification, are permitted provided that the following conditions 6517e0978SBjoern A. Zeeb * are met: 7517e0978SBjoern A. Zeeb * 1. Redistributions of source code must retain the above copyright 8517e0978SBjoern A. Zeeb * notice, this list of conditions and the following disclaimer. 9517e0978SBjoern A. Zeeb * 2. Redistributions in binary form must reproduce the above copyright 10517e0978SBjoern A. Zeeb * notice, this list of conditions and the following disclaimer in the 11517e0978SBjoern A. Zeeb * documentation and/or other materials provided with the distribution. 12517e0978SBjoern A. Zeeb * 13517e0978SBjoern A. Zeeb * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14517e0978SBjoern A. Zeeb * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15517e0978SBjoern A. Zeeb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16517e0978SBjoern A. Zeeb * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17517e0978SBjoern A. Zeeb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18517e0978SBjoern A. Zeeb * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19517e0978SBjoern A. Zeeb * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20517e0978SBjoern A. Zeeb * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21517e0978SBjoern A. Zeeb * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22517e0978SBjoern A. Zeeb * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23517e0978SBjoern A. Zeeb * SUCH DAMAGE. 24517e0978SBjoern A. Zeeb */ 25517e0978SBjoern A. Zeeb 26517e0978SBjoern A. Zeeb #ifndef _LINUXKPI_NET_PAGE_POOL_H 27517e0978SBjoern A. Zeeb #define _LINUXKPI_NET_PAGE_POOL_H 28517e0978SBjoern A. Zeeb 29517e0978SBjoern A. Zeeb #include <linux/kernel.h> /* pr_debug */ 30517e0978SBjoern A. Zeeb #include <linux/types.h> 31517e0978SBjoern A. Zeeb #include <linux/dma-mapping.h> 32*4b972f77SBjoern A. Zeeb #include <linux/netdevice.h> 33517e0978SBjoern A. Zeeb 34517e0978SBjoern A. Zeeb struct device; 35517e0978SBjoern A. Zeeb 36517e0978SBjoern A. Zeeb struct page_pool_params { 37517e0978SBjoern A. Zeeb struct device *dev; 38517e0978SBjoern A. Zeeb uint32_t flags; 39517e0978SBjoern A. Zeeb uint32_t order; 40517e0978SBjoern A. Zeeb uint32_t pool_size; 41517e0978SBjoern A. Zeeb uint32_t max_len; 42517e0978SBjoern A. Zeeb uint32_t offset; 43517e0978SBjoern A. Zeeb int nid; /* NUMA */ 44517e0978SBjoern A. Zeeb enum dma_data_direction dma_dir; 45*4b972f77SBjoern A. Zeeb struct napi_struct *napi; 46517e0978SBjoern A. Zeeb }; 47517e0978SBjoern A. Zeeb 48517e0978SBjoern A. Zeeb struct page_pool { 49517e0978SBjoern A. Zeeb }; 50517e0978SBjoern A. Zeeb 51517e0978SBjoern A. Zeeb #define PP_FLAG_DMA_MAP BIT(0) 52517e0978SBjoern A. Zeeb #define PP_FLAG_DMA_SYNC_DEV BIT(1) 53517e0978SBjoern A. Zeeb #define PP_FLAG_PAGE_FRAG BIT(2) 54517e0978SBjoern A. Zeeb 55517e0978SBjoern A. Zeeb static inline struct page_pool * 56517e0978SBjoern A. Zeeb page_pool_create(const struct page_pool_params *ppparams) 57517e0978SBjoern A. Zeeb { 58517e0978SBjoern A. Zeeb 59517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 60517e0978SBjoern A. Zeeb return (NULL); 61517e0978SBjoern A. Zeeb } 62517e0978SBjoern A. Zeeb 63517e0978SBjoern A. Zeeb static inline void 64517e0978SBjoern A. Zeeb page_pool_destroy(struct page_pool *ppool) 65517e0978SBjoern A. Zeeb { 66517e0978SBjoern A. Zeeb 67517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 68517e0978SBjoern A. Zeeb } 69517e0978SBjoern A. Zeeb 70517e0978SBjoern A. Zeeb static inline struct page * 71517e0978SBjoern A. Zeeb page_pool_dev_alloc_frag(struct page_pool *ppool, uint32_t *offset, 72517e0978SBjoern A. Zeeb size_t size) 73517e0978SBjoern A. Zeeb { 74517e0978SBjoern A. Zeeb 75517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 76517e0978SBjoern A. Zeeb return (NULL); 77517e0978SBjoern A. Zeeb } 78517e0978SBjoern A. Zeeb 79517e0978SBjoern A. Zeeb static inline dma_addr_t 80517e0978SBjoern A. Zeeb page_pool_get_dma_addr(struct page *page) 81517e0978SBjoern A. Zeeb { 82517e0978SBjoern A. Zeeb 83517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 84517e0978SBjoern A. Zeeb return (0); 85517e0978SBjoern A. Zeeb } 86517e0978SBjoern A. Zeeb 87517e0978SBjoern A. Zeeb static inline enum dma_data_direction 88517e0978SBjoern A. Zeeb page_pool_get_dma_dir(const struct page_pool *ppool) 89517e0978SBjoern A. Zeeb { 90517e0978SBjoern A. Zeeb 91517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 92517e0978SBjoern A. Zeeb return (DMA_BIDIRECTIONAL); 93517e0978SBjoern A. Zeeb } 94517e0978SBjoern A. Zeeb 95517e0978SBjoern A. Zeeb static inline void 96517e0978SBjoern A. Zeeb page_pool_put_full_page(struct page_pool *ppool, struct page *page, 97517e0978SBjoern A. Zeeb bool allow_direct) 98517e0978SBjoern A. Zeeb { 99517e0978SBjoern A. Zeeb 100517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 101517e0978SBjoern A. Zeeb } 102517e0978SBjoern A. Zeeb 103517e0978SBjoern A. Zeeb static inline int 104517e0978SBjoern A. Zeeb page_pool_ethtool_stats_get_count(void) 105517e0978SBjoern A. Zeeb { 106517e0978SBjoern A. Zeeb 107517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 108517e0978SBjoern A. Zeeb return (0); 109517e0978SBjoern A. Zeeb } 110517e0978SBjoern A. Zeeb 111517e0978SBjoern A. Zeeb static inline uint8_t * 112517e0978SBjoern A. Zeeb page_pool_ethtool_stats_get_strings(uint8_t *x) 113517e0978SBjoern A. Zeeb { 114517e0978SBjoern A. Zeeb 115517e0978SBjoern A. Zeeb pr_debug("%s: TODO\n", __func__); 116517e0978SBjoern A. Zeeb return (x); 117517e0978SBjoern A. Zeeb } 118517e0978SBjoern A. Zeeb 119517e0978SBjoern A. Zeeb #endif /* _LINUXKPI_NET_PAGE_POOL_H */ 120