]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/net/tg3.c
pci: Add large and small resource data type code
[net-next-2.6.git] / drivers / net / tg3.c
index 5fccbe4599499194dc876200c82539035c565f09..ed57a62b3ac86f0a48cb6a0723ba1ffc14c9a735 100644 (file)
@@ -12589,15 +12589,26 @@ static void __devinit tg3_read_partno(struct tg3 *tp)
                unsigned char val = vpd_data[i];
                unsigned int block_end;
 
-               if (val == 0x82 || val == 0x91) {
-                       i += PCI_VPD_LRDT_TAG_SIZE +
-                            pci_vpd_lrdt_size(&vpd_data[i]);
+               if (val & PCI_VPD_LRDT) {
+                       if (i + PCI_VPD_LRDT_TAG_SIZE > TG3_NVM_VPD_LEN)
+                               break;
+
+                       if (val != PCI_VPD_LRDT_RO_DATA) {
+                               i += PCI_VPD_LRDT_TAG_SIZE +
+                                    pci_vpd_lrdt_size(&vpd_data[i]);
+
+                               continue;
+                       }
+               } else {
+                       if ((val & PCI_VPD_SRDT_TIN_MASK) == PCI_VPD_STIN_END)
+                               break;
+
+                       i += PCI_VPD_SRDT_TAG_SIZE +
+                            pci_vpd_srdt_size(&vpd_data[i]);
+
                        continue;
                }
 
-               if (val != 0x90)
-                       goto out_not_found;
-
                block_end = i + PCI_VPD_LRDT_TAG_SIZE +
                            pci_vpd_lrdt_size(&vpd_data[i]);