diff options
author | scottl <scottl@FreeBSD.org> | 2003-05-31 11:28:28 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2003-05-31 11:28:28 +0000 |
commit | f2f79e8c3fd78874b7ac71ce17f19bb9f33d3061 (patch) | |
tree | c06dcb8d11c76b020851d24a3b934b48b7a7f5e0 /usr.sbin/sysinstall | |
parent | 049e6a81c83ff5402bd64c65dc6f591e7bfb003e (diff) | |
download | FreeBSD-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/sysinstall')
-rw-r--r-- | usr.sbin/sysinstall/config.c | 38 | ||||
-rw-r--r-- | usr.sbin/sysinstall/install.c | 9 | ||||
-rw-r--r-- | usr.sbin/sysinstall/sysinstall.h | 4 |
3 files changed, 51 insertions, 0 deletions
diff --git a/usr.sbin/sysinstall/config.c b/usr.sbin/sysinstall/config.c index a1b5044..29e7cfe 100644 --- a/usr.sbin/sysinstall/config.c +++ b/usr.sbin/sysinstall/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/sysinstall/install.c b/usr.sbin/sysinstall/install.c index 2a0e0be..acc53f8 100644 --- a/usr.sbin/sysinstall/install.c +++ b/usr.sbin/sysinstall/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/sysinstall/sysinstall.h b/usr.sbin/sysinstall/sysinstall.h index 264dc40..b2b5d21 100644 --- a/usr.sbin/sysinstall/sysinstall.h +++ b/usr.sbin/sysinstall/sysinstall.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), |