mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-20 04:33:55 +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. Tracked-On: #4134 Signed-off-by: Alexander Merritt <alex.merritt@intel.com> Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com> Reviewed-by: Eddie Dong <eddie.dong@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
parent
0b7bcd6408
commit
ea131eea41
@ -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.
|
||||
*/
|
||||
|
@ -165,6 +165,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 */
|
||||
|
||||
@ -236,6 +239,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