Sure.

Tobias Heider <tobias.hei...@stusta.de> wrote:

> I am planning to restructure the APM/sleep APIs to make it easier to suspend
> from more places like as a suspend keyboard shortcut.
> 
> The acpiioctl handler is x86 specific code which is currently built on all
> platforms but only hooked up on i386 and amd64.  It is also in the way of
> my plans, so I'd prefer if we move it to acpi_x86.c where all the other
> x86-only acpi code lives.
> 
> ok?
> 
> Index: dev/acpi//acpi.c
> ===================================================================
> RCS file: /mount/openbsd/cvs/src/sys/dev/acpi/acpi.c,v
> retrieving revision 1.421
> diff -u -p -r1.421 acpi.c
> --- dev/acpi//acpi.c  29 Jun 2023 20:58:08 -0000      1.421
> +++ dev/acpi//acpi.c  5 Jul 2023 13:37:18 -0000
> @@ -3439,58 +3439,6 @@ acpiclose(dev_t dev, int flag, int mode,
>       return (error);
>  }
>  
> -int
> -acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
> -{
> -     int error = 0;
> -     struct acpi_softc *sc;
> -     struct apm_power_info *pi = (struct apm_power_info *)data;
> -     int s;
> -
> -     if (!acpi_cd.cd_ndevs || APMUNIT(dev) != 0 ||
> -         !(sc = acpi_cd.cd_devs[APMUNIT(dev)]))
> -             return (ENXIO);
> -
> -     s = splbio();
> -     /* fake APM */
> -     switch (cmd) {
> -     case APM_IOC_SUSPEND:
> -     case APM_IOC_STANDBY:
> -             if ((flag & FWRITE) == 0) {
> -                     error = EBADF;
> -                     break;
> -             }
> -             acpi_addtask(sc, acpi_sleep_task, sc, SLEEP_SUSPEND);
> -             acpi_wakeup(sc);
> -             break;
> -#ifdef HIBERNATE
> -     case APM_IOC_HIBERNATE:
> -             if ((error = suser(p)) != 0)
> -                     break;
> -             if ((flag & FWRITE) == 0) {
> -                     error = EBADF;
> -                     break;
> -             }
> -             if (get_hibernate_io_function(swdevt[0].sw_dev) == NULL) {
> -                     error = EOPNOTSUPP;
> -                     break;
> -             }
> -             acpi_addtask(sc, acpi_sleep_task, sc, SLEEP_HIBERNATE);
> -             acpi_wakeup(sc);
> -             break;
> -#endif
> -     case APM_IOC_GETPOWER:
> -             error = acpi_apminfo(pi);
> -             break;
> -
> -     default:
> -             error = ENOTTY;
> -     }
> -
> -     splx(s);
> -     return (error);
> -}
> -
>  void acpi_filtdetach(struct knote *);
>  int  acpi_filtread(struct knote *, long);
>  
> @@ -3571,12 +3519,6 @@ acpiopen(dev_t dev, int flag, int mode, 
>  
>  int
>  acpiclose(dev_t dev, int flag, int mode, struct proc *p)
> -{
> -     return (ENXIO);
> -}
> -
> -int
> -acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
>  {
>       return (ENXIO);
>  }
> Index: dev/acpi//acpi_x86.c
> ===================================================================
> RCS file: /mount/openbsd/cvs/src/sys/dev/acpi/acpi_x86.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 acpi_x86.c
> --- dev/acpi//acpi_x86.c      6 Mar 2022 15:12:00 -0000       1.15
> +++ dev/acpi//acpi_x86.c      5 Jul 2023 14:33:40 -0000
> @@ -17,15 +17,86 @@
>   */
>  
>  #include <sys/param.h>
> +#include <sys/fcntl.h>
>  #include <sys/systm.h>
>  #include <sys/device.h>
>  
> +#ifdef HIBERNATE
> +#include <sys/hibernate.h>
> +#endif
> +
> +#include <machine/conf.h>
> +#include <machine/cpufunc.h>
> +
>  #include <dev/acpi/acpireg.h>
>  #include <dev/acpi/acpivar.h>
>  #include <dev/acpi/acpidev.h>
>  #include <dev/acpi/dsdt.h>
>  
>  #include <machine/apmvar.h>
> +#define APMUNIT(dev) (minor(dev)&0xf0)
> +
> +#ifndef SMALL_KERNEL
> +extern struct cfdriver acpi_cd;
> +
> +int
> +acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
> +{
> +     int error = 0;
> +     struct acpi_softc *sc;
> +     struct apm_power_info *pi = (struct apm_power_info *)data;
> +     int s;
> +
> +     if (!acpi_cd.cd_ndevs || APMUNIT(dev) != 0 ||
> +         !(sc = acpi_cd.cd_devs[APMUNIT(dev)]))
> +             return (ENXIO);
> +
> +     s = splbio();
> +     /* fake APM */
> +     switch (cmd) {
> +     case APM_IOC_SUSPEND:
> +     case APM_IOC_STANDBY:
> +             if ((flag & FWRITE) == 0) {
> +                     error = EBADF;
> +                     break;
> +             }
> +             acpi_addtask(sc, acpi_sleep_task, sc, SLEEP_SUSPEND);
> +             acpi_wakeup(sc);
> +             break;
> +#ifdef HIBERNATE
> +     case APM_IOC_HIBERNATE:
> +             if ((error = suser(p)) != 0)
> +                     break;
> +             if ((flag & FWRITE) == 0) {
> +                     error = EBADF;
> +                     break;
> +             }
> +             if (get_hibernate_io_function(swdevt[0].sw_dev) == NULL) {
> +                     error = EOPNOTSUPP;
> +                     break;
> +             }
> +             acpi_addtask(sc, acpi_sleep_task, sc, SLEEP_HIBERNATE);
> +             acpi_wakeup(sc);
> +             break;
> +#endif
> +     case APM_IOC_GETPOWER:
> +             error = acpi_apminfo(pi);
> +             break;
> +
> +     default:
> +             error = ENOTTY;
> +     }
> +
> +     splx(s);
> +     return (error);
> +}
> +#else /* SMALL_KERNEL */
> +int
> +acpiioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
> +{
> +     return (ENXIO);
> +}
> +#endif /* SMALL_KERNEL */
>  
>  int
>  sleep_showstate(void *v, int sleepmode)
> 

Reply via email to