From 26485ff1a3ee849fb587f984b63081c4c2944292 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Aug 2021 17:45:24 -0300 Subject: [PATCH] pcireg: Sort table entries on 86Box mode. Hopefully the switch to a near memory block won't affect things. --- pcireg/PCIREG.EXE | Bin 35198 -> 34488 bytes pcireg/pcireg.c | 100 ++++++++++++++++++++++++++-------------------- 2 files changed, 57 insertions(+), 43 deletions(-) diff --git a/pcireg/PCIREG.EXE b/pcireg/PCIREG.EXE index ef128e21686c3b65e77e828ae08122ead5527b47..3b7efc45ea45876e615c591881aced197918bec1 100644 GIT binary patch delta 6227 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 delta 6921 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 NmWaV3Cgonh{2$FWh^hbp diff --git a/pcireg/pcireg.c b/pcireg/pcireg.c index 76c88ef..a956d28 100644 --- a/pcireg/pcireg.c +++ b/pcireg/pcireg.c @@ -64,15 +64,13 @@ typedef struct { } ints[4]; uint8_t slot, reserved; } irq_routing_entry_t; -struct { +typedef struct { uint16_t len; - void far *table_ptr; - irq_routing_entry_t entry[1]; -} far *irq_routing_table; -struct _irq_steering_table_ { - uint32_t signature; - uint8_t ver_min, ver_maj, size, dummy[25], cksum; -} far *irq_steering_table; + union { + uint8_t far *data_ptr; + irq_routing_entry_t entry[1]; + }; +} irq_routing_table_t; #pragma pack(pop) @@ -832,48 +830,62 @@ comp_ui8(const void *elem1, const void *elem2) } +int +comp_irq_routing_entry(const void *elem1, const void *elem2) +{ + irq_routing_entry_t *a = (irq_routing_entry_t *) elem1; + irq_routing_entry_t *b = (irq_routing_entry_t *) elem2; + uint8_t ret = comp_ui8(&a->bus, &b->bus); + if (!ret) + ret = comp_ui8(&a->dev, &b->dev); + return ret; +} + + int show_steering_table(char mode) { - int i, j; + int i, j, entries; uint8_t irq_bitmap[256], temp[4]; uint16_t buf_size, dev_class; uint32_t cf8; - irq_routing_entry_t far *entry; + irq_routing_table_t *table; + irq_routing_entry_t *entry; /* Allocate buffer for PCI BIOS. */ buf_size = 1024; retry_buf: - irq_routing_table = _fmalloc(buf_size); - if (!irq_routing_table) { + table = malloc(buf_size); + if (!table) { printf("Failed to allocate %d bytes.\n", buf_size); return 1; } /* Specify where the IRQ routing information will be placed. */ - irq_routing_table->len = buf_size; - irq_routing_table->table_ptr = &irq_routing_table->entry[0]; + table->len = buf_size; + table->data_ptr = (uint8_t far *) table; /* Call PCI BIOS to fetch IRQ routing information. */ rp.w.ax = 0xb10e; rp.w.bx = 0x0000; - rp.w.es = FP_SEG(irq_routing_table); - rp.w.di = FP_OFF(irq_routing_table); + rp.w.es = FP_SEG(table->data_ptr); + rp.w.di = FP_OFF(table->data_ptr); + table->data_ptr += 2; rp.w.ds = 0xf000; intr(0x1a, &rp); /* Check for any returned error. */ - if ((rp.h.ah == 0x59) && (irq_routing_table->len > buf_size)) { + if ((rp.h.ah == 0x59) && (table->len > buf_size)) { /* Re-allocate buffer with the requested size. */ - buf_size = irq_routing_table->len; + buf_size = table->len; printf("PCI BIOS claims %d bytes for table entries, ", buf_size); if (buf_size >= 65530) { printf("which looks invalid.\n"); return 1; } - printf("retrying...\n", buf_size); - buf_size += 6; - _ffree(irq_routing_table); + printf("retrying...\n"); + buf_size += 2; + free(table); goto retry_buf; } else if (rp.h.ah) { /* Something else went wrong. */ @@ -881,49 +893,51 @@ retry_buf: return 1; } + /* Count returned entries. */ + entries = table->len / sizeof(table->entry[0]); + /* Get terminal size. */ _getvideoconfig(&vc); if (mode == '8') { - /* Clear IRQ mapping array. */ + /* Sort table entries by device number for a tidier generated code. */ + entry = &table->entry[0]; + qsort(entry, entries, sizeof(table->entry[0]), comp_irq_routing_entry); + + /* Clear data array. */ memset(irq_bitmap, 0, sizeof(irq_bitmap)); - /* Identify INTx# link value mapping for 86Box mode. */ - buf_size = irq_routing_table->len; - entry = &irq_routing_table->entry[0]; - while (buf_size >= sizeof(irq_routing_table->entry[0])) { + /* Identify INTx# link value mapping by gathering all known values. */ + for (i = 0; i < entries; i++) { /* Ignore non-root buses. */ - if (entry->bus) - continue; - - /* Populate each IRQ link value. */ - for (i = 0; i < 4; i++) - irq_bitmap[entry->ints[i].link] = entry->ints[i].link; + if (!entry->bus) { + /* Populate each IRQ link value. */ + for (j = 0; j < 4; j++) + irq_bitmap[entry->ints[j].link] = entry->ints[j].link; + } /* Move on to the next entry. */ - buf_size -= sizeof(irq_routing_table->entry[0]); entry++; } - /* Sort entries. */ + /* Sort link value entries. */ qsort(irq_bitmap, sizeof(irq_bitmap), sizeof(irq_bitmap[0]), comp_ui8); - /* Jump to the first non-zero entry. */ + /* Jump to the first non-zero link value entry. */ for (i = 0; (i < sizeof(irq_bitmap)) && (!irq_bitmap[i]); i++); - /* Warn if the mapping is incomplete. */ + /* Warn if the mapping might not be completely valid. */ j = sizeof(irq_bitmap) - i; if (j % 4) printf("/* WARNING: %d IRQ link mappings found */\n", j); - /* Copy entries to temporary array. */ + /* Copy link value entries to temporary array. */ if (j > sizeof(temp)) j = sizeof(temp); memcpy(temp, &irq_bitmap[i], j); - /* Clear IRQ mapping array again. */ + /* Clear data array again. */ memset(irq_bitmap, 0, sizeof(irq_bitmap)); - /* Fill in mapping entries. */ for (i = 0; i < j; i++) { if (temp[i]) @@ -939,9 +953,9 @@ retry_buf: } /* Print entries until the end of the table. */ - buf_size = irq_routing_table->len; - entry = &irq_routing_table->entry[0]; - while (buf_size >= sizeof(irq_routing_table->entry[0])) { + buf_size = table->len; + entry = &table->entry[0]; + while (buf_size >= sizeof(table->entry[0])) { entry->dev >>= 3; if (mode == '8') { /* Ignore non-root buses. */ @@ -1020,7 +1034,7 @@ normal: /* Move on to the next entry. */ putchar('\n'); next_entry: - buf_size -= sizeof(irq_routing_table->entry[0]); + buf_size -= sizeof(table->entry[0]); entry++; }