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