For PCI Express capability, if max link width is greater than zero, print

the current and max link speed.

Sponsored by:	Intel
Discussed with:	jhb
MFC after:	1 week
This commit is contained in:
Jim Harris 2012-10-25 17:22:37 +00:00
parent 572dc5cfc5
commit ff473561da
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=242085

View File

@ -363,6 +363,22 @@ cap_subvendor(int fd, struct pci_conf *p, uint8_t ptr)
#define MAX_PAYLOAD(field) (128 << (field))
static const char *
link_speed_string(uint8_t speed)
{
switch (speed) {
case 1:
return ("2.5");
case 2:
return ("5.0");
case 3:
return ("8.0");
default:
return ("undef");
}
}
static void
cap_express(int fd, struct pci_conf *p, uint8_t ptr)
{
@ -418,6 +434,16 @@ cap_express(int fd, struct pci_conf *p, uint8_t ptr)
flags = read_config(fd, &p->pc_sel, ptr+ PCIER_LINK_STA, 2);
printf(" link x%d(x%d)", (flags & PCIEM_LINK_STA_WIDTH) >> 4,
(val & PCIEM_LINK_CAP_MAX_WIDTH) >> 4);
/*
* Only print link speed info if the link's max width is
* greater than 0.
*/
if ((val & PCIEM_LINK_CAP_MAX_WIDTH) != 0) {
printf("\n speed");
printf(" %s(%s)", (flags & PCIEM_LINK_STA_WIDTH) == 0 ?
"0.0" : link_speed_string(flags & PCIEM_LINK_STA_SPEED),
link_speed_string(val & PCIEM_LINK_CAP_MAX_SPEED));
}
}
static void