coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
ivrs.c File Reference
#include <acpi/acpi_ivrs.h>
#include <amdblocks/acpi.h>
#include <amdblocks/cpu.h>
#include <amdblocks/data_fabric.h>
#include <amdblocks/ioapic.h>
#include <arch/mmio.h>
#include <console/console.h>
#include <cpu/amd/cpuid.h>
#include <cpu/amd/msr.h>
#include <device/device.h>
#include <device/pci_def.h>
#include <device/pci_ops.h>
#include <soc/acpi.h>
#include <soc/data_fabric.h>
#include <soc/pci_devs.h>
Include dependency graph for ivrs.c:

Go to the source code of this file.

Macros

#define MAX_DEV_ID   0xFFFF
 

Functions

unsigned long acpi_fill_ivrs_ioapic (acpi_ivrs_t *ivrs, unsigned long current)
 
static unsigned long ivhd_describe_hpet (unsigned long current)
 
static unsigned long ivhd_describe_f0_device (unsigned long current, uint16_t dev_id, uint8_t datasetting)
 
static unsigned long ivhd_dev_range (unsigned long current, uint16_t start_devid, uint16_t end_devid, uint8_t setting)
 
static unsigned long add_ivhd_dev_entry (struct device *parent, struct device *dev, unsigned long *current, uint8_t type, uint8_t data)
 
static void ivrs_add_device_or_bridge (struct device *parent, struct device *dev, unsigned long *current, uint16_t *ivhd_length)
 
static void add_ivhd_device_entries (struct device *parent, struct device *dev, unsigned int depth, int linknum, int8_t *root_level, unsigned long *current, uint16_t *ivhd_length)
 
static unsigned long acpi_fill_ivrs40 (unsigned long current, acpi_ivrs_t *ivrs)
 
static unsigned long acpi_fill_ivrs11 (unsigned long current, acpi_ivrs_t *ivrs)
 
unsigned long acpi_fill_ivrs (acpi_ivrs_t *ivrs, unsigned long current)
 

Macro Definition Documentation

◆ MAX_DEV_ID

#define MAX_DEV_ID   0xFFFF

Definition at line 19 of file ivrs.c.

Function Documentation

◆ acpi_fill_ivrs()

unsigned long acpi_fill_ivrs ( acpi_ivrs_t ivrs,
unsigned long  current 
)

Definition at line 323 of file ivrs.c.

