SiS 190/192 в FreeBSD

Скачиваем драйвер:

%wget -c http://pohoyda.gmxhome.de/sis190-freebsd-7.tar.gz
%tar xzf sis190-freebsd-7.tar.gz

Под FreeBSD 7 не пробовал, но под FreeBSD 8 пришлось сделать патчь:

--- 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);
}

Сохраним его в file.patch и поропатчим исходники:

%cd sis190-freebsd-7;patch -p0 < ../file.patch

PS: Этот патчь УГ. Я не программист, и за этого получилось криво. Причем постоянно задержки. В messages летит куча хлама такого вида:

sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: error_bits=0x40020001
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
sis19x0: watchdog timeout
comments powered by Disqus