From e8351f1a2c735e32d6fb81f180f25d751caf6fe7 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Fri, 26 Sep 2008 00:32:14 -0400 Subject: [PATCH] Bother the 3c905 every time we take an IRQ, which makes the bothering 'stick'. --- aseg/counter.c | 3 +++ aseg/firstrun.c | 26 ++++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/aseg/counter.c b/aseg/counter.c index 6ef4cf9..5c88850 100644 --- a/aseg/counter.c +++ b/aseg/counter.c @@ -100,6 +100,9 @@ void smi_entry(void) sprintf(statstr, "15-412! %08x %08x", smi_status(), counter); strblit(statstr, 0, 0); + extern void do_bother(); + do_bother(); + if (inl(0x840) & 0x1000) { pci_dump(); diff --git a/aseg/firstrun.c b/aseg/firstrun.c index 2ca07e0..75bcccc 100644 --- a/aseg/firstrun.c +++ b/aseg/firstrun.c @@ -12,18 +12,32 @@ extern void timer_handler(smi_event_t ev); extern void kbc_handler(smi_event_t ev); extern void gbl_rls_handler(smi_event_t ev); +static int found = 0, _bus, _dev, _fn; + +void do_bother() +{ + int bar; + + if (!found) + return; + + pci_write16(_bus, _dev, _fn, 0x04, 0x00); + for (bar = 0; bar < 6; bar++) + pci_write32(_bus, _dev, _fn, 0x10 + bar*4, 0x1FFFFFFF); +} + int bother_3c905(pci_dev_t *dev) { if (dev->vid == 0x10B7 || dev->did == 0x9200) { - int bar; - outputf("Found a 3c905 to bother"); - pci_write16(dev->bus, dev->dev, dev->fn, 0x04, 0x00); - for (bar = 0; bar < 6; bar++) - if (dev->bars[bar].type != PCI_BAR_NONE) - pci_write32(dev->bus, dev->dev, dev->fn, 0x10 + bar*4, 0); + _bus = dev->bus; + _dev = dev->dev; + _fn = dev->fn; + found = 1; + + do_bother(); return 1; } -- 2.43.0