]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/SnpDxe/Snp.c
Fix a bug introuduced by r16104, not all NIC device implement both memory and IO...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / SnpDxe / Snp.c
index aa5926a6a521321d9d864917267870d75210a4ef..a63dd10b296d8b7d7a1d0332336467868e3dc253 100644 (file)
@@ -455,10 +455,14 @@ SimpleNetworkDriverStart (
   Snp->Db   = (VOID *) ((UINTN) Address + 2048);\r
 \r
   //\r
-  // Find the correct memory and io bar.\r
+  // Find the correct BAR to do IO.\r
   //\r
-  Snp->MemoryBarIndex = PCI_MAX_BAR;\r
-  Snp->IoBarIndex     = PCI_MAX_BAR;\r
+  // Enumerate through the PCI BARs for the device to determine which one is\r
+  // the IO BAR.  Save the index of the BAR into the adapter info structure.\r
+  // for regular 32bit BARs, 0 is memory mapped, 1 is io mapped\r
+  //\r
+  Snp->MemoryBarIndex = 0;\r
+  Snp->IoBarIndex     = 1;\r
   for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex++) {\r
     Status = PciIo->GetBarAttributes (\r
                       PciIo,\r
@@ -480,9 +484,6 @@ SimpleNetworkDriverStart (
 \r
     FreePool (BarDesc);\r
   }\r
-  if ((Snp->MemoryBarIndex == PCI_MAX_BAR) || (Snp->IoBarIndex == PCI_MAX_BAR)) {\r
-    goto Error_DeleteSNP;\r
-  }\r
 \r
   Status = PxeStart (Snp);\r
 \r