From 025cc946d444c7855ee739a0e64cd68186162708 Mon Sep 17 00:00:00 2001 From: tinkeros Date: Thu, 5 Jan 2023 20:42:57 -0600 Subject: [PATCH] Fix issue preventing network adapter detection with multiple adapters --- src/Home/Net/Drivers/Run.ZC | 37 ++++++++++++++----------------------- src/System/DevInfo.ZC | 4 +++- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/Home/Net/Drivers/Run.ZC b/src/Home/Net/Drivers/Run.ZC index 331f0195..94c0451f 100755 --- a/src/Home/Net/Drivers/Run.ZC +++ b/src/Home/Net/Drivers/Run.ZC @@ -24,32 +24,23 @@ U0 NetDriverInit() CPCIDev *net_driver_pci = PCIDevFind(PCIC_NETWORK); Bool found = FALSE; - switch (net_driver_pci->vendor_id) + if (net_driver_pci) { - case PCIV_PCNET: - switch (net_driver_pci->device_id) - { - case PCID_PCNET: - NetDriverInclude("PCNet"); - found = TRUE; - break; - } - break; - - case PCIV_E1000: - switch (net_driver_pci->device_id) - { - case PCID_82545EM: - NetDriverInclude("E1000"); - found = TRUE; - break; - } - break; - - case PCIV_VIRTIO: + if (net_driver_pci=PCIDevFind(, , PCIV_PCNET, PCID_PCNET)) + { + NetDriverInclude("PCNet"); + found = TRUE; + } + else if (net_driver_pci=PCIDevFind(, , PCIV_E1000, PCID_82545EM)) + { + NetDriverInclude("E1000"); + found = TRUE; + } + else if (net_driver_pci=PCIDevFind(PCIC_NETWORK, , PCIV_VIRTIO, )) + { NetDriverInclude("VirtIONet"); found = TRUE; - break; + } } if (!found) diff --git a/src/System/DevInfo.ZC b/src/System/DevInfo.ZC index b401be15..b3578df3 100755 --- a/src/System/DevInfo.ZC +++ b/src/System/DevInfo.ZC @@ -55,7 +55,7 @@ lud_done: public CPCIDev *PCIDevFind(U16 class_code=NULL, U16 sub_code=NULL, U16 vendor_id=NULL, U16 device_id=NULL, U8 _bus=0xFF, U8 _dev=0xFF, U8 _fun=0xFF) -{//return first device with matching class & subcode, vendor & device id, or a specific device. +{//return first device with matching class & subcode, vendor & device id, class & device id, class & vendor id or a specific device. PCILookUpDevs; CPCIDev *p = dev.pci_head.next; @@ -63,6 +63,8 @@ public CPCIDev *PCIDevFind(U16 class_code=NULL, U16 sub_code=NULL, { if (p->vendor_id == vendor_id && p->device_id == device_id || p->class_code == class_code && p->sub_code == sub_code || + p->class_code == class_code && p->device_id == device_id && vendor_id == NULL || + p->class_code == class_code && p->vendor_id == vendor_id && device_id == NULL || p->bus == _bus && p->dev == _dev && p->fun == _fun) return p;