[ 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 <iwas...@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                                                 rgri...@freebsd.org
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to