dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dmidecode] [PATCH 1/3] biosdecode: Add option --pir full


From: Jean Delvare
Subject: [dmidecode] [PATCH 1/3] biosdecode: Add option --pir full
Date: Wed, 19 Jul 2017 10:23:22 +0200

Add an option to decode the details of the PIR table.

This implements support request #109339:
https://savannah.nongnu.org/support/index.php?109339
---
 biosdecode.c     |   59 ++++++++++++++++++++++++++++++-------------------------
 man/biosdecode.8 |    3 ++
 2 files changed, 36 insertions(+), 26 deletions(-)

--- dmidecode.orig/biosdecode.c 2017-07-17 11:01:58.836719674 +0200
+++ dmidecode/biosdecode.c      2017-07-17 11:15:54.810625212 +0200
@@ -73,12 +73,16 @@ struct opt
 {
        const char *devmem;
        unsigned int flags;
+       unsigned char pir;
 };
 static struct opt opt;
 
 #define FLAG_VERSION            (1 << 0)
 #define FLAG_HELP               (1 << 1)
 
+#define PIR_SHORT               0
+#define PIR_FULL                1
+
 struct bios_entry {
        const char *anchor;
        size_t anchor_len; /* computed */
@@ -386,32 +390,29 @@ static int pir_decode(const u8 *p, size_
                        i, p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
                pir_slot_number(p[(i + 1) * 16 + 14]);
                printf("\n");
-/*             printf("\tSlot Entry %u\n", i);
-               printf("\t\tID: %02x:%02x\n",
-                       p[(i + 1) * 16], p[(i + 1) * 16 + 1] >> 3);
-               printf("\t\tLink Value for INTA#: %u\n",
-                       p[(i + 1) * 16 + 2]);
-               printf("\t\tIRQ Bitmap for INTA#:");
-               pir_irqs(WORD(p + (i + 1) * 16 + 3));
-               printf("\n");
-               printf("\t\tLink Value for INTB#: %u\n",
-                       p[(i + 1) * 16 + 5]);
-               printf("\t\tIRQ Bitmap for INTB#:");
-               pir_irqs(WORD(p + (i + 1) * 16 + 6));
-               printf("\n");
-               printf("\t\tLink Value for INTC#: %u\n",
-                       p[(i + 1) * 16 + 8]);
-               printf("\t\tIRQ Bitmap for INTC#:");
-               pir_irqs(WORD(p + (i + 1) * 16 + 9));
-               printf("\n");
-               printf("\t\tLink Value for INTD#: %u\n",
-                       p[(i + 1) * 16 + 11]);
-               printf("\t\tIRQ Bitmap for INTD#:");
-               pir_irqs(WORD(p + (i + 1) * 16 + 12));
-               printf("\n");
-               printf("\t\tSlot Number:");
-               pir_slot_number(p[(i + 1) * 16 + 14]);
-               printf("\n");*/
+               if (opt.pir == PIR_FULL)
+               {
+                       printf("\t\tLink Value for INTA#: %u\n",
+                               p[(i + 1) * 16 + 2]);
+                       printf("\t\tIRQ Bitmap for INTA#:");
+                       pir_irqs(WORD(p + (i + 1) * 16 + 3));
+                       printf("\n");
+                       printf("\t\tLink Value for INTB#: %u\n",
+                               p[(i + 1) * 16 + 5]);
+                       printf("\t\tIRQ Bitmap for INTB#:");
+                       pir_irqs(WORD(p + (i + 1) * 16 + 6));
+                       printf("\n");
+                       printf("\t\tLink Value for INTC#: %u\n",
+                               p[(i + 1) * 16 + 8]);
+                       printf("\t\tIRQ Bitmap for INTC#:");
+                       pir_irqs(WORD(p + (i + 1) * 16 + 9));
+                       printf("\n");
+                       printf("\t\tLink Value for INTD#: %u\n",
+                               p[(i + 1) * 16 + 11]);
+                       printf("\t\tIRQ Bitmap for INTD#:");
+                       pir_irqs(WORD(p + (i + 1) * 16 + 12));
+                       printf("\n");
+               }
        }
 
        return 1;
@@ -616,6 +617,7 @@ static int parse_command_line(int argc,
        const char *optstring = "d:hV";
        struct option longopts[] = {
                { "dev-mem", required_argument, NULL, 'd' },
+               { "pir", required_argument, NULL, 'P' },
                { "help", no_argument, NULL, 'h' },
                { "version", no_argument, NULL, 'V' },
                { NULL, 0, NULL, 0 }
@@ -627,6 +629,10 @@ static int parse_command_line(int argc,
                        case 'd':
                                opt.devmem = optarg;
                                break;
+                       case 'P':
+                               if (strcmp(optarg, "full") == 0)
+                                       opt.pir = PIR_FULL;
+                               break;
                        case 'h':
                                opt.flags |= FLAG_HELP;
                                break;
@@ -646,6 +652,7 @@ static void print_help(void)
                "Usage: biosdecode [OPTIONS]\n"
                "Options are:\n"
                " -d, --dev-mem FILE     Read memory from device FILE (default: 
" DEFAULT_MEM_DEV ")\n"
+               "     --pir full         Decode the details of the PCI IRQ 
routing table\n"
                " -h, --help             Display this help text and exit\n"
                " -V, --version          Display the version and exit\n";
 
--- dmidecode.orig/man/biosdecode.8     2017-07-17 11:01:58.836719674 +0200
+++ dmidecode/man/biosdecode.8  2017-07-17 11:02:03.478781694 +0200
@@ -60,6 +60,9 @@ program.
 .BR "-d" ", " "--dev-mem FILE"
 Read memory from device \fBFILE\fR (default: \fB/dev/mem\fR)
 .TP
+.BR "  " "  " "--pir full"
+Decode the details of the PCI IRQ routing table
+.TP
 .BR "-h" ", " "--help"
 Display usage information and exit
 .TP

-- 
Jean Delvare
SUSE L3 Support



reply via email to

[Prev in Thread] Current Thread [Next in Thread]