svn commit: r327767 - in head/sys: conf i386/bios i386/conf i386/isa
Rodney W. Grimes
freebsd at pdx.rh.CN85.dnsmgr.net
Wed Jan 10 16:31:20 UTC 2018
[ Charset UTF-8 unsupported, converting... ]
> Author: imp
> Date: Wed Jan 10 14:59:19 2018
> New Revision: 327767
> URL: https://svnweb.freebsd.org/changeset/base/327767
>
> Log:
> Retire pmtimer driver. Move time fixing into apm driver. Move
> Iwasaki-san's copyright over. Remove FIXME code that couldn't possibly
> work. Call tc_settime() with our estimate of the delta we've been
> alseep (the one we print) to adjust the time. Not sure what to do
> about callouts, so keep the small #ifdef in place there.
>
> Differential Revision: https://reviews.freebsd.org/D13823
RELNOTES: ?
Reason I ask is this effects custom kernel config file(s)
> Deleted:
> head/sys/i386/isa/pmtimer.c
> Modified:
> head/sys/conf/files.i386
> head/sys/i386/bios/apm.c
> head/sys/i386/conf/GENERIC
> head/sys/i386/conf/NOTES
>
> Modified: head/sys/conf/files.i386
> ==============================================================================
> --- head/sys/conf/files.i386 Wed Jan 10 14:58:58 2018 (r327766)
> +++ head/sys/conf/files.i386 Wed Jan 10 14:59:19 2018 (r327767)
> @@ -520,7 +520,6 @@ i386/ibcs2/ibcs2_util.c optional ibcs2
> i386/ibcs2/ibcs2_xenix.c optional ibcs2
> i386/ibcs2/ibcs2_xenix_sysent.c optional ibcs2
> i386/ibcs2/imgact_coff.c optional ibcs2
> -i386/isa/pmtimer.c optional pmtimer
> i386/isa/prof_machdep.c optional profiling-routine
> i386/linux/imgact_linux.c optional compat_linux
> i386/linux/linux_dummy.c optional compat_linux
>
> Modified: head/sys/i386/bios/apm.c
> ==============================================================================
> --- head/sys/i386/bios/apm.c Wed Jan 10 14:58:58 2018 (r327766)
> +++ head/sys/i386/bios/apm.c Wed Jan 10 14:59:19 2018 (r327767)
> @@ -16,6 +16,32 @@
> * Sep, 1994 Implemented on FreeBSD 1.1.5.1R (Toshiba AVS001WD)
> */
>
> +/*-
> + * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki at FreeBSD.org>
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> @@ -38,6 +64,7 @@ __FBSDID("$FreeBSD$");
> #include <sys/signalvar.h>
> #include <sys/sysctl.h>
> #include <sys/syslog.h>
> +#include <sys/timetc.h>
> #include <sys/time.h>
> #include <sys/uio.h>
>
> @@ -205,7 +232,7 @@ static int
> apm_driver_version(int version)
> {
> struct apm_softc *sc = &apm_softc;
> -
> +
> sc->bios.r.eax = (APM_BIOS << 8) | APM_DRVVERSION;
> sc->bios.r.ebx = 0x0;
> sc->bios.r.ecx = version;
> @@ -220,28 +247,28 @@ apm_driver_version(int version)
>
> return (1);
> }
> -
> +
> /* engage/disengage power management (APM 1.1 or later) */
> static int
> apm_engage_disengage_pm(int engage)
> {
> struct apm_softc *sc = &apm_softc;
> -
> +
> sc->bios.r.eax = (APM_BIOS << 8) | APM_ENGAGEDISENGAGEPM;
> sc->bios.r.ebx = PMDV_ALLDEV;
> sc->bios.r.ecx = engage;
> sc->bios.r.edx = 0;
> return (apm_bioscall());
> }
> -
> +
> /* get PM event */
> static u_int
> apm_getevent(void)
> {
> struct apm_softc *sc = &apm_softc;
> -
> +
> sc->bios.r.eax = (APM_BIOS << 8) | APM_GETPMEVENT;
> -
> +
> sc->bios.r.ebx = 0;
> sc->bios.r.ecx = 0;
> sc->bios.r.edx = 0;
> @@ -249,18 +276,18 @@ apm_getevent(void)
> return (PMEV_NOEVENT);
> return (sc->bios.r.ebx & 0xffff);
> }
> -
> +
> /* suspend entire system */
> static int
> apm_suspend_system(int state)
> {
> struct apm_softc *sc = &apm_softc;
> -
> +
> sc->bios.r.eax = (APM_BIOS << 8) | APM_SETPWSTATE;
> sc->bios.r.ebx = PMDV_ALLDEV;
> sc->bios.r.ecx = state;
> sc->bios.r.edx = 0;
> -
> +
> if (apm_bioscall()) {
> printf("Entire system suspend failure: errcode = %d\n",
> 0xff & (sc->bios.r.eax >> 8));
> @@ -280,7 +307,7 @@ int
> apm_display(int newstate)
> {
> struct apm_softc *sc = &apm_softc;
> -
> +
> sc->bios.r.eax = (APM_BIOS << 8) | APM_SETPWSTATE;
> sc->bios.r.ebx = PMDV_DISP0;
> sc->bios.r.ecx = newstate ? PMST_APMENABLED:PMST_SUSPEND;
> @@ -331,12 +358,10 @@ apm_battery_low(void)
> static struct apmhook *
> apm_add_hook(struct apmhook **list, struct apmhook *ah)
> {
> - int s;
> struct apmhook *p, *prev;
>
> APM_DPRINT("Add hook \"%s\"\n", ah->ah_name);
>
> - s = splhigh();
> if (ah == NULL)
> panic("illegal apm_hook!");
> prev = NULL;
> @@ -351,30 +376,25 @@ apm_add_hook(struct apmhook **list, struct apmhook *ah
> ah->ah_next = prev->ah_next;
> prev->ah_next = ah;
> }
> - splx(s);
> return ah;
> }
>
> static void
> apm_del_hook(struct apmhook **list, struct apmhook *ah)
> {
> - int s;
> struct apmhook *p, *prev;
>
> - s = splhigh();
> prev = NULL;
> for (p = *list; p != NULL; prev = p, p = p->ah_next)
> if (p == ah)
> goto deleteit;
> panic("Tried to delete unregistered apm_hook.");
> - goto nosuchnode;
> + return;
> deleteit:
> if (prev != NULL)
> prev->ah_next = p->ah_next;
> else
> *list = p->ah_next;
> -nosuchnode:
> - splx(s);
> }
>
>
> @@ -468,7 +488,7 @@ apm_do_standby(void)
> sc->standbys = sc->standby_countdown = 0;
>
> /*
> - * As far as standby, we don't need to execute
> + * As far as standby, we don't need to execute
> * all of suspend hooks.
> */
> if (apm_suspend_system(PMST_STANDBY) == 0)
> @@ -1047,6 +1067,53 @@ apm_processevent(void)
> } while (apm_event != PMEV_NOEVENT);
> }
>
> +static struct timeval suspend_time;
> +static struct timeval diff_time;
> +
> +static int
> +apm_rtc_suspend(void *arg __unused)
> +{
> +
> + microtime(&diff_time);
> + inittodr(0);
> + microtime(&suspend_time);
> + timevalsub(&diff_time, &suspend_time);
> + return (0);
> +}
> +
> +static int
> +apm_rtc_resume(void *arg __unused)
> +{
> + u_int second, minute, hour;
> + struct timeval resume_time, tmp_time;
> + struct timespec ts;
> +
> + /* modified for adjkerntz */
> + timer_restore(); /* restore the all timers */
> + inittodr(0); /* adjust time to RTC */
> + microtime(&resume_time);
> + getmicrotime(&tmp_time);
> + timevaladd(&tmp_time, &diff_time);
> + /* Calculate the delta time suspended */
> + timevalsub(&resume_time, &suspend_time);
> +
> + second = ts.tv_sec = resume_time.tv_sec;
> + ts.tv_nsec = 0;
> + tc_setclock(&ts);
> +
> +#ifdef PMTIMER_FIXUP_CALLTODO
> + /* Fixup the calltodo list with the delta time. */
> + adjust_timeout_calltodo(&resume_time);
> +#endif /* PMTIMER_FIXUP_CALLTODO */
> + hour = second / 3600;
> + second %= 3600;
> + minute = second / 60;
> + second %= 60;
> + log(LOG_NOTICE, "wakeup from sleeping state (slept %02d:%02d:%02d)\n",
> + hour, minute, second);
> + return (0);
> +}
> +
> /*
> * Attach APM:
> *
> @@ -1128,7 +1195,7 @@ apm_attach(device_t dev)
> }
>
> /* Power the system off using APM */
> - EVENTHANDLER_REGISTER(shutdown_final, apm_power_off, NULL,
> + EVENTHANDLER_REGISTER(shutdown_final, apm_power_off, NULL,
> SHUTDOWN_PRI_LAST);
>
> /* Register APM again to pass the correct argument of pm_func. */
> @@ -1142,6 +1209,15 @@ apm_attach(device_t dev)
> UID_ROOT, GID_OPERATOR, 0664, "apm");
> make_dev(&apm_cdevsw, APMDEV_CTL,
> UID_ROOT, GID_OPERATOR, 0660, "apmctl");
> +
> + sc->sc_suspend.ah_fun = apm_rtc_suspend;
> + sc->sc_suspend.ah_arg = sc;
> + apm_hook_establish(APM_HOOK_SUSPEND, &sc->sc_suspend);
> +
> + sc->sc_resume.ah_fun = apm_rtc_resume;
> + sc->sc_resume.ah_arg = sc;
> + apm_hook_establish(APM_HOOK_RESUME, &sc->sc_resume);
> +
> return 0;
> }
>
> @@ -1362,7 +1438,7 @@ apmwrite(struct cdev *dev, struct uio *uio, int ioflag
> if ((error = uiomove((caddr_t)&event_type, sizeof(u_int), uio)))
> return(error);
>
> - if (event_type < 0 || event_type >= APM_NPMEV)
> + if (event_type >= APM_NPMEV)
> return(EINVAL);
>
> if (sc->event_filter[event_type] == 0) {
>
> Modified: head/sys/i386/conf/GENERIC
> ==============================================================================
> --- head/sys/i386/conf/GENERIC Wed Jan 10 14:58:58 2018 (r327766)
> +++ head/sys/i386/conf/GENERIC Wed Jan 10 14:59:19 2018 (r327767)
> @@ -207,8 +207,6 @@ device agp # support several AGP chipsets
>
> # Power management support (see NOTES for more options)
> #device apm
> -# Add suspend/resume support for the i8254.
> -device pmtimer
>
> # PCCARD (PCMCIA) support
> # PCMCIA and cardbus bridge support
>
> Modified: head/sys/i386/conf/NOTES
> ==============================================================================
> --- head/sys/i386/conf/NOTES Wed Jan 10 14:58:58 2018 (r327766)
> +++ head/sys/i386/conf/NOTES Wed Jan 10 14:59:19 2018 (r327767)
> @@ -774,7 +774,6 @@ device hyperv # HyperV drivers
> # smapi: System Management Application Program Interface driver
> # smbios: DMI/SMBIOS entry point
> # vpd: Vital Product Data kernel interface
> -# pmtimer: Adjust system timer at wakeup time
> # pbio: Parallel (8255 PPI) basic I/O (mode 0) port (e.g. Advantech PCL-724)
> # asmc: Apple System Management Controller
> # si: Specialix International SI/XIO or SX intelligent serial card driver
> @@ -808,7 +807,6 @@ device ipmi
> device smapi
> device smbios
> device vpd
> -device pmtimer
> device pbio
> hint.pbio.0.at="isa"
> hint.pbio.0.port="0x360"
>
>
--
Rod Grimes rgrimes at freebsd.org
More information about the svn-src-all
mailing list