From: Joshua Wise Date: Tue, 30 Sep 2008 22:00:35 +0000 (-0400) Subject: Move 3c905 out to its own file. X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/3b3161a197d32df3f889809e88bfe3b407b80148?ds=inline;hp=--cc Move 3c905 out to its own file. --- 3b3161a197d32df3f889809e88bfe3b407b80148 diff --git a/aseg/3c905.c b/aseg/3c905.c new file mode 100644 index 0000000..82ad695 --- /dev/null +++ b/aseg/3c905.c @@ -0,0 +1,36 @@ +#include +#include +#include "3c905.h" + +static int found = 0, _bus, _dev, _fn; + +static int bother_3c905(pci_dev_t *dev) +{ + if (dev->vid == 0x10B7 || dev->did == 0x9200) + { + outputf("Found a 3c905 to bother"); + + _bus = dev->bus; + _dev = dev->dev; + _fn = dev->fn; + found = 1; + + return 1; + } + return 0; +} + +void eth_poll() +{ + if (!found) + return; + + pci_write16(_bus, _dev, _fn, 0x04, 0xFF); + + pci_write16(_bus, _dev, _fn, 0x04, 0x00); +} + +void eth_init() +{ + pci_probe(bother_3c905); +} diff --git a/aseg/3c905.h b/aseg/3c905.h new file mode 100644 index 0000000..708069b --- /dev/null +++ b/aseg/3c905.h @@ -0,0 +1,7 @@ +#ifndef _3C905_H +#define _3C905_H + +extern void eth_init(); +extern void eth_poll(); + +#endif diff --git a/aseg/Makefile b/aseg/Makefile index c5f33f4..8283648 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 ../pci/pci.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 3c905.o all: aseg.elf diff --git a/aseg/counter.c b/aseg/counter.c index 5c88850..eaeec52 100644 --- a/aseg/counter.c +++ b/aseg/counter.c @@ -3,6 +3,7 @@ #include #include #include +#include "3c905.h" #include "vga-overlay.h" #include "packet.h" @@ -100,8 +101,7 @@ void smi_entry(void) sprintf(statstr, "15-412! %08x %08x", smi_status(), counter); strblit(statstr, 0, 0); - extern void do_bother(); - do_bother(); + eth_poll(); if (inl(0x840) & 0x1000) { diff --git a/aseg/firstrun.c b/aseg/firstrun.c index 75bcccc..d45bc81 100644 --- a/aseg/firstrun.c +++ b/aseg/firstrun.c @@ -5,6 +5,7 @@ #include #include "vga-overlay.h" #include +#include "3c905.h" extern int _bss, _bssend; @@ -12,38 +13,6 @@ 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) - { - outputf("Found a 3c905 to bother"); - - _bus = dev->bus; - _dev = dev->dev; - _fn = dev->fn; - found = 1; - - do_bother(); - - return 1; - } - return 0; -} - void __firstrun_start() { unsigned char *bp; smram_state_t smram; @@ -65,7 +34,7 @@ void __firstrun_start() { /* Turn on the SMIs we want */ smi_disable(); - pci_probe(bother_3c905); + eth_init(); smi_register_handler(SMI_EVENT_FAST_TIMER, timer_handler); smi_enable_event(SMI_EVENT_FAST_TIMER);