1 /* SPDX-License-Identifier: Apache-2.0
2 * Copyright (c) 2023 Cisco Systems, Inc.
5 #ifndef _VNET_DEV_PCI_H_
6 #define _VNET_DEV_PCI_H_
8 #include <vppinfra/clib.h>
9 #include <vlib/pci/pci.h>
10 #include <vnet/dev/dev.h>
12 typedef void (vnet_dev_pci_intx_handler_fn_t) (vlib_main_t *vm,
14 typedef void (vnet_dev_pci_msix_handler_fn_t) (vlib_main_t *vm,
15 vnet_dev_t *dev, u16 line);
23 } vnet_dev_bus_pci_device_info_t;
27 u8 pci_handle_valid : 1;
30 vlib_pci_dev_handle_t handle;
31 vnet_dev_pci_intx_handler_fn_t *intx_handler;
32 vnet_dev_pci_msix_handler_fn_t **msix_handlers;
33 } vnet_dev_bus_pci_device_data_t;
35 static_always_inline vnet_dev_bus_pci_device_data_t *
36 vnet_dev_get_bus_pci_device_data (vnet_dev_t *dev)
38 return (void *) dev->bus_data;
40 static_always_inline vlib_pci_dev_handle_t
41 vnet_dev_get_pci_handle (vnet_dev_t *dev)
43 return ((vnet_dev_bus_pci_device_data_t *) (dev->bus_data))->handle;
46 static_always_inline vlib_pci_addr_t
47 vnet_dev_get_pci_addr (vnet_dev_t *dev)
49 return ((vnet_dev_bus_pci_device_data_t *) (dev->bus_data))->addr;
52 static_always_inline vlib_pci_dev_handle_t
53 vnet_dev_get_pci_n_msix_interrupts (vnet_dev_t *dev)
55 return vnet_dev_get_bus_pci_device_data (dev)->n_msix_int;
58 vnet_dev_rv_t vnet_dev_pci_read_config_header (vlib_main_t *, vnet_dev_t *,
59 vlib_pci_config_hdr_t *);
61 vnet_dev_rv_t vnet_dev_pci_map_region (vlib_main_t *, vnet_dev_t *, u8,
63 vnet_dev_rv_t vnet_dev_pci_function_level_reset (vlib_main_t *, vnet_dev_t *);
64 vnet_dev_rv_t vnet_dev_pci_bus_master_enable (vlib_main_t *, vnet_dev_t *);
65 vnet_dev_rv_t vnet_dev_pci_bus_master_disable (vlib_main_t *, vnet_dev_t *);
66 vnet_dev_rv_t vnet_dev_pci_intx_add_handler (vlib_main_t *, vnet_dev_t *,
67 vnet_dev_pci_intx_handler_fn_t *);
68 vnet_dev_rv_t vnet_dev_pci_intx_remove_handler (vlib_main_t *, vnet_dev_t *);
69 vnet_dev_rv_t vnet_dev_pci_msix_add_handler (vlib_main_t *, vnet_dev_t *,
70 vnet_dev_pci_msix_handler_fn_t *,
72 vnet_dev_rv_t vnet_dev_pci_msix_remove_handler (vlib_main_t *, vnet_dev_t *,
74 vnet_dev_rv_t vnet_dev_pci_msix_enable (vlib_main_t *, vnet_dev_t *, u16, u16);
75 vnet_dev_rv_t vnet_dev_pci_msix_disable (vlib_main_t *, vnet_dev_t *, u16,
78 #endif /* _VNET_DEV_PCI_H_ */