Index: Snp.c
===================================================================
--- Snp.c	(revision 16104)
+++ Snp.c	(working copy)
@@ -455,10 +455,14 @@
   Snp->Db   = (VOID *) ((UINTN) Address + 2048);
 
   //
-  // Find the correct memory and io bar.
+  // Find the correct BAR to do IO.
   //
-  Snp->MemoryBarIndex = PCI_MAX_BAR;
-  Snp->IoBarIndex     = PCI_MAX_BAR;
+  // Enumerate through the PCI BARs for the device to determine which one is
+  // the IO BAR.  Save the index of the BAR into the adapter info structure.
+  // for regular 32bit BARs, 0 is memory mapped, 1 is io mapped
+  //
+  Snp->MemoryBarIndex = 0;
+  Snp->IoBarIndex     = 1;
   for (BarIndex = 0; BarIndex < PCI_MAX_BAR; BarIndex++) {
     Status = PciIo->GetBarAttributes (
                       PciIo,
@@ -480,9 +484,6 @@
 
     FreePool (BarDesc);
   }
-  if ((Snp->MemoryBarIndex == PCI_MAX_BAR) || (Snp->IoBarIndex == PCI_MAX_BAR)) {
-    goto Error_DeleteSNP;
-  }
 
   Status = PxeStart (Snp);
 
