PCIe PASID capability ID is equal to 0x1B (PCI_EXT_CAP_ID_PASID). 1)在虚拟化场景下,直通设备的中断是无法直接投递到Guest中的,而是由IOMMU截获中断,先将其中断映射到host的某个中断上,然后再重定向(由VMM写VMCS寄存器中的32 bits VM-entry interruption-information字段)到Guest内部。 2)IOMMU IRTE(Inte...
set_pcie_thunderbolt() while((vsec = pci_find_next_ext_capability(dev, vsec, PCI_EXT_CAP_ID_VNDR))) { pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);/* Is the device part of a Thunderbolt controller? *///设备是否具有雷电控制器if(dev->vendor == PCI_VENDOR_ID_I...
//1.2 获取msi能力寄存器的地址 pos =pci_find_capability(my_device.pci_dev,PCI_CAP_ID_MSI); //1.3 读取msi的协议部分 pci_read_config_word(my_device.pci_dev,pos+2,&msi_control); //1.4 读取msi能力寄存器组中的地址寄存器的值 pci_read_config_dword(my_device.pci_dev,pos+4,&msi_addr_l);...
set_pcie_thunderbolt() while ((vsec = pci_find_next_ext_capability(dev, vsec, PCI_EXT_CAP_ID_VNDR))) { pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header); /* Is the device part of a Thunderbolt controller? */ //设备是否具有雷电控制器 if (dev->vendor == PCI_VENDO...
pos = pci_find_capability(bridge, PCI_CAP_ID_PCIX); if (!pos) return false; pci_read_config_dword(bridge, pos + PCI_X_STATUS, &status); return status & (PCI_X_STATUS_266MHZ | PCI_X_STATUS_533MHZ); } 导致最终 82:00.0 对应的bus的bus_types设置上了 PCI_BUS_FLAGS_NO_EXTCFG 标...
pdev->l1ss = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_L1SS); rc = pci_add_ext_cap_save_buffer(pdev, PCI_EXT_CAP_ID_L1SS, 2 * sizeof(u32)); if (rc) pci_err(pdev, "unable to allocate ASPM L1SS save buffer (%pe)\n", ERR_PTR(rc)); } void pci_save_aspm_l1...
/* Reserve buses for SR-IOV capability. */ max += pci_iov_bus_range(bus); /* * After performing arch-dependent fixup of the bus, look behind * all PCI-to-PCI bridges on this bus. */ if (!bus->is_added) { pr_debug("PCI: Fixups for bus %04x:%02x\n", ...
/* Reserve buses for SR-IOV capability. */ max += pci_iov_bus_range(bus); /* * After performing arch-dependent fixup of the bus, look behind * all PCI-to-PCI bridges on this bus. */ if (!bus->is_added) { pr_debug("PCI: Fixups for bus %04x:%02x\n", ...
error=pci_add_ext_cap_save_buffer(dev,PCI_EXT_CAP_ID_L1SS, 3491+ 2*sizeof(u32)); 3492+ if(error) 3493+ pci_err(dev,"unable to allocate suspend buffer for ASPM-L1SS\n"); 3494+ 34883495 pci_allocate_vc_save_buffers(dev); ...
void __init i386_start_kernel(void) { switch (boot_params.hdr.hardware_subarch) { case X86_SUBARCH_MRST: x86_mrst_early_setup(); break; } mrst.c(x86_init.pci.init的来历) struct pci_ops pci_mrst_ops = { .read = pci_read, ...