You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.1 KiB
136 lines
4.1 KiB
From 6486331cf66e35bcf01e1c15c4396af68b6eb4d4 Mon Sep 17 00:00:00 2001 |
|
From: Jean Delvare <jdelvare@suse.de> |
|
Date: Tue, 25 Jul 2017 11:21:22 +0200 |
|
Subject: [PATCH 04/10] biosdecode: Add option --pir full |
|
|
|
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(-) |
|
|
|
diff --git a/biosdecode.c b/biosdecode.c |
|
index ad3d4bc..8293e61 100644 |
|
--- a/biosdecode.c |
|
+++ b/biosdecode.c |
|
@@ -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_t len) |
|
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, char * const argv[]) |
|
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, char * const argv[]) |
|
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"; |
|
|
|
diff --git a/man/biosdecode.8 b/man/biosdecode.8 |
|
index c39d6a0..a96eb68 100644 |
|
--- a/man/biosdecode.8 |
|
+++ b/man/biosdecode.8 |
|
@@ -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 |
|
-- |
|
2.9.5 |
|
|
|
|