Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jan 2018 09:48:05 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        "Rodney W. Grimes" <rgrimes@freebsd.org>
Cc:        Warner Losh <imp@freebsd.org>, src-committers <src-committers@freebsd.org>, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r327767 - in head/sys: conf i386/bios i386/conf i386/isa
Message-ID:  <CANCZdfrs-xgeyaQbKArXwYX-TYOrxqG1-gYuQRs5wP3--r3%2BtA@mail.gmail.com>
In-Reply-To: <201801101631.w0AGVAEV032087@pdx.rh.CN85.dnsmgr.net>
References:  <201801101459.w0AExJWM055025@repo.freebsd.org> <201801101631.w0AGVAEV032087@pdx.rh.CN85.dnsmgr.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jan 10, 2018 at 9:31 AM, Rodney W. Grimes <
freebsd@pdx.rh.cn85.dnsmgr.net> wrote:

> [ 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)


Don't know. We don't normally document every kernel config file changes
that's required.

Warner


> > 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@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@freebsd.org
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrs-xgeyaQbKArXwYX-TYOrxqG1-gYuQRs5wP3--r3%2BtA>