1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2022 Intel Corporation. 3 * All rights reserved. 4 */ 5 6 #ifndef SPDK_PCI_DPDK_H 7 #define SPDK_PCI_DPDK_H 8 9 #include "spdk/env.h" 10 11 struct spdk_pci_driver { 12 uint8_t driver_buf[256]; 13 struct rte_pci_driver *driver; 14 15 const char *name; 16 const struct spdk_pci_id *id_table; 17 uint32_t drv_flags; 18 19 spdk_pci_enum_cb cb_fn; 20 void *cb_arg; 21 TAILQ_ENTRY(spdk_pci_driver) tailq; 22 }; 23 24 struct rte_pci_device; 25 struct rte_pci_driver; 26 struct rte_device; 27 28 struct dpdk_fn_table { 29 struct rte_mem_resource *(*pci_device_get_mem_resource)(struct rte_pci_device *dev, uint32_t bar); 30 const char *(*pci_device_get_name)(struct rte_pci_device *); 31 struct rte_devargs *(*pci_device_get_devargs)(struct rte_pci_device *); 32 struct rte_pci_addr *(*pci_device_get_addr)(struct rte_pci_device *); 33 struct rte_pci_id *(*pci_device_get_id)(struct rte_pci_device *); 34 int (*pci_device_get_numa_node)(struct rte_pci_device *_dev); 35 int (*pci_device_read_config)(struct rte_pci_device *dev, void *value, uint32_t len, 36 uint32_t offset); 37 int (*pci_device_write_config)(struct rte_pci_device *dev, void *value, uint32_t len, 38 uint32_t offset); 39 int (*pci_driver_register)(struct spdk_pci_driver *driver, 40 int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device), 41 int (*remove_fn)(struct rte_pci_device *device)); 42 int (*pci_device_enable_interrupt)(struct rte_pci_device *rte_dev); 43 int (*pci_device_disable_interrupt)(struct rte_pci_device *rte_dev); 44 int (*pci_device_get_interrupt_efd)(struct rte_pci_device *rte_dev); 45 int (*pci_device_create_interrupt_efds)(struct rte_pci_device *rte_dev, uint32_t count); 46 void (*pci_device_delete_interrupt_efds)(struct rte_pci_device *rte_dev); 47 int (*pci_device_get_interrupt_efd_by_index)(struct rte_pci_device *rte_dev, uint32_t index); 48 int (*pci_device_interrupt_cap_multi)(struct rte_pci_device *rte_dev); 49 void (*bus_scan)(void); 50 int (*bus_probe)(void); 51 struct rte_devargs *(*device_get_devargs)(struct rte_device *dev); 52 void (*device_set_devargs)(struct rte_device *dev, struct rte_devargs *devargs); 53 const char *(*device_get_name)(struct rte_device *dev); 54 bool (*device_scan_allowed)(struct rte_device *dev); 55 }; 56 57 int dpdk_pci_init(void); 58 59 struct rte_mem_resource *dpdk_pci_device_get_mem_resource(struct rte_pci_device *dev, uint32_t bar); 60 uint64_t dpdk_pci_device_vtophys(struct rte_pci_device *dev, uint64_t vaddr, size_t len); 61 const char *dpdk_pci_device_get_name(struct rte_pci_device *); 62 struct rte_devargs *dpdk_pci_device_get_devargs(struct rte_pci_device *); 63 struct rte_pci_addr *dpdk_pci_device_get_addr(struct rte_pci_device *); 64 struct rte_pci_id *dpdk_pci_device_get_id(struct rte_pci_device *); 65 int dpdk_pci_device_get_numa_node(struct rte_pci_device *_dev); 66 int dpdk_pci_device_read_config(struct rte_pci_device *dev, void *value, uint32_t len, 67 uint32_t offset); 68 int dpdk_pci_device_write_config(struct rte_pci_device *dev, void *value, uint32_t len, 69 uint32_t offset); 70 int dpdk_pci_driver_register(struct spdk_pci_driver *driver, 71 int (*probe_fn)(struct rte_pci_driver *driver, struct rte_pci_device *device), 72 int (*remove_fn)(struct rte_pci_device *device)); 73 int dpdk_pci_device_enable_interrupt(struct rte_pci_device *rte_dev); 74 int dpdk_pci_device_disable_interrupt(struct rte_pci_device *rte_dev); 75 int dpdk_pci_device_get_interrupt_efd(struct rte_pci_device *rte_dev); 76 int dpdk_pci_device_create_interrupt_efds(struct rte_pci_device *rte_dev, uint32_t count); 77 void dpdk_pci_device_delete_interrupt_efds(struct rte_pci_device *rte_dev); 78 int dpdk_pci_device_get_interrupt_efd_by_index(struct rte_pci_device *rte_dev, uint32_t index); 79 int dpdk_pci_device_interrupt_cap_multi(struct rte_pci_device *rte_dev); 80 void dpdk_bus_scan(void); 81 int dpdk_bus_probe(void); 82 struct rte_devargs *dpdk_device_get_devargs(struct rte_device *dev); 83 void dpdk_device_set_devargs(struct rte_device *dev, struct rte_devargs *devargs); 84 const char *dpdk_device_get_name(struct rte_device *dev); 85 bool dpdk_device_scan_allowed(struct rte_device *dev); 86 87 #endif /* ifndef SPDK_PCI_DPDK_H */ 88