Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.2-rc6 114 lines 3.3 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * PCI Peer 2 Peer DMA support. 4 * 5 * Copyright (c) 2016-2018, Logan Gunthorpe 6 * Copyright (c) 2016-2017, Microsemi Corporation 7 * Copyright (c) 2017, Christoph Hellwig 8 * Copyright (c) 2018, Eideticom Inc. 9 */ 10 11#ifndef _LINUX_PCI_P2PDMA_H 12#define _LINUX_PCI_P2PDMA_H 13 14#include <linux/pci.h> 15 16struct block_device; 17struct scatterlist; 18 19#ifdef CONFIG_PCI_P2PDMA 20int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size, 21 u64 offset); 22int pci_p2pdma_distance_many(struct pci_dev *provider, struct device **clients, 23 int num_clients, bool verbose); 24bool pci_has_p2pmem(struct pci_dev *pdev); 25struct pci_dev *pci_p2pmem_find_many(struct device **clients, int num_clients); 26void *pci_alloc_p2pmem(struct pci_dev *pdev, size_t size); 27void pci_free_p2pmem(struct pci_dev *pdev, void *addr, size_t size); 28pci_bus_addr_t pci_p2pmem_virt_to_bus(struct pci_dev *pdev, void *addr); 29struct scatterlist *pci_p2pmem_alloc_sgl(struct pci_dev *pdev, 30 unsigned int *nents, u32 length); 31void pci_p2pmem_free_sgl(struct pci_dev *pdev, struct scatterlist *sgl); 32void pci_p2pmem_publish(struct pci_dev *pdev, bool publish); 33int pci_p2pdma_map_sg(struct device *dev, struct scatterlist *sg, int nents, 34 enum dma_data_direction dir); 35int pci_p2pdma_enable_store(const char *page, struct pci_dev **p2p_dev, 36 bool *use_p2pdma); 37ssize_t pci_p2pdma_enable_show(char *page, struct pci_dev *p2p_dev, 38 bool use_p2pdma); 39#else /* CONFIG_PCI_P2PDMA */ 40static inline int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, 41 size_t size, u64 offset) 42{ 43 return -EOPNOTSUPP; 44} 45static inline int pci_p2pdma_distance_many(struct pci_dev *provider, 46 struct device **clients, int num_clients, bool verbose) 47{ 48 return -1; 49} 50static inline bool pci_has_p2pmem(struct pci_dev *pdev) 51{ 52 return false; 53} 54static inline struct pci_dev *pci_p2pmem_find_many(struct device **clients, 55 int num_clients) 56{ 57 return NULL; 58} 59static inline void *pci_alloc_p2pmem(struct pci_dev *pdev, size_t size) 60{ 61 return NULL; 62} 63static inline void pci_free_p2pmem(struct pci_dev *pdev, void *addr, 64 size_t size) 65{ 66} 67static inline pci_bus_addr_t pci_p2pmem_virt_to_bus(struct pci_dev *pdev, 68 void *addr) 69{ 70 return 0; 71} 72static inline struct scatterlist *pci_p2pmem_alloc_sgl(struct pci_dev *pdev, 73 unsigned int *nents, u32 length) 74{ 75 return NULL; 76} 77static inline void pci_p2pmem_free_sgl(struct pci_dev *pdev, 78 struct scatterlist *sgl) 79{ 80} 81static inline void pci_p2pmem_publish(struct pci_dev *pdev, bool publish) 82{ 83} 84static inline int pci_p2pdma_map_sg(struct device *dev, 85 struct scatterlist *sg, int nents, enum dma_data_direction dir) 86{ 87 return 0; 88} 89static inline int pci_p2pdma_enable_store(const char *page, 90 struct pci_dev **p2p_dev, bool *use_p2pdma) 91{ 92 *use_p2pdma = false; 93 return 0; 94} 95static inline ssize_t pci_p2pdma_enable_show(char *page, 96 struct pci_dev *p2p_dev, bool use_p2pdma) 97{ 98 return sprintf(page, "none\n"); 99} 100#endif /* CONFIG_PCI_P2PDMA */ 101 102 103static inline int pci_p2pdma_distance(struct pci_dev *provider, 104 struct device *client, bool verbose) 105{ 106 return pci_p2pdma_distance_many(provider, &client, 1, verbose); 107} 108 109static inline struct pci_dev *pci_p2pmem_find(struct device *client) 110{ 111 return pci_p2pmem_find_many(&client, 1); 112} 113 114#endif /* _LINUX_PCI_P2P_H */