aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2010-02-26 09:04:40 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-28 03:43:31 -0500
commit7ad506fa1adc2da3d394c562f09b8e1b3026c402 (patch)
treea4ace2d9918a000d7983eb0770f2346ed7e323aa /drivers/net
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')
-rw-r--r--drivers/net/bnx2.c23
-rw-r--r--drivers/net/tg3.c23
2 files changed, 34 insertions, 12 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index bb403887b549..084ef102b8c4 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -7772,15 +7772,26 @@ bnx2_read_vpd_fw_ver(struct bnx2 *bp)
7772 unsigned char val = data[i]; 7772 unsigned char val = data[i];
7773 unsigned int block_end; 7773 unsigned int block_end;
7774 7774
7775 if (val == 0x82 || val == 0x91) { 7775 if (val & PCI_VPD_LRDT) {
7776 i += PCI_VPD_LRDT_TAG_SIZE + 7776 if (i + PCI_VPD_LRDT_TAG_SIZE > BNX2_VPD_LEN)
7777 pci_vpd_lrdt_size(&data[i]); 7777 break;
7778
7779 if (val != PCI_VPD_LRDT_RO_DATA) {
7780 i += PCI_VPD_LRDT_TAG_SIZE +
7781 pci_vpd_lrdt_size(&data[i]);
7782
7783 continue;
7784 }
7785 } else {
7786 if ((val & PCI_VPD_SRDT_TIN_MASK) == PCI_VPD_STIN_END)
7787 break;
7788
7789 i += PCI_VPD_SRDT_TAG_SIZE +
7790 pci_vpd_srdt_size(&data[i]);
7791
7778 continue; 7792 continue;
7779 } 7793 }
7780 7794
7781 if (val != 0x90)
7782 goto vpd_done;
7783
7784 block_end = (i + PCI_VPD_LRDT_TAG_SIZE + 7795 block_end = (i + PCI_VPD_LRDT_TAG_SIZE +
7785 pci_vpd_lrdt_size(&data[i])); 7796 pci_vpd_lrdt_size(&data[i]));
7786 i += PCI_VPD_LRDT_TAG_SIZE; 7797 i += PCI_VPD_LRDT_TAG_SIZE;
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 5fccbe459949..ed57a62b3ac8 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -12589,15 +12589,26 @@ static void __devinit tg3_read_partno(struct tg3 *tp)
12589 unsigned char val = vpd_data[i]; 12589 unsigned char val = vpd_data[i];
12590 unsigned int block_end; 12590 unsigned int block_end;
12591 12591
12592 if (val == 0x82 || val == 0x91) { 12592 if (val & PCI_VPD_LRDT) {
12593 i += PCI_VPD_LRDT_TAG_SIZE + 12593 if (i + PCI_VPD_LRDT_TAG_SIZE > TG3_NVM_VPD_LEN)
12594 pci_vpd_lrdt_size(&vpd_data[i]); 12594 break;
12595
12596 if (val != PCI_VPD_LRDT_RO_DATA) {
12597 i += PCI_VPD_LRDT_TAG_SIZE +
12598 pci_vpd_lrdt_size(&vpd_data[i]);
12599
12600 continue;
12601 }
12602 } else {
12603 if ((val & PCI_VPD_SRDT_TIN_MASK) == PCI_VPD_STIN_END)
12604 break;
12605
12606 i += PCI_VPD_SRDT_TAG_SIZE +
12607 pci_vpd_srdt_size(&vpd_data[i]);
12608
12595 continue; 12609 continue;
12596 } 12610 }
12597 12611
12598 if (val != 0x90)
12599 goto out_not_found;
12600
12601 block_end = i + PCI_VPD_LRDT_TAG_SIZE + 12612 block_end = i + PCI_VPD_LRDT_TAG_SIZE +
12602 pci_vpd_lrdt_size(&vpd_data[i]); 12613 pci_vpd_lrdt_size(&vpd_data[i]);
12603 12614