lshw/SOURCES/0002-Avoid-very-long-IDE-pr...

73 lines
3.1 KiB
Diff

From 60173f077a54610e7b80f24e9189aee29fbd6012 Mon Sep 17 00:00:00 2001
From: Dan Callaghan <dcallagh@redhat.com>
Date: Mon, 9 Jul 2018 17:46:39 +1000
Subject: [PATCH 2/8] Avoid very long IDE programming interface names as
capabilities
Recent versions of the PCIID database added programming interface names
for IDE controllers, like this:
01 IDE interface
00 ISA Compatibility mode-only controller
05 PCI native mode-only controller
0a ISA Compatibility mode controller, supports both channels switched to PCI native mode
0f PCI native mode controller, supports both channels switched to ISA compatibility mode
80 ISA Compatibility mode-only controller, supports bus mastering
85 PCI native mode-only controller, supports bus mastering
8a ISA Compatibility mode controller, supports both channels switched to PCI native mode, supports bus mastering
8f PCI native mode controller, supports both channels switched to ISA compatibility mode, supports bus mastering
resulting in an awkwardly named capability for the IDE controller:
<capabilities>
<capability id="ide" />
<capability id="pci_native_mode_controller__supports_both_channels_switched_to_isa_compatibility_mode__supports_bus_mastering" />
<capability id="bus_master" >bus mastering</capability>
</capabilities>
This patch adds a special case for IDE controllers to avoid using the
programming interface name as a capability. Instead, separate
capabilities are added for the possible combinations:
<capabilities>
<capability id="ide" />
<capability id="isa_compat_mode" >ISA compatibility mode</capability>
<capability id="pci_native_mode" >PCI native mode</capability>
<capability id="bus_master" >bus mastering</capability>
</capabilities>
---
src/core/pci.cc | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/core/pci.cc b/src/core/pci.cc
index d6111fdf096d..c8380c3034be 100644
--- a/src/core/pci.cc
+++ b/src/core/pci.cc
@@ -965,7 +965,21 @@ static hwNode *scan_pci_dev(struct pci_dev &d, hwNode & n)
}
device->setDescription(get_class_description(dclass));
- if (moredescription != ""
+ if (dclass == PCI_CLASS_STORAGE_IDE)
+ {
+ // IDE programming interface names are really long and awkward,
+ // so don't add them as capabilities
+ if (progif == 0x00 || progif == 0x80)
+ device->addCapability("isa_compat_mode", "ISA compatibility mode");
+ else if (progif == 0x05 || progif == 0x85)
+ device->addCapability("pci_native_mode", "PCI native mode");
+ else if (progif == 0x0a || progif == 0x0f || progif == 0x8a || progif == 0x8f)
+ {
+ device->addCapability("isa_compat_mode", "ISA compatibility mode");
+ device->addCapability("pci_native_mode", "PCI native mode");
+ }
+ }
+ else if (moredescription != ""
&& moredescription != device->getDescription())
{
device->addCapability(moredescription);
--
2.17.1