ethernet SiS(190/191) problem driver

zloidemon g.veniamin at googlemail.com
Sat Jan 23 18:02:08 UTC 2010


Hi all!

zlobook# uname -a
FreeBSD zlobook.local 8.0-STABLE FreeBSD 8.0-STABLE #22: Sun Jan  3 12:17:19 
KRAT 2010     root at zlobook.local:/usr/obj/usr/src/sys/zlobook  i386

none0 at pci0:0:4:0:       class=0x020000 card=0x08021558 chip=0x01911039 
rev=0x02 hdr=0x00
    vendor     = 'Silicon Integrated Systems (SiS)'
    device     = 'SIS190 (SIS190)'
    class      = network
    subclass   = ethernet

this is chip=0x01911039 real SiS191 ethernet card

i downloaded this is driver for sis 190 from http://pohoyda.gmxhome.de/sis190-
freebsd-7.tar.gz

a problem when compiling....

zlobook# make
Warning: Object directory not changed from original /root/123/sis190-FreeBSD-7
@ -> /usr/src/sys
machine -> /usr/src/sys/i386/include
awk -f @/tools/makeobjops.awk @/kern/device_if.m -h
awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h
awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h
awk -f @/tools/makeobjops.awk @/dev/mii/miibus_if.m -h
cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc   -
I. -I@ -I@/contrib/altq -finline-limit=8000 --param inline-unit-growth=100 --
param large-function-growth=1000 -fno-common  -mno-align-long-strings -
mpreferred-stack-boundary=2  -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 
-ffreestanding -fstack-protector -std=iso9899:1999 -fstack-protector -Wall -
Wredundant-decls -Wnested-externs -Wstrict-prototypes  -Wmissing-prototypes -
Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-
extensions -c if_sis19x.c
cc1: warnings being treated as errors
if_sis19x.c:148: warning: pointer type mismatch in conditional expression
*** Error code 1

Stop in /root/sis190-FreeBSD-7.

I made a patch for the driver. Now support SiS 191 and SiS 190. Tested only 
SiS 191

--- if_sis19x.c.orig	2008-04-23 11:53:14.000000000 +0800
+++ if_sis19x.c	2010-01-24 00:06:43.000000000 +0700
@@ -92,13 +92,14 @@ MODULE_DEPEND(sis, miibus, 1, 1, 1);
  */
 static struct sis_type sis19x_devs[] = {
 	{ SIS_VENDORID, SIS_DEVICEID_190, "SiS 190 10/100BaseTX" },
+	{ SIS_VENDORID, SIS_DEVICEID_191, "SiS 190 10/100BaseTX" },
 	{ 0, 0, NULL }
 };
 
 static int sis_probe		(device_t);
 static int sis_attach		(device_t);
 static int sis_detach		(device_t);
-static void sis_shutdown	(device_t);
+static int sis_shutdown		(device_t);
 
 static int sis_miibus_readreg	(device_t, int, int);
 static int sis_miibus_writereg	(device_t, int, int, int);
@@ -621,12 +622,14 @@ sis_attach(dev)
 	    MTX_DEF | MTX_RECURSE);
         callout_init_mtx(&sc->sis_stat_ch, &sc->sis_mtx, 0);
 
-	if (pci_get_device(dev) != SIS_DEVICEID_190) {
-		error = ENXIO;
+	if (pci_get_device(dev) == SIS_DEVICEID_190)
+		sc->sis_type = SIS_TYPE_190;
+	else if (pci_get_device(dev) == SIS_DEVICEID_191)
+		sc->sis_type = SIS_TYPE_190;
+	else {
+		error =ENXIO;
 		goto fail;
 	}
-
-	sc->sis_type = SIS_TYPE_190;
 	sc->sis_rev = pci_read_config(dev, PCIR_REVID, 1);
 
 	/*
@@ -885,8 +888,9 @@ sis_detach(dev)
 /*
  * Stop all chip I/O so that the kernel's probe routines don't
  * get confused by errant DMAs when rebooting.
- */
-static void
+*/
+
+static int
 sis_shutdown(dev)
 	device_t		dev;
 {
@@ -898,6 +902,7 @@ sis_shutdown(dev)
 	sis_reset(sc);
 	sis_stop(sc);
 	SIS_UNLOCK(sc);
+	return (0);
 }
 
 

this is log from messages when i using this is driver.

pci0: driver added
found-> vendor=0x1039, dev=0x0191, revid=0x02
        domain=0, bus=0, slot=4, func=0
        class=02-00-00, hdrtype=0x00, mfdev=0
        cmdreg=0x0007, statreg=0x0210, cachelnsz=0 (dwords)
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
        intpin=a, irq=19
        powerspec 2  supports D0 D1 D2 D3  current D0
pci0:0:4:0: reprobing on driver added
sis19x0: <SiS 190 10/100BaseTX> port 0x1000-0x107f mem 0xd3307000-0xd330707f 
irq 19 at device 4.0 on pci0
miibus0: <MII bus> on sis19x0
rlphy0: <RTL8201L 10/100 media interface> PHY 1 on miibus0
rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis19x0: bpf attached
sis19x0: Ethernet address: 00:90:f5:95:05:e9
ioapic0: routing intpin 19 (PCI IRQ 19) to lapic 1 vector 53
sis19x0: [MPSAFE]
sis19x0: [ITHREAD]
pci1: driver added
pci3: driver added
found-> vendor=0x197b, dev=0x2382, revid=0x20
        domain=0, bus=3, slot=0, func=0
        class=08-80-00, hdrtype=0x00, mfdev=1
        cmdreg=0x0007, statreg=0x0010, cachelnsz=4 (dwords)
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
        intpin=a, irq=16
        powerspec 3  supports D0 D3  current D0
        MSI supports 1 message
pci0:3:0:0: reprobing on driver added
found-> vendor=0x197b, dev=0x2383, revid=0x20
        domain=0, bus=3, slot=0, func=3
        class=08-80-00, hdrtype=0x00, mfdev=1
        cmdreg=0x0007, statreg=0x0010, cachelnsz=4 (dwords)
        lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
        intpin=a, irq=16
        powerspec 3  supports D0 D3  current D0
        MSI supports 1 message
pci0:3:0:3: reprobing on driver added
pci9: driver added

The device successfully identified

sis19x0 at pci0:0:4:0:     class=0x020000 card=0x08021558 chip=0x01911039 
rev=0x02 hdr=0x00
    vendor     = 'Silicon Integrated Systems (SiS)'
    device     = 'SIS190 (SIS190)'
    class      = network
    subclass   = ethernet

i see a problem every 10-30 seconds

sis19x0: error_bits=0x40020001
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: error_bits=0x40020001
sis19x0: watchdog timeout

64 bytes from 192.168.3.100: icmp_seq=52 ttl=128 time=0.256 ms
64 bytes from 192.168.3.100: icmp_seq=53 ttl=128 time=0.272 ms
64 bytes from 192.168.3.100: icmp_seq=54 ttl=128 time=0.294 ms
64 bytes from 192.168.3.100: icmp_seq=55 ttl=128 time=4148.943 ms
64 bytes from 192.168.3.100: icmp_seq=56 ttl=128 time=3150.245 ms
64 bytes from 192.168.3.100: icmp_seq=57 ttl=128 time=2148.678 ms
64 bytes from 192.168.3.100: icmp_seq=58 ttl=128 time=1148.346 ms
64 bytes from 192.168.3.100: icmp_seq=59 ttl=128 time=147.464 ms
64 bytes from 192.168.3.100: icmp_seq=60 ttl=128 time=0.111 ms

somehow fix this possible?


More information about the freebsd-hackers mailing list