mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-28 00:06:55 +00:00
config_tools: format BDF in descriptions of PCI devices
This patch adds the BDF (in the format BBBB:DD.F) of each PCI device into its description, which helps the configurator to fetch all available PCI devices via XPATH rather than text manipulating functions. Tracked-On: #6690 Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
parent
95c2849cee
commit
8c46c2306f
@ -98,10 +98,22 @@ def lookup_pci_device(element, ids):
|
|||||||
class_code = get_node(element, "class/text()")
|
class_code = get_node(element, "class/text()")
|
||||||
|
|
||||||
args = [vendor_id, device_id, subsystem_vendor_id, subsystem_device_id, class_code]
|
args = [vendor_id, device_id, subsystem_vendor_id, subsystem_device_id, class_code]
|
||||||
desc = ids.lookup(*list(map(lambda x: int(x, base=16) if x else None, args)))
|
|
||||||
|
|
||||||
if desc:
|
desc = ids.lookup(*list(map(lambda x: int(x, base=16) if x else None, args))) if ids else ""
|
||||||
element.set("description", desc)
|
|
||||||
|
bus_id = int(get_node(element, "ancestor-or-self::bus[1]/@address"), base=16)
|
||||||
|
dev_func_id = int(get_node(element, "./@address"), base=16)
|
||||||
|
dev_id = dev_func_id >> 16
|
||||||
|
func_id = dev_func_id & 0xf
|
||||||
|
|
||||||
|
if element.tag == "bus":
|
||||||
|
if desc:
|
||||||
|
element.set("description", desc)
|
||||||
|
else:
|
||||||
|
if desc:
|
||||||
|
element.set("description", f"{bus_id:02x}:{dev_id:02x}.{func_id} {desc}")
|
||||||
|
else:
|
||||||
|
element.set("description", f"{bus_id:02x}:{dev_id:02x}.{func_id}")
|
||||||
|
|
||||||
def lookup_pci_devices(board_etree):
|
def lookup_pci_devices(board_etree):
|
||||||
# Lookup names of PCI devices from pci.ids if possible
|
# Lookup names of PCI devices from pci.ids if possible
|
||||||
@ -114,16 +126,17 @@ def lookup_pci_devices(board_etree):
|
|||||||
opener = gzip.open if pci_id_path.endswith(".gz") else open
|
opener = gzip.open if pci_id_path.endswith(".gz") else open
|
||||||
with opener(pci_id_path, "r") as f:
|
with opener(pci_id_path, "r") as f:
|
||||||
ids = PCI_IDs(f)
|
ids = PCI_IDs(f)
|
||||||
|
|
||||||
devices = board_etree.xpath("//device")
|
|
||||||
for device in devices:
|
|
||||||
lookup_pci_device(device, ids)
|
|
||||||
|
|
||||||
buses = board_etree.xpath("//bus")
|
|
||||||
for bus in buses:
|
|
||||||
lookup_pci_device(bus, ids)
|
|
||||||
else:
|
else:
|
||||||
logging.info(f"Cannot find pci.ids under /usr/share. PCI device names will not be available.")
|
logging.info(f"Cannot find pci.ids under /usr/share. PCI device names will not be available.")
|
||||||
|
ids = None
|
||||||
|
|
||||||
|
devices = board_etree.xpath("//device[vendor and class]")
|
||||||
|
for device in devices:
|
||||||
|
lookup_pci_device(device, ids)
|
||||||
|
|
||||||
|
buses = board_etree.xpath("//bus[@type = 'pci']")
|
||||||
|
for bus in buses:
|
||||||
|
lookup_pci_device(bus, ids)
|
||||||
|
|
||||||
def extract(args, board_etree):
|
def extract(args, board_etree):
|
||||||
lookup_pci_devices(board_etree)
|
lookup_pci_devices(board_etree)
|
||||||
|
@ -222,7 +222,8 @@ CLOSID 0 and the second is mapped to virtual CLOSID 1, etc.</xs:documentation>
|
|||||||
<xs:complexType name="PCIDevsConfiguration">
|
<xs:complexType name="PCIDevsConfiguration">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="pci_dev" type="xs:string" minOccurs="0" maxOccurs="unbounded">
|
<xs:element name="pci_dev" type="xs:string" minOccurs="0" maxOccurs="unbounded">
|
||||||
<xs:annotation acrn:title="PCI device assignment">
|
<xs:annotation acrn:title="PCI device assignment"
|
||||||
|
acrn:options="//device[class]/@description" acrn:options-sorted-by="lambda s: (s.split(' ', maxsplit=1)[-1].split(':')[0], s.split(' ')[0])">
|
||||||
<xs:documentation>Select the PCI devices you want to assign to this virtual machine.</xs:documentation>
|
<xs:documentation>Select the PCI devices you want to assign to this virtual machine.</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
Loading…
Reference in New Issue
Block a user