It looks like spaces and tabs got mangled, I'm resending the diff in-line in this email.
Any other comments / OKs ? Index: etc/etc.amd64/sysctl.conf =================================================================== RCS file: /cvs/src/etc/etc.amd64/sysctl.conf,v retrieving revision 1.7 diff -u -p -u -p -r1.7 sysctl.conf --- etc/etc.amd64/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.7 +++ etc/etc.amd64/sysctl.conf 24 Jul 2017 23:48:06 -0000 @@ -1,3 +1,3 @@ #machdep.allowaperture=2 # See xf86(4) #machdep.kbdreset=1 # permit console CTRL-ALT-DEL to do a nice halt -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing +#machdep.lidaction=0 # 1=suspend, 2=hibernate, 3=power down laptop upon lid closing Index: etc/etc.i386/sysctl.conf =================================================================== RCS file: /cvs/src/etc/etc.i386/sysctl.conf,v retrieving revision 1.21 diff -u -p -u -p -r1.21 sysctl.conf --- etc/etc.i386/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.21 +++ etc/etc.i386/sysctl.conf 24 Jul 2017 23:48:06 -0000 @@ -1,4 +1,4 @@ #machdep.allowaperture=2 # See xf86(4) #machdep.apmhalt=1 # 1=powerdown hack, try if halt -p doesn't work #machdep.kbdreset=1 # permit console CTRL-ALT-DEL to do a nice halt -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing +#machdep.lidaction=0 # 1=suspend, 2=hibernate, 3=power down laptop upon lid closing Index: etc/etc.loongson/sysctl.conf =================================================================== RCS file: /cvs/src/etc/etc.loongson/sysctl.conf,v retrieving revision 1.4 diff -u -p -u -p -r1.4 sysctl.conf --- etc/etc.loongson/sysctl.conf 2 Mar 2017 10:38:09 -0000 1.4 +++ etc/etc.loongson/sysctl.conf 24 Jul 2017 23:48:06 -0000 @@ -1 +1 @@ -#machdep.lidaction=0 # 1=suspend, 2=hibernate laptop upon lid closing +#machdep.lidaction=0 # 1=suspend, 2=hibernate, 3=power down laptop upon lid closing Index: sys/arch/amd64/amd64/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/amd64/amd64/machdep.c,v retrieving revision 1.231 diff -u -p -u -p -r1.231 machdep.c --- sys/arch/amd64/amd64/machdep.c 12 Jul 2017 06:26:32 -0000 1.231 +++ sys/arch/amd64/amd64/machdep.c 24 Jul 2017 23:48:11 -0000 @@ -477,15 +477,20 @@ cpu_sysctl(int *name, u_int namelen, voi case CPU_XCRYPT: return (sysctl_rdint(oldp, oldlenp, newp, amd64_has_xcrypt)); case CPU_LIDACTION: - val = lid_action; - error = sysctl_int(oldp, oldlenp, newp, newlen, &val); - if (!error) { - if (val < 0 || val > 2) - error = EINVAL; - else - lid_action = val; - } - return (error); + if (securelevel > 0) + return (sysctl_rdint(oldp, oldlenp, newp, + lid_action)); + else { + val = lid_action; + error = sysctl_int(oldp, oldlenp, newp, newlen, &val); + if (!error) { + if (val < 0 || val > 3) + error = EINVAL; + else + lid_action = val; + } + return (error); + } #if NPCKBC > 0 && NUKBD > 0 case CPU_FORCEUKBD: if (forceukbd) Index: sys/arch/i386/i386/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v retrieving revision 1.604 diff -u -p -u -p -r1.604 machdep.c --- sys/arch/i386/i386/machdep.c 12 Jul 2017 06:26:32 -0000 1.604 +++ sys/arch/i386/i386/machdep.c 24 Jul 2017 23:48:12 -0000 @@ -3551,15 +3551,20 @@ cpu_sysctl(int *name, u_int namelen, voi case CPU_XCRYPT: return (sysctl_rdint(oldp, oldlenp, newp, i386_has_xcrypt)); case CPU_LIDACTION: - val = lid_action; - error = sysctl_int(oldp, oldlenp, newp, newlen, &val); - if (!error) { - if (val < 0 || val > 2) - error = EINVAL; - else - lid_action = val; - } - return (error); + if (securelevel > 0) + return (sysctl_rdint(oldp, oldlenp, newp, + lid_action)); + else { + val = lid_action; + error = sysctl_int(oldp, oldlenp, newp, newlen, &val); + if (!error) { + if (val < 0 || val > 3) + error = EINVAL; + else + lid_action = val; + } + return (error); + } #if NPCKBC > 0 && NUKBD > 0 case CPU_FORCEUKBD: if (forceukbd) Index: sys/arch/loongson/loongson/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/loongson/loongson/machdep.c,v retrieving revision 1.79 diff -u -p -u -p -r1.79 machdep.c --- sys/arch/loongson/loongson/machdep.c 12 Jul 2017 06:26:33 -0000 1.79 +++ sys/arch/loongson/loongson/machdep.c 24 Jul 2017 23:48:12 -0000 @@ -1032,7 +1032,7 @@ cpu_sysctl(int *name, u_int namelen, voi val = lid_action; error = sysctl_int(oldp, oldlenp, newp, newlen, &val); if (!error) { - if (val < 0 || val > 2) + if (val < 0 || val > 3) error = EINVAL; else lid_action = val; Index: sys/dev/acpi/acpibtn.c =================================================================== RCS file: /cvs/src/sys/dev/acpi/acpibtn.c,v retrieving revision 1.44 diff -u -p -u -p -r1.44 acpibtn.c --- sys/dev/acpi/acpibtn.c 2 Mar 2017 10:38:10 -0000 1.44 +++ sys/dev/acpi/acpibtn.c 24 Jul 2017 23:48:12 -0000 @@ -242,6 +242,8 @@ acpibtn_notify(struct aml_node *node, in sc->sc_acpi, ACPI_SLEEP_HIBERNATE); break; #endif + case 3: + goto powerdown; default: break; } @@ -265,6 +267,7 @@ sleep: break; case ACPIBTN_POWER: if (notify_type == 0x80) +powerdown: acpi_addtask(sc->sc_acpi, acpi_powerdown_task, sc->sc_acpi, 0); break;