[PATCH] bios: pciirq: make table dump more compact, fix formatting
Colin King
colin.king at canonical.com
Wed Dec 12 01:09:52 UTC 2012
From: Colin Ian King <colin.king at canonical.com>
The PCI IRQ table dump is really rather verbose and confusing. This
patch dumps it out in a more compact and useful format. Also fix
the formatting of the reserved field. Remove an incorrect test when
the links are zero (unused) which was producing false positives.
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
src/bios/pciirq/pciirq.c | 39 +++++++++++++++++++++------------------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/src/bios/pciirq/pciirq.c b/src/bios/pciirq/pciirq.c
index 3cdb532..e510e86 100644
--- a/src/bios/pciirq/pciirq.c
+++ b/src/bios/pciirq/pciirq.c
@@ -61,14 +61,14 @@ typedef struct {
static const char *pciirq_reserved(uint8_t *data)
{
- static char buf[1+ (RESERVED_SIZE * 3)];
- char tmp[4];
+ static char buf[1+ (RESERVED_SIZE * 5)];
+ char tmp[6];
int i;
*buf = '\0';
for (i=0; i < RESERVED_SIZE; i++) {
- snprintf(tmp, sizeof(tmp), "%s%2.2x", *buf ? ",": "", data[i]);
+ snprintf(tmp, sizeof(tmp), "%s0x%2.2x", *buf ? ",": "", data[i]);
strcat(buf, tmp);
}
return buf;
@@ -149,25 +149,34 @@ static int pciirq_test1(fwts_framework *fw)
fwts_log_info_verbatum(fw, " Miniport Data : 0x%8.8x%s",
pciirq->miniport_data,
pciirq->miniport_data ? "" : " (none)");
- fwts_log_info_verbatum(fw, " Reserved : 0x%s",
+ fwts_log_info_verbatum(fw, " Reserved : %s",
pciirq_reserved(pciirq->reserved));
fwts_log_info_verbatum(fw, " Checksum : 0x%2.2x",
pciirq->checksum);
fwts_log_nl(fw);
+ /*
+ * Dump table
+ */
+ fwts_log_info_verbatum(fw, "Bus:Dev Slot INTA# INTB# INTC# INTD#");
for (slot = pciirq->slots, j = 0; j < slot_count; j++, slot++) {
- fwts_log_info_verbatum(fw, " Slot Entry %d:", j);
- fwts_log_info_verbatum(fw, " ID: %2.2x:%2.2x, Slot Number : 0x%2.2x%s",
+ char buffer[80];
+ char *ptr = buffer;
+
+ ptr += snprintf(ptr, sizeof(buffer),
+ " %2.2x:%2.2x %2.2x ",
slot->pci_bus_number, slot->pci_dev_number >> 3,
- slot->slot_number, slot->slot_number ? "" : " (on-board)");
+ slot->slot_number);
for (k = 0; k < 4; k++) {
- fwts_log_info_verbatum(fw, " INT%c# Link Value : 0x%2.2x%s, "
- "IRQ Bitmap 0x%4.4x (%s)", 'A' + k,
- slot->INT[k].link, slot->INT[k].link ? "" : " (not connected)",
- slot->INT[k].bitmap, pciirq_irq_bitmap(slot->INT[k].bitmap));
+ if (slot->INT[k].link)
+ ptr += snprintf(ptr, sizeof(buffer) - (ptr - buffer),
+ "%2.2x/%4.4x ", slot->INT[k].link, slot->INT[k].bitmap);
+ else
+ ptr += snprintf(ptr, sizeof(buffer) - (ptr - buffer), " ");
}
- fwts_log_nl(fw);
+ fwts_log_info_verbatum(fw, "%s", buffer);
}
+ fwts_log_nl(fw);
found++;
@@ -202,12 +211,6 @@ static int pciirq_test1(fwts_framework *fw)
slot_ok = true;
for (slot = pciirq->slots, j = 0; j < slot_count; j++, slot++) {
for (k = 0; k < 4; k++) {
- if ((slot->INT[k].link == 0) && (slot->INT[k].bitmap != 0)) {
- fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIIRQLinkBitmap",
- "Slot %d INT%c# has a has an IRQ bitmap defined "
- "but the link is not connected.", j, k + 'A');
- slot_ok = false;
- }
if ((slot->INT[k].link != 0) && (slot->INT[k].bitmap == 0)) {
fwts_failed(fw, LOG_LEVEL_MEDIUM, "PCIIRQLinkBitmap",
"Slot %d INT%c# has a has an link connected "
--
1.8.0
More information about the fwts-devel
mailing list