mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-23 05:57:33 +00:00
HV: add DRHD index to pci_pdev
We add new member pci_pdev.drhd_idx associating the DRHD (IOMMU) with this pdev, and a method to convert a pbdf of a device to this index by searching the pdev list. Partial patch: drhd_index initialization handled in subsequent patch. v3->v2 Renamed drhd_idx to drhd_index in pci_pdev struct Introduced a macro INVALID_DRHD_INDEX set to 0xFFFFFFFFU v2-> v1 Remove (index == -1U) from loop control expression to follow MISRA-C Tracked-On: #4134 Signed-off-by: Alexander Merritt <alex.merritt@intel.com> Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com>
This commit is contained in:
parent
b0acad338e
commit
ef2d43d544
@ -45,6 +45,29 @@ static struct pci_pdev pci_pdev_array[CONFIG_MAX_PCI_DEV_NUM];
|
||||
|
||||
static void init_pdev(uint16_t pbdf);
|
||||
|
||||
/* @brief: Find the DRHD index corresponding to a PCI device
|
||||
* Runs through the pci_pdev_array and returns the value in drhd_idx
|
||||
* member from pdev strucutre that matches matches B:D.F
|
||||
*
|
||||
* @pbdf[in] B:D.F of a PCI device
|
||||
*
|
||||
* @return if there is a matching pbdf in pci_pdev_array, pdev->drhd_idx, else INVALID_DRHD_INDEX
|
||||
*/
|
||||
|
||||
uint32_t pci_lookup_drhd_for_pbdf(uint16_t pbdf)
|
||||
{
|
||||
uint32_t drhd_index = INVALID_DRHD_INDEX;
|
||||
uint32_t index;
|
||||
|
||||
for (index = 0U; index < num_pci_pdev; index++) {
|
||||
if (pci_pdev_array[index].bdf.value == pbdf) {
|
||||
drhd_index = pci_pdev_array[index].drhd_index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return drhd_index;
|
||||
}
|
||||
|
||||
static uint32_t pci_pdev_calc_address(union pci_bdf bdf, uint32_t offset)
|
||||
{
|
||||
|
@ -10,6 +10,8 @@
|
||||
#include <pci.h>
|
||||
#include <platform_acpi_info.h>
|
||||
|
||||
#define INVALID_DRHD_INDEX 0xFFFFFFFFU
|
||||
|
||||
/*
|
||||
* Intel IOMMU register specification per version 1.0 public spec.
|
||||
*/
|
||||
|
@ -205,6 +205,9 @@ struct pci_msix_cap {
|
||||
};
|
||||
|
||||
struct pci_pdev {
|
||||
/* IOMMU responsible for DMA and Interrupt Remapping for this device */
|
||||
uint32_t drhd_index;
|
||||
|
||||
/* The bar info of the physical PCI device. */
|
||||
uint32_t nr_bars; /* 6 for normal device, 2 for bridge, 1 for cardbus */
|
||||
|
||||
@ -285,6 +288,16 @@ void enable_disable_pci_intx(union pci_bdf bdf, bool enable);
|
||||
|
||||
void init_pci_pdev_list(void);
|
||||
|
||||
/* @brief: Find the DRHD index corresponding to a PCI device
|
||||
* Runs through the pci_pdev_array and returns the value in drhd_idx
|
||||
* member from pdev strucutre that matches matches B:D.F
|
||||
*
|
||||
* @pbdf[in] B:D.F of a PCI device
|
||||
*
|
||||
* @return if there is a matching pbdf in pci_pdev_array, pdev->drhd_idx, else -1U
|
||||
*/
|
||||
uint32_t pci_lookup_drhd_for_pbdf(uint16_t pbdf);
|
||||
|
||||
static inline bool is_pci_vendor_valid(uint32_t vendor_id)
|
||||
{
|
||||
return !((vendor_id == 0xFFFFFFFFU) || (vendor_id == 0U) ||
|
||||
|
Loading…
Reference in New Issue
Block a user