Index: /branches/rel_apv_10_7_4/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c
===================================================================
--- /branches/rel_apv_10_7_4/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c	(revision 39798)
+++ /branches/rel_apv_10_7_4/usr/click/lib/libuinet-atcp/lib/libuinet/uinet_host_pci.c	(working copy)
@@ -49,15 +49,15 @@
 void
 print_pcib_summary(void)
 {
-	int i, f;
-        for (i = 0; i < total_pcib; i++) {
-		for (f = 0; f < pcib_nicdevs[i].num_func; f++) {
-			printf("PCI Bridge %d.%d (%04x:%02x:%02x.%x): %d NICs found\n",
-			       i, f, pcib_nicdevs[i].domain, pcib_nicdevs[i].bus,
-			       pcib_nicdevs[i].dev, pcib_nicdevs[i].func[f],
-			       pcib_nicdevs[i].num_nic_on_func_id[f]);
-		}
+    int i, f;
+    for (i = 0; i < total_pcib; i++) {
+        for (f = 0; f < pcib_nicdevs[i].num_func; f++) {
+            printf("PCI Bridge %d.%d (%04x:%02x:%02x.%x): %d NICs found\n",
+                   i, f, pcib_nicdevs[i].domain, pcib_nicdevs[i].bus,
+                   pcib_nicdevs[i].dev, pcib_nicdevs[i].func[f],
+                   pcib_nicdevs[i].num_nic_on_func_id[f]);
         }
+    }
 }
 
 int get_X11SPL_F_pci_index(struct pcib_slot_list *pci_index)
@@ -340,6 +340,7 @@
 static int
 find_pcib(int pcin, pcib_slot_t* pcib_slot, int domain)
 {
+	printf("find_pcib(). pcin=%d domain=%d\n", pcin, domain);
 	int ret;
 	int count = 0;
 	int i, f;
@@ -366,6 +367,9 @@
 			continue;
 		}
 		if (primary_bus == pcin) {
+			printf("dev found: domain=%d bus=%d dev=%d func=%d vendor_id=0x%04x device_id=0x%04x\n",
+			       dev->domain, dev->bus, dev->dev, dev->func,
+			       dev->vendor_id, dev->device_id);
 			if (dev->func != 0) { /* multi-function */
 				if (pcib_slot == NULL) {
 					continue;
@@ -389,6 +393,21 @@
 				pcib_slot[i].func[f] = dev->func;
 				pcib_slot[i].num_func++;
 				pcib_slot[i].numa_domain = domain;
+				// Urgly hack here:
+				// if device_id == 0x2031 || device_id == 0x2033, that means we find a 8x1G NIC.
+				// We need to swap pcib_slot[i] with pcib_slot[i-1] to make it has the same order
+				// as physical slot order.
+				// This is specific for APV7900/9900 only.
+				if (chipset_id == CHIPSET_ID_CB1920 && dev->vendor_id == 0x8086 &&
+					(dev->device_id == 0x2031 || dev->device_id == 0x2033)) {
+					if (i > 0) {
+						pcib_slot_t temp;
+						printf("Swap pcib_slot %d and %d for 8x1G NIC on APV7900/9900\n", i, i-1);
+						memcpy(&temp, &pcib_slot[i-1], sizeof(pcib_slot_t));
+						memcpy(&pcib_slot[i-1], &pcib_slot[i], sizeof(pcib_slot_t));
+						memcpy(&pcib_slot[i], &temp, sizeof(pcib_slot_t));
+					}
+				}				
 			}
 			if (i == count) {
 				count++;
@@ -397,7 +416,6 @@
 	}
 
 	pci_iterator_destroy(iter);
-
 	return count;
 }
 
Index: /branches/rel_apv_10_7_4/usr/src/sys/click/net/if_cafw.c
===================================================================
--- /branches/rel_apv_10_7_4/usr/src/sys/click/net/if_cafw.c	(revision 39798)
+++ /branches/rel_apv_10_7_4/usr/src/sys/click/net/if_cafw.c	(working copy)
@@ -433,49 +433,41 @@
 };
 
 // AEWIN CB-1920
-// Not sure why but following order change from:
-// PCI Bridge 0.0 (0000:17:00.0): 4 NICs found
-// PCI Bridge 1.0 (0000:5d:02.0): 4 NICs found
-// to:
 // PCI Bridge 0.0 (0000:5d:02.0): 4 NICs found
 // PCI Bridge 1.0 (0000:17:00.0): 4 NICs found
-// Maybe some hardware/firmware version changed between development to testing.
+// PCI Bridge 2.0 (0000:17:02.0): 4 NICs found
+// PCI Bridge 3.0 (0000:85:00.0): 4 NICs found
+// PCI Bridge 4.0 (0000:85:02.0): 4 NICs found
+// PCI Bridge 5.0 (0000:85:03.0): 4 NICs found
+
+// [root@AN ~]# lspci -vt
+// +-[0000:d7]-+-02.0-[d8]----00.0  Cavium, Inc. Device 0012
+// +-[0000:85]-+-00.0-[86-87]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           +-02.0-[88-89]--+-00.0  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               +-00.1  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               +-00.2  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               \-00.3  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           +-03.0-[8a-8b]--+-00.0  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               +-00.1  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               +-00.2  Intel Corporation I350 Gigabit Fiber Network Connection
+// |           |               \-00.3  Intel Corporation I350 Gigabit Fiber Network Connection
+// +-[0000:5d]-+-02.0-[5e-61]----00.0-[5f-61]----03.0-[60-61]--+-00.0  Intel Corporation Device 37d3
+// |           |                                               +-00.1  Intel Corporation Device 37d3
+// |           |                                               +-00.2  Intel Corporation Device 37d3
+// |           |                                               \-00.3  Intel Corporation Device 37d3
+// +-[0000:17]-+-00.0-[18-19]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           +-02.0-[1a-1b]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+// |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
+
 
-// [root@yv2eM4Xp ca_log]# lspci -vt
-//  +-[0000:ae]-+-00.0-[af-b0]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           +-02.0-[b1-b2]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//   +-[0000:3a]-+-00.0-[3b-3c]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           +-02.0-[3d-3e]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  +-[0000:85]-+-00.0-[86-87]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           +-02.0-[88-89]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  +-[0000:5d]-+-02.0-[5e-61]----00.0-[5f-61]----03.0-[60-61]--+-00.0  Intel Corporation Device 37d3
-//  |           |                                               +-00.1  Intel Corporation Device 37d3
-//  |           |                                               +-00.2  Intel Corporation Device 37d3
-//  |           |                                               \-00.3  Intel Corporation Device 37d3
-//  +-[0000:17]-+-00.0-[18]----00.0  Cavium, Inc. Device 0012
-//  |           +-02.0-[19-1a]--+-00.0  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.1  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               +-00.2  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-//  |           |               \-00.3  Intel Corporation Ethernet Controller X710 for 10GbE SFP+
-// Now I'm the "PM" :(
 static struct pcib_slot_map nic_slot_map_pcib_CB1920[MAX_SUBMAP][MAX_SLOTS] = {
 	{
 		{0, 0}, {-1, -1},