References acpi_fill_ivrs11(), acpi_fill_ivrs_ioapic(), add_ivhd_device_entries(), all_devices, BIOS_WARNING, device::bus, CAP_OFFSET_0_IOTLB_SP, CAP_OFFSET_10_MSI_NUM_PPR, CAP_OFFSET_10_MSI_NUM_PPR_SHIFT, acpi_ivrs_ivhd::capability_offset, acpi_ivrs_ivhd::device_id, EFR_FEATURE_SUP, acpi_ivrs_ivhd::flags, acpi_ivrs_ivhd::iommu_base_high, acpi_ivrs_ivhd::iommu_base_low, IOMMU_CAP_ID, IOMMU_FEATURE_GA_SUP, IOMMU_FEATURE_GATS_SHIFT, IOMMU_FEATURE_GLX_SHIFT, IOMMU_FEATURE_GT_SUP, IOMMU_FEATURE_HATS_SHIFT, IOMMU_FEATURE_HE_SUP, IOMMU_FEATURE_IA_SUP, acpi_ivrs_ivhd::iommu_feature_info, IOMMU_FEATURE_MSI_NUM_PPR_SHIFT, IOMMU_FEATURE_NX_SUP, IOMMU_FEATURE_PA_SMAX_SHIFT, IOMMU_FEATURE_PN_BANKS_SHIFT, IOMMU_FEATURE_PN_COUNTERS_SHIFT, IOMMU_FEATURE_XT_SUP, acpi_ivrs_ivhd::iommu_info, IOMMU_INFO_UNIT_ID_SHIFT, acpi_ivrs::iv_info, acpi_ivrs::ivhd, IVHD_BLOCK_TYPE_LEGACY__FIXED, ivhd_describe_hpet(), ivhd_dev_range(), IVHD_FLAG_COHERENT, IVHD_FLAG_HT_TUN_EN, IVHD_FLAG_IOTLB_SUP, IVHD_FLAG_ISOC, IVHD_FLAG_PASS_PW, IVHD_FLAG_PPE_SUP, IVHD_FLAG_PREF_SUP, IVHD_FLAG_RES_PASS_PW, IVINFO_EFR_SUPPORTED, acpi_ivrs_ivhd::length, MAX_DEV_ID, MMIO_CNT_CFG_N_CNT_BANKS_SHIFT, MMIO_CNT_CFG_N_COUNTER, MMIO_CNT_CFG_N_COUNTER_BANKS, MMIO_CNT_CFG_N_COUNTER_SHIFT, MMIO_CTRL_COHERENT, MMIO_CTRL_HT_TUN_EN, MMIO_CTRL_ISOC, MMIO_CTRL_PASS_PW, MMIO_CTRL_RES_PASS_PW, MMIO_EXT_FEATURE_GA_SUP, MMIO_EXT_FEATURE_GATS_MASK, MMIO_EXT_FEATURE_GATS_SHIFT, MMIO_EXT_FEATURE_GLX_SHIFT, MMIO_EXT_FEATURE_GLX_SUP_MASK, MMIO_EXT_FEATURE_GT_SUP, MMIO_EXT_FEATURE_HATS_MASK, MMIO_EXT_FEATURE_HATS_SHIFT, MMIO_EXT_FEATURE_HE_SUP, MMIO_EXT_FEATURE_IA_SUP, MMIO_EXT_FEATURE_NX_SUP, MMIO_EXT_FEATURE_PAS_MAX_MASK, MMIO_EXT_FEATURE_PAS_MAX_SHIFT, MMIO_EXT_FEATURE_PPR_SUP, MMIO_EXT_FEATURE_PRE_F_SUP, MMIO_EXT_FEATURE_XT_SUP, NULL, PCI_DEVFN, pci_find_capability(), pci_read_config16(), pci_read_config32(), acpi_ivrs_ivhd::pci_segment_group, pcidev_on_root(), printk, read64(), bus::secondary, and acpi_ivrs_ivhd::type.

Here is the call graph for this function:

◆ acpi_fill_ivrs11()

◆ acpi_fill_ivrs40()

◆ acpi_fill_ivrs_ioapic()

◆ add_ivhd_dev_entry()

◆ add_ivhd_device_entries()

static void add_ivhd_device_entries ( struct device parent,
struct device dev,
unsigned int  depth,
int  linknum,
int8_t root_level,
unsigned long *  current,
uint16_t ivhd_length 
)
static

Definition at line 162 of file ivrs.c.

References device::bus, bus::children, bus::dev, pci_path::devfn, DEVICE_PATH_PCI, device::enabled, ivrs_add_device_or_bridge(), device::link_list, bus::next, device::path, device_path::pci, bus::secondary, device::sibling, and device_path::type.

Referenced by acpi_fill_ivrs(), acpi_fill_ivrs11(), and acpi_fill_ivrs40().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ivhd_describe_f0_device()

static unsigned long ivhd_describe_f0_device ( unsigned long  current,
uint16_t  dev_id,
uint8_t  datasetting 
)
static

◆ ivhd_describe_hpet()

◆ ivhd_dev_range()

static unsigned long ivhd_dev_range ( unsigned long  current,
uint16_t  start_devid,
uint16_t  end_devid,
uint8_t  setting 
)
static

◆ ivrs_add_device_or_bridge()

static void ivrs_add_device_or_bridge ( struct device parent,
struct device dev,
unsigned long *  current,
uint16_t ivhd_length 
)
static

Definition at line 139 of file ivrs.c.

References add_ivhd_dev_entry(), device::hdr_type, IVHD_DEV_4_BYTE_SELECT, IVHD_DEV_8_BYTE_ALIAS_SELECT, PCI_CAP_ID_PCIE, pci_find_capability(), PCI_HEADER_TYPE_BRIDGE, and PCI_HEADER_TYPE_NORMAL.

Referenced by add_ivhd_device_entries().

Here is the call graph for this function:
Here is the caller graph for this function: