Date: Tue, 1 Sep 2020 09:04:32 +0000 (UTC) From: Kurt Jaeger <pi@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r547249 - in head/emulators/rtc: . files Message-ID: <202009010904.08194W4s065158@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: pi Date: Tue Sep 1 09:04:32 2020 New Revision: 547249 URL: https://svnweb.freebsd.org/changeset/ports/547249 Log: emulators/rtc: update 2004.02.24.1 -> 2020.07.07.1 - submitter becomes maintainer - Install kmod into /boot/modules instead of /usr/local - Cleared out bits dating back to pre-devfs - Removed #ifdef bits related to FreeBSD <= 4.X and FreeBSD <= 8.X - Olegs fixes for FreeBSD 11.X and FreeBSD 12.X+ - Removed "USES= linux uidfix" - whilst this provides functionality that is "often" used by linux programs, that's not necessarily the case, and this module doesn't require any linux subsystem or kernel MOD to operate. - Removed oldstyle rtc.sh - include pkg-message showing how to load from the rc.conf "kld_list" mechanism. - Fixed typo in "test.c" -> /dec -> /dev - Fixed path to "rtc.h" in "test.c" PR: 233057 Submitted by: Jamie Landeg-Jones <jamie@catflap.org> Added: head/emulators/rtc/pkg-message (contents, props changed) Deleted: head/emulators/rtc/files/rtc.sh Modified: head/emulators/rtc/Makefile head/emulators/rtc/files/Makefile head/emulators/rtc/files/rtc.c head/emulators/rtc/files/rtc_linux.c head/emulators/rtc/files/test.c head/emulators/rtc/pkg-plist Modified: head/emulators/rtc/Makefile ============================================================================== --- head/emulators/rtc/Makefile Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/Makefile Tue Sep 1 09:04:32 2020 (r547249) @@ -2,43 +2,29 @@ # $FreeBSD$ PORTNAME= rtc -PORTVERSION= 2004.02.24.1 -PORTREVISION= 8 +PORTVERSION= 2020.07.07.1 CATEGORIES= emulators linux MASTER_SITES= # none DISTFILES= # none -MAINTAINER= emulation@FreeBSD.org +MAINTAINER= jamie@catflap.org COMMENT= Kernel module which provides /dev/rtc device support -BROKEN_FreeBSD_12= fails to compile: rtc.c:166:2: implicit declaration of function 'MALLOC' is invalid in C99 -BROKEN_FreeBSD_13= fails to compile: rtc.c:166:2: implicit declaration of function 'MALLOC' is invalid in C99 +LICENSE= BSD2CLAUSE +USES= kmod + WRKSRC= ${WRKDIR}/files -KMODDIR= ${PREFIX}/modules +MAKE_ARGS= KMODDIR="${KMODDIR}" -CDEV_MAJOR= 202 -DEVDIR= ${LINUXBASE}/dev - -STARTUP= rtc.sh -MAKE_ARGS= KMODDIR="${KMODDIR}" CDEV_MAJOR="${CDEV_MAJOR}" -PLIST_SUB= DEVDIR="${DEVDIR}" CDEV_MAJOR="${CDEV_MAJOR}" \ - RTC_H_DIR="${RTC_H_DIR}" - -USES= kmod linux uidfix - do-extract: @${MKDIR} ${WRKSRC} - @${SED} -e 's,@@PREFIX@@,${PREFIX},' \ - ${FILESDIR}/${STARTUP} > ${WRKDIR}/${STARTUP} @cd ${FILESDIR} && ${CP} Makefile *.[ch] ${WRKSRC}/ post-install: ${INSTALL_DATA} ${WRKSRC}/rtc.h ${STAGEDIR}${PREFIX}/include ${MKDIR} ${STAGEDIR}${EXAMPLESDIR} ${INSTALL_DATA} ${WRKSRC}/test.c ${STAGEDIR}${EXAMPLESDIR} - @${ECHO} "Installing ${PREFIX}/etc/rc.d/${STARTUP} startup file."; - ${INSTALL_SCRIPT} ${WRKDIR}/${STARTUP} ${STAGEDIR}${PREFIX}/etc/rc.d .include <bsd.port.mk> Modified: head/emulators/rtc/files/Makefile ============================================================================== --- head/emulators/rtc/files/Makefile Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/files/Makefile Tue Sep 1 09:04:32 2020 (r547249) @@ -26,23 +26,13 @@ # SYS?= /sys -NOMAN= YES KMOD= rtc -MODULE_DEPEND= linux -CDEV_MAJOR?= 202 -DEVNAME= ${KMOD} SRCS= rtc.c rtc_linux.c vnode_if.h INCLUDE= -I${.CURDIR} -I${SYS} -CFLAGS+= ${INCLUDE} -DCDEV_MAJOR_=${CDEV_MAJOR} +CFLAGS+= ${INCLUDE} all: vnode_if.h - -#afterinstall: device - -device: - rm -f /dev/${DEVNAME} - mknod /dev/${DEVNAME} c ${CDEV_MAJOR} 0 .include <bsd.kmod.mk> Modified: head/emulators/rtc/files/rtc.c ============================================================================== --- head/emulators/rtc/files/rtc.c Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/files/rtc.c Tue Sep 1 09:04:32 2020 (r547249) @@ -50,11 +50,6 @@ MODULE_DEPEND(rtc, linux, 1, 1, 1); #endif -#define CDEV_MAJOR 202 -#if defined(CDEV_MAJOR_) && CDEV_MAJOR != CDEV_MAJOR_ -#error "CDEV_MAJOR != CDEV_MAJOR_" -#endif - #define DEVICE_NAME "rtc" enum rtc_log_level {Lenter=0, Lexit=1, Linfo, Lwarning, Lfail}; @@ -68,11 +63,7 @@ enum rtc_log_level {Lenter=0, Lexit=1, Linfo, Lwarning #endif /* DEBUG */ struct rtc_softc { -#if __FreeBSD_version >= 502117 struct cdev *dev; /* Back reference to device */ -#else - dev_t dev; /* Back reference to device */ -#endif struct { int freq; struct { @@ -97,40 +88,14 @@ static void rtc_callback(void *xtp); static int rtc_modeevent(module_t mod, int cmd, void *arg); static struct cdevsw rtc_cdevsw = { -#if __FreeBSD_version >= 500104 -#if __FreeBSD_version >= 502103 .d_version = D_VERSION, .d_flags = D_NEEDGIANT, -#else - .d_maj = CDEV_MAJOR, -#endif .d_open = rtc_open, .d_close = rtc_close, .d_ioctl = rtc_ioctl, .d_poll = rtc_poll, .d_read = rtc_read, .d_name = DEVICE_NAME, -#else - /* open */ rtc_open, - /* close */ rtc_close, - /* read */ rtc_read, - /* write */ nowrite, - /* ioctl */ rtc_ioctl, - /* poll */ rtc_poll, - /* mmap */ nommap, - /* strategy */ nostrategy, - /* name */ DEVICE_NAME, - /* maj */ CDEV_MAJOR, - /* dump */ nodump, - /* psize */ nopsize, - /* flags */ 0, -#if __FreeBSD_version <= 500018 - /* bmaj */ -1, -#endif -#if __FreeBSD_version >= 500018 || __FreeBSD_version >= 430000 - /* kqfilter */ nokqfilter, -#endif -#endif }; /* @@ -139,31 +104,22 @@ static struct cdevsw rtc_cdevsw = { */ DEV_MODULE(rtc, rtc_modeevent, 0); - /* -=-=-=-=-=-=-=-=-= attach/detach device stuff -=-=-=-=-=-=-=-=-= */ static struct rtc_softc * -#if __FreeBSD_version >= 502017 rtc_attach(struct cdev *dev) -#else -rtc_attach(dev_t dev) -#endif { struct rtc_softc *sc; int unit; -#if __FreeBSD_version >= 500014 unit = dev2unit(dev); -#else - unit = lminor(dev); -#endif DLog(Lenter, "%d %p", unit, dev); if (dev->si_drv1) { DLog(Lexit, "old %p, %p", dev, dev->si_drv1); return dev->si_drv1; } - MALLOC(sc, struct rtc_softc*, sizeof(*sc), M_DEVBUF, M_WAITOK); + sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK); if (sc==NULL) return NULL; @@ -172,22 +128,14 @@ rtc_attach(dev_t dev) sc->dev = dev; sc->var.freq = 1; -#if __FreeBSD_version >= 500000 callout_init(&sc->var.rtc_handle, 1); -#else - callout_init(&sc->var.rtc_handle); -#endif DLog(Lexit, "new %p,%p", dev, sc); return sc; } static int -#if __FreeBSD_version >= 502017 rtc_detach(struct cdev *dev, struct rtc_softc *sc) -#else -rtc_detach(dev_t dev, struct rtc_softc *sc) -#endif { int error=0; @@ -196,7 +144,7 @@ rtc_detach(dev_t dev, struct rtc_softc *sc) } callout_stop(&sc->var.rtc_handle); - FREE(sc, M_DEVBUF); + free(sc, M_DEVBUF); dev->si_drv1 = NULL; return error; } @@ -204,13 +152,7 @@ rtc_detach(dev_t dev, struct rtc_softc *sc) /* -=-=-=-=-=-=-=-=-= character device stuff -=-=-=-=-=-=-=-=-= */ static int -#if __FreeBSD_version >= 502017 rtc_open(struct cdev *dev, int oflag, int otyp, struct thread *p) -#elif __FreeBSD_version >= 500023 -rtc_open(dev_t dev, int oflag, int otyp, struct thread *p) -#else -rtc_open(dev_t dev, int oflag, int otyp, struct proc *p) -#endif { struct rtc_softc *sc; @@ -228,13 +170,7 @@ rtc_open(dev_t dev, int oflag, int otyp, struct proc * } int -#if __FreeBSD_version >= 502017 rtc_close(struct cdev *dev, int fflag, int otyp, struct thread *p) -#elif __FreeBSD_version >= 500023 -rtc_close(dev_t dev, int fflag, int otyp, struct thread *p) -#else -rtc_close(dev_t dev, int fflag, int otyp, struct proc *p) -#endif { struct rtc_softc *sc = (struct rtc_softc *) dev->si_drv1; @@ -244,13 +180,7 @@ rtc_close(dev_t dev, int fflag, int otyp, struct proc } int -#if __FreeBSD_version >= 502017 rtc_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int mode, struct thread *p) -#elif __FreeBSD_version >= 500023 -rtc_ioctl(dev_t dev, u_long cmd, caddr_t arg, int mode, struct thread *p) -#else -rtc_ioctl(dev_t dev, u_long cmd, caddr_t arg, int mode, struct proc *p) -#endif { struct rtc_softc *sc = (struct rtc_softc *) dev->si_drv1; int error=0, freq, sleep; @@ -292,13 +222,7 @@ rtc_ioctl(dev_t dev, u_long cmd, caddr_t arg, int mode } int -#if __FreeBSD_version >= 502017 rtc_poll(struct cdev *dev, int events, struct thread *p) -#elif __FreeBSD_version >= 500023 -rtc_poll(dev_t dev, int events, struct thread *p) -#else -rtc_poll(dev_t dev, int events, struct proc *p) -#endif { struct rtc_softc *sc = (struct rtc_softc *) dev->si_drv1; int revents = 0; @@ -318,11 +242,7 @@ rtc_poll(dev_t dev, int events, struct proc *p) } int -#if __FreeBSD_version >= 502017 rtc_read(struct cdev *dev, struct uio *uio, int flags __unused) -#else -rtc_read(dev_t dev, struct uio *uio, int flags __unused) -#endif { struct rtc_softc *sc = (struct rtc_softc *) dev->si_drv1; int error = 0; @@ -351,23 +271,13 @@ rtc_read(dev_t dev, struct uio *uio, int flags __unuse } /* -=-=-=-=-=-=-=-=-= module load/unload stuff -=-=-=-=-=-=-=-=-= */ -#if __FreeBSD_version >= 502017 static struct cdev *rtc_dev = NULL; -#else -static dev_t rtc_dev = NULL; -#endif static int init_module(void) { int error = 0; -#if __FreeBSD_version < 500104 - error = cdevsw_add(&rtc_cdevsw); - if (error) - return error; -#endif - rtc_dev = make_dev(&rtc_cdevsw, 0, UID_ROOT, GID_WHEEL, 0644, DEVICE_NAME); if (rtc_dev==NULL) error = ENOMEM; @@ -375,17 +285,12 @@ init_module(void) return error; } - - static int cleanup_module(void) { int error = 0; destroy_dev(rtc_dev); -#if __FreeBSD_version < 500104 - error = cdevsw_remove(&rtc_cdevsw); -#endif DLog(Linfo, "return %d", error); return error; } @@ -433,23 +338,37 @@ rtc_callback(void *xtp) restart: increment.tv_sec = 0; increment.tv_nsec = 1000000000 / sc->var.freq; +#if P_OSREL_MAJOR(__FreeBSD_version) >= 12 + timespecadd(&sc->var.lasttime, &increment, &sc->var.lasttime); + timespecadd(&sc->var.lasttime, &increment, &nexttime); +#else timespecadd(&sc->var.lasttime, &increment); nexttime.tv_sec = sc->var.lasttime.tv_sec; nexttime.tv_nsec = sc->var.lasttime.tv_nsec; timespecadd(&nexttime, &increment); +#endif if (timespeccmp(&nexttime, &curtime, <)) { /* Catch up if we lag curtime */ - sc->var.lasttime.tv_sec = curtime.tv_sec; - sc->var.lasttime.tv_nsec = curtime.tv_nsec; - timespecsub(&sc->var.lasttime, &increment); - timespecsub(&nexttime, &curtime); +#if P_OSREL_MAJOR(__FreeBSD_version) >= 12 + timespecsub(&curtime, &increment, &sc->var.lasttime); + timespecsub(&nexttime, &curtime, &nexttime); +#else + sc->var.lasttime.tv_sec = curtime.tv_sec; + sc->var.lasttime.tv_nsec = curtime.tv_nsec; + timespecsub(&sc->var.lasttime, &increment); + timespecsub(&nexttime, &curtime); +#endif #if 0 printf("lagging curtime by %d.%ld\n", nexttime.tv_sec, nexttime.tv_nsec); #endif goto restart; } else { +#if P_OSREL_MAJOR(__FreeBSD_version) >= 12 + timespecsub(&nexttime, &curtime, &nexttime); +#else timespecsub(&nexttime, &curtime); - sleep = nexttime.tv_nsec / (1000000000 / hz); - } - callout_reset(&sc->var.rtc_handle, sleep, &rtc_callback, xtp); +#endif + sleep = nexttime.tv_nsec / (1000000000 / hz); + } + callout_reset(&sc->var.rtc_handle, sleep, &rtc_callback, xtp); } Modified: head/emulators/rtc/files/rtc_linux.c ============================================================================== --- head/emulators/rtc/files/rtc_linux.c Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/files/rtc_linux.c Tue Sep 1 09:04:32 2020 (r547249) @@ -35,11 +35,7 @@ #include <i386/linux/linux.h> #include <i386/linux/linux_proto.h> -#if __FreeBSD_version >= 500012 || __FreeBSD_version >= 430000 #include <compat/linux/linux_ioctl.h> -#else -#include <i386/linux/linux_ioctl.h> -#endif #include "rtc.h" @@ -62,27 +58,15 @@ SYSUNINIT(n##unregister, SI_SUB_KLD, SI_ORDER_MIDDLE, LINUX_IOCTL_SET(rtc, 0x7000, 0x70ff); static int -#if __FreeBSD_version >= 500023 linux_ioctl_rtc(struct thread *p, struct linux_ioctl_args *args) -#else -linux_ioctl_rtc(struct proc *p, struct linux_ioctl_args *args) -#endif { switch (args->cmd & 0xffff) { case LINUX_RTC_PIE_ON: args->cmd=RTCIO_PIE_ON; -#if __FreeBSD_version >= 900044 return sys_ioctl(p, (struct ioctl_args*)args); -#else - return ioctl(p, (struct ioctl_args*)args); -#endif case LINUX_RTC_IRQP_SET: args->cmd=RTCIO_IRQP_SET; -#if __FreeBSD_version >= 900044 return sys_ioctl(p, (struct ioctl_args*)args); -#else - return ioctl(p, (struct ioctl_args*)args); -#endif } return (ENOIOCTL); } Modified: head/emulators/rtc/files/test.c ============================================================================== --- head/emulators/rtc/files/test.c Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/files/test.c Tue Sep 1 09:04:32 2020 (r547249) @@ -6,7 +6,7 @@ #include <string.h> #include <sys/ioccom.h> -#include "rtc.h" +#include <rtc.h> int main(void) @@ -21,7 +21,7 @@ int main(void) rtc = open("/dev/rtc", O_RDONLY); if (rtc<0) { - perror("/dec/rtc"); + perror("/dev/rtc"); return 1; } Added: head/emulators/rtc/pkg-message ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/emulators/rtc/pkg-message Tue Sep 1 09:04:32 2020 (r547249) @@ -0,0 +1,19 @@ +[ +{ type: install + message: <<EOM +This module can be enabled with: + + # kldload rtc + +and disabled with: + + # kldunload rtc + +For it to be loaded automatically at boottime, add "rtc" to your +kld_list entry in /etc/rc.conf . One way to do this is with the +one-off command: + + # sysrc kld_list+="rtc" +EOM +} +] Modified: head/emulators/rtc/pkg-plist ============================================================================== --- head/emulators/rtc/pkg-plist Tue Sep 1 08:51:51 2020 (r547248) +++ head/emulators/rtc/pkg-plist Tue Sep 1 09:04:32 2020 (r547249) @@ -1,6 +1,3 @@ -etc/rc.d/rtc.sh include/rtc.h -modules/rtc.ko +/%%KMODDIR%%/rtc.ko %%EXAMPLESDIR%%/test.c -@postexec rm -f %%DEVDIR%%/rtc -@postunexec rm -f /dev/rtc
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202009010904.08194W4s065158>