Skip to content

Commit

Permalink
pci: Add PCI LRDT tag size and section size
Browse files Browse the repository at this point in the history
This patch adds a preprocessor constant to describe the PCI VPD large
resource data type tag size and an inline function to extract the large
resource section size from the large resource data type tag.

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>
  • Loading branch information
Matt Carlson authored and David S. Miller committed Feb 28, 2010
1 parent 2ea186a commit a2ce766
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 10 deletions.
8 changes: 5 additions & 3 deletions drivers/net/bnx2.c
Original file line number Diff line number Diff line change
Expand Up @@ -7773,15 +7773,17 @@ bnx2_read_vpd_fw_ver(struct bnx2 *bp)
unsigned int block_end;

if (val == 0x82 || val == 0x91) {
i = (i + 3 + (data[i + 1] + (data[i + 2] << 8)));
i += PCI_VPD_LRDT_TAG_SIZE +
pci_vpd_lrdt_size(&data[i]);
continue;
}

if (val != 0x90)
goto vpd_done;

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;
Expand Down
13 changes: 6 additions & 7 deletions drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -12590,19 +12590,18 @@ static void __devinit tg3_read_partno(struct tg3 *tp)
unsigned int block_end;

if (val == 0x82 || val == 0x91) {
i = (i + 3 +
(vpd_data[i + 1] +
(vpd_data[i + 2] << 8)));
i += PCI_VPD_LRDT_TAG_SIZE +
pci_vpd_lrdt_size(&vpd_data[i]);
continue;
}

if (val != 0x90)
goto out_not_found;

block_end = (i + 3 +
(vpd_data[i + 1] +
(vpd_data[i + 2] << 8)));
i += 3;
block_end = i + PCI_VPD_LRDT_TAG_SIZE +
pci_vpd_lrdt_size(&vpd_data[i]);

i += PCI_VPD_LRDT_TAG_SIZE;

if (block_end > TG3_NVM_VPD_LEN)
goto out_not_found;
Expand Down
14 changes: 14 additions & 0 deletions include/linux/pci.h
Original file line number Diff line number Diff line change
Expand Up @@ -1349,5 +1349,19 @@ static inline bool pci_is_pcie(struct pci_dev *dev)

void pci_request_acs(void);


#define PCI_VPD_LRDT_TAG_SIZE 3

/**
* pci_vpd_lrdt_size - Extracts the Large Resource Data Type length
* @lrdt: Pointer to the beginning of the Large Resource Data Type tag
*
* Returns the extracted Large Resource Data Type length.
*/
static inline u16 pci_vpd_lrdt_size(const u8 *lrdt)
{
return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
}

#endif /* __KERNEL__ */
#endif /* LINUX_PCI_H */

0 comments on commit a2ce766

Please sign in to comment.