On Wed, 5 Mar 2003 19:37:35 +0100 (MET) Marcin CIE LAK <[EMAIL PROTECTED]> wrote: > See the patches enclosed to emulators/rtc > and emulators/vmware2 ports. > Tested only for -current with: > #define __FreeBSD_version 500104
Hum.. This is not work in my environment. Because MOD_LOAD initializer didn't kick rtc_attach. I fixed this problem and merge(but ADHOC:-). Please, anyone, check following patch. BTW, vmmon_*.ko is not good. hum....
diff -urN emulators/rtc/Makefile local/rtc/Makefile --- emulators/rtc/Makefile Fri Mar 7 15:01:17 2003 +++ local/rtc/Makefile Tue Mar 11 16:48:46 2003 @@ -6,7 +6,7 @@ # PORTNAME= rtc -PORTVERSION= 2001.09.16.1 +PORTVERSION= 2002.03.05.1 CATEGORIES= emulators linux MASTER_SITES= # none DISTFILES= # none diff -urN emulators/rtc/files/rtc.c local/rtc/files/rtc.c --- emulators/rtc/files/rtc.c Sun Sep 16 16:05:18 2001 +++ local/rtc/files/rtc.c Tue Mar 11 19:40:39 2003 @@ -85,6 +85,14 @@ static int rtc_modeevent(module_t mod, int cmd, void *arg); static struct cdevsw rtc_cdevsw = { +#if __FreeBSD_version >= 500104 + .d_open = rtc_open, + .d_close = rtc_close, + .d_ioctl = rtc_ioctl, + .d_poll = rtc_poll, + .d_name = DEVICE_NAME, + .d_maj = CDEV_MAJOR, +#else /* open */ rtc_open, /* close */ rtc_close, /* read */ noread, @@ -104,6 +112,7 @@ #if __FreeBSD_version >= 500018 || __FreeBSD_version >= 430000 /* kqfilter */ nokqfilter, #endif +#endif }; /* @@ -118,7 +127,6 @@ static struct rtc_softc * rtc_attach(dev_t dev) { - struct rtc_softc *sc; int unit; #if __FreeBSD_version >= 500014 @@ -132,24 +140,8 @@ return dev->si_drv1; } - if (rtc_sc!=NULL) - return NULL; - - dev = make_dev(&rtc_cdevsw, minor(dev), UID_ROOT, GID_WHEEL, 0600, DEVICE_NAME); - if (dev==NULL) - return (NULL); - - MALLOC(sc, struct rtc_softc*, sizeof(*sc), M_DEVBUF, M_WAITOK); - if (sc==NULL) - return NULL; - - bzero(sc, sizeof(*sc)); - rtc_sc = sc; - dev->si_drv1 = sc; /* Link together */ - sc->dev = dev; - - DLog(Lexit, "new %p,%p", dev, sc); - return sc; + DLog(Lexit, "new %p,%p", dev, rtc_sc); + return rtc_sc; } static int @@ -264,11 +256,26 @@ static int init_module(void) { -int error; + int error = 0; + dev_t dev; +#if __FreeBSD_version < 500104 error = cdevsw_add(&rtc_cdevsw); if (error) return error; +#endif + + dev = make_dev(&rtc_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, DEVICE_NAME); + if (dev==NULL) + return ENOMEM; + + MALLOC(rtc_sc, struct rtc_softc*, sizeof(*rtc_sc), M_DEVBUF, M_WAITOK); + if (rtc_sc==NULL) + return ENOMEM; + + bzero(rtc_sc, sizeof(*rtc_sc)); + dev->si_drv1 = rtc_sc; /* Link together */ + rtc_sc->dev = dev; return error; } @@ -286,7 +293,9 @@ DLog(Lfail, "%p busy", sc); return error; } +#if __FreeBSD_version < 500104 error = cdevsw_remove(&rtc_cdevsw); +#endif DLog(Linfo, "return %d", error); return error; } diff -urN emulators/rtc/files/rtc.sh local/rtc/files/rtc.sh --- emulators/rtc/files/rtc.sh Fri Sep 22 20:08:22 2000 +++ local/rtc/files/rtc.sh Tue Mar 11 16:49:55 2003 @@ -7,11 +7,11 @@ start) if [ -x $kmoddir/$kmod ]; then echo -n ' rtc' - kldload $kmoddir/$kmod + /sbin/kldload $kmoddir/$kmod fi ;; stop) - kldunload $kmod && echo -n ' rtc' + /sbin/kldunload $kmod && echo -n ' rtc' ;; *) echo "Usage: `basename $0` {start|stop}" >&2