From ce91287c57fa75fe7f4e8613f969fa1c2234aa8f Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Thu, 25 Sep 2008 23:28:25 -0400 Subject: [PATCH 1/1] Add the 3c905 bother routine. --- aseg/Makefile | 2 +- aseg/firstrun.c | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/aseg/Makefile b/aseg/Makefile index 80ef859..c5f33f4 100644 --- a/aseg/Makefile +++ b/aseg/Makefile @@ -1,6 +1,6 @@ CC=gcc CFLAGS=-I../include -I../include/raw -nostdlib -nostdinc -fno-builtin -D__RAW__ -Wall -Werror -pedantic -ansi -std=gnu99 -OBJS=counter.o firstrun.o ../pci/pci-raw.o ../lib/minilib.o ../lib/console.o ../ich2/smram-ich2.o ../ich2/smi.o vga-overlay.o packet.o ../lib/sprintf.o ../lib/doprnt.o +OBJS=counter.o firstrun.o ../pci/pci-raw.o ../lib/minilib.o ../lib/console.o ../ich2/smram-ich2.o ../ich2/smi.o vga-overlay.o packet.o ../lib/sprintf.o ../lib/doprnt.o ../pci/pci.o all: aseg.elf diff --git a/aseg/firstrun.c b/aseg/firstrun.c index e0e2904..2ca07e0 100644 --- a/aseg/firstrun.c +++ b/aseg/firstrun.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "vga-overlay.h" #include @@ -11,6 +12,24 @@ 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); +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); + + return 1; + } + return 0; +} + void __firstrun_start() { unsigned char *bp; smram_state_t smram; @@ -21,7 +40,7 @@ void __firstrun_start() { for (bp = (void *)&_bss; (void *)bp < (void *)&_bssend; bp++) *bp = 0; - dologf("NetWatch running"); + outputf("NetWatch running"); /* Try really hard to shut up USB_LEGKEY. */ pci_write16(0, 31, 2, 0xC0, pci_read16(0, 31, 2, 0xC0)); @@ -32,6 +51,8 @@ void __firstrun_start() { /* Turn on the SMIs we want */ smi_disable(); + pci_probe(bother_3c905); + smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler); smi_enable_event(SMI_EVENT_FAST_TIMER); -- 2.43.0