summaryrefslogtreecommitdiffstats
path: root/usr.sbin/sade
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2003-05-31 11:28:28 +0000
committerscottl <scottl@FreeBSD.org>2003-05-31 11:28:28 +0000
commitf2f79e8c3fd78874b7ac71ce17f19bb9f33d3061 (patch)
treec06dcb8d11c76b020851d24a3b934b48b7a7f5e0 /usr.sbin/sade
parent049e6a81c83ff5402bd64c65dc6f591e7bfb003e (diff)
downloadFreeBSD-src-f2f79e8c3fd78874b7ac71ce17f19bb9f33d3061.zip
FreeBSD-src-f2f79e8c3fd78874b7ac71ce17f19bb9f33d3061.tar.gz
Teach sysinstall to recognize if acpi was turned off from the bootloader,
and then ask the user if this should be made permanent. Approved by: re
Diffstat (limited to 'usr.sbin/sade')
-rw-r--r--usr.sbin/sade/config.c38
-rw-r--r--usr.sbin/sade/install.c9
-rw-r--r--usr.sbin/sade/sade.h4
3 files changed, 51 insertions, 0 deletions
diff --git a/usr.sbin/sade/config.c b/usr.sbin/sade/config.c
index a1b5044..29e7cfe 100644
--- a/usr.sbin/sade/config.c
+++ b/usr.sbin/sade/config.c
@@ -45,6 +45,7 @@
#include <unistd.h>
#include <sys/mount.h>
#include <time.h>
+#include <kenv.h>
static Chunk *chunk_list[MAX_CHUNKS];
static int nchunks;
@@ -1053,3 +1054,40 @@ configEtcTtys(dialogMenuItem *self)
restorescr(w);
return DITEM_SUCCESS;
}
+
+#ifdef __i386__
+int
+checkLoaderACPI(void)
+{
+ char val[4];
+
+ if (kenv(KENV_GET, "loader.acpi_disabled_by_user", &val[0], 4) <= 0) {
+ return (0);
+ }
+
+ if (strtol(&val[0], NULL, 10) <= 0) {
+ return (0);
+ }
+
+ return (1);
+}
+
+int
+configLoaderACPI(int disable)
+{
+ FILE *ldconf;
+
+ ldconf = fopen("/boot/loader.conf", "a");
+ if (ldconf == NULL) {
+ msgConfirm("Unable to open /boot/loader.conf. Please consult the\n"
+ "FreeBSD Handbook for instructions on disabling ACPI");
+ return DITEM_FAILURE;
+ }
+
+ fprintf(ldconf, "# --- Generated by sysinstall ---\n");
+ fprintf(ldconf, "hint.acpi.0.disabled=%d\n", disable);
+ fclose(ldconf);
+
+ return DITEM_SUCCESS;
+}
+#endif
diff --git a/usr.sbin/sade/install.c b/usr.sbin/sade/install.c
index 2a0e0be..acc53f8 100644
--- a/usr.sbin/sade/install.c
+++ b/usr.sbin/sade/install.c
@@ -666,6 +666,15 @@ nodisks:
dmenuOpenSimple(&MenuMouse, FALSE);
#endif
+#ifdef __i386__
+ if (checkLoaderACPI() != 0) {
+ dialog_clear_norefresh();
+ if (!msgNoYes("ACPI was disabled during boot.\n"
+ "Would you like to disable it permanently?"))
+ (void)configLoaderACPI(1 /*disable*/);
+ }
+#endif
+
/* Now would be a good time to checkpoint the configuration data */
configRC_conf();
sync();
diff --git a/usr.sbin/sade/sade.h b/usr.sbin/sade/sade.h
index 264dc40..b2b5d21 100644
--- a/usr.sbin/sade/sade.h
+++ b/usr.sbin/sade/sade.h
@@ -532,6 +532,10 @@ extern int configSecurityProfile(dialogMenuItem *self);
extern int configSecurityExtreme(dialogMenuItem *self);
extern int configSecurityModerate(dialogMenuItem *self);
extern int configEtcTtys(dialogMenuItem *self);
+#ifdef __i386__
+extern int checkLoaderACPI(void);
+extern int configLoaderACPI(int);
+#endif
/* devices.c */
extern DMenu *deviceCreateMenu(DMenu *menu, DeviceType type, int (*hook)(dialogMenuItem *d),
OpenPOWER on IntegriCloud