summaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2010-02-26 14:04:40 +0000
committerDavid S. Miller <davem@davemloft.net>2010-02-28 00:43:31 -0800
commit7ad506fa1adc2da3d394c562f09b8e1b3026c402 (patch)
treea4ace2d9918a000d7983eb0770f2346ed7e323aa /drivers/net/tg3.c
parenta2ce766238f72ff7337606c0bc96803c30c9e05c (diff)
pci: Add large and small resource data type code
This patch introduces more VPD preprocessor definitions to identify some small and large resource data type item names. The patch then continues to correct how the tg3 and bnx2 drivers search for the "read-only data" large resource data type. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 5fccbe45994..ed57a62b3ac 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -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]);