}
for (i = 0; i <= BNX2_VPD_LEN - 3; ) {
- unsigned char val = data[i];
unsigned int block_end;
- if (val == 0x82 || val == 0x91) {
- i = (i + 3 + (data[i + 1] + (data[i + 2] << 8)));
- continue;
- }
-
- if (val != 0x90)
- goto vpd_done;
+ i = pci_vpd_find_tag(data, i, BNX2_VPD_LEN,
+ PCI_VPD_LRDT_RO_DATA);
+ if (i < 0)
+ break;
- block_end = (i + 3 + (data[i + 1] + (data[i + 2] << 8)));
- i += 3;
+ block_end = (i + PCI_VPD_LRDT_TAG_SIZE +
+ pci_vpd_lrdt_size(&data[i]));
+ i += PCI_VPD_LRDT_TAG_SIZE;
if (block_end > BNX2_VPD_LEN)
goto vpd_done;