acrn-hypervisor/devicemodel/include/pci_util.h

43 lines
1.1 KiB
C

/*
* Copyright (C) 2021 Intel Corporation.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#ifndef __PCI_UTIL_H
#define __PCI_UTIL_H
#include <stdbool.h>
#include "pciaccess.h"
struct pci_device_info {
bool is_bridge;
int primary_bus;
int secondary_bus;
int subordinate_bus;
uint16_t bdf;
struct pci_device_info *parent; /* pointer to its parent bridge */
struct pci_device_info *clist; /* children list */
/* cache of all pci devices
* FIXME: remove PCI_DEVICE_Q. To cleanup pci device cache:
* remove children, then remove parents
*/
TAILQ_ENTRY(pci_device_info) PCI_DEVICE_Q;
};
int pci_find_cap(struct pci_device *pdev, const int cap_id);
int pci_find_ext_cap(struct pci_device *pdev, int cap_id);
int pci_get_pcie_type(struct pci_device *dev);
bool is_root_port(struct pci_device *pdev);
bool is_bridge(struct pci_device *pdev);
int get_device_count_on_bus(int bus);
int get_device_count_on_bridge(const struct pci_device_info *bridge_info);
int scan_pci(void);
struct pci_device * pci_find_root_port(const struct pci_device *pdev);
void clean_pci_cache(void);
#endif