summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdk-stage1/stage1.c71
1 files changed, 9 insertions, 62 deletions
diff --git a/mdk-stage1/stage1.c b/mdk-stage1/stage1.c
index 0a58dc0b7..b2fbc546a 100644
--- a/mdk-stage1/stage1.c
+++ b/mdk-stage1/stage1.c
@@ -46,6 +46,7 @@ _syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
#include "automatic.h"
#include "mount.h"
#include "insmod.h"
+#include "thirdparty.h"
#ifdef ENABLE_PCMCIA
#include "pcmcia_/pcmcia.h"
@@ -214,64 +215,6 @@ static void spawn_interactive(void)
#endif
-/************************************************************
- */
-
-static void expert_third_party_modules(void)
-{
- enum return_type results;
- char * floppy_mount_location = "/tmp/floppy";
- char ** modules;
- char final_name[500];
- char * choice;
- int rc;
- char * questions[] = { "Options", NULL };
- static char ** answers = NULL;
-
- results = ask_yes_no("If you want to insert third-party kernel modules, insert "
- "a Linux (ext2fs) formatted floppy containing the modules and confirm. Otherwise, select \"no\".");;
- if (results != RETURN_OK)
- return;
-
- if (my_mount(floppy_device(), floppy_mount_location, "ext2", 0) == -1) {
- stg1_error_message("I can't find a Linux ext2 floppy in first floppy drive.");
- return expert_third_party_modules();
- }
-
- modules = list_directory(floppy_mount_location);
-
- if (!modules || !*modules) {
- stg1_error_message("No modules found on floppy disk.");
- umount(floppy_mount_location);
- return expert_third_party_modules();
- }
-
- results = ask_from_list("Which driver would you like to insmod?", modules, &choice);
- if (results != RETURN_OK) {
- umount(floppy_mount_location);
- return;
- }
-
- sprintf(final_name, "%s/%s", floppy_mount_location, choice);
-
- results = ask_from_entries("Please enter the options:", questions, &answers, 24, NULL);
- if (results != RETURN_OK) {
- umount(floppy_mount_location);
- return expert_third_party_modules();
- }
-
- rc = insmod_local_file(final_name, answers[0]);
- umount(floppy_mount_location);
-
- if (rc) {
- log_message("\tfailed");
- stg1_error_message("Insmod failed.");
- }
-
- return expert_third_party_modules();
-}
-
-
#ifdef ENABLE_PCMCIA
static void handle_pcmcia(void)
{
@@ -296,7 +239,7 @@ static void handle_pcmcia(void)
remove_wait_message();
if (IS_EXPERT)
- expert_third_party_modules();
+ thirdparty_load_modules();
add_to_env("PCMCIA", pcmcia_adapter);
}
@@ -324,6 +267,7 @@ static void method_select_and_prepare(void)
char * network_ftp_install = "FTP server"; char * network_ftp_install_auto = "ftp";
char * network_http_install = "HTTP server"; char * network_http_install_auto = "http";
#endif
+ char * thirdparty_install = "Load third party modules"; char * thirdparty_install_auto = "thirdparty";
i = 0;
#ifndef DISABLE_NETWORK
@@ -339,6 +283,7 @@ static void method_select_and_prepare(void)
means[i] = disk_install; means_auto[i++] = disk_install_auto;
allow_additional_modules_floppy = 0;
#endif
+ means[i] = thirdparty_install; means_auto[i++] = thirdparty_install_auto;
means[i] = NULL;
unlink(IMAGE_LOCATION);
@@ -372,6 +317,11 @@ static void method_select_and_prepare(void)
#endif
#endif
+ if (!strcmp(choice, thirdparty_install)) {
+ thirdparty_load_modules();
+ return method_select_and_prepare();
+ }
+
if (results != RETURN_OK)
return method_select_and_prepare();
}
@@ -635,9 +585,6 @@ int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))
/* load usb interface as soon as possible, helps usb mouse detection in stage2 */
probe_that_type(USB_CONTROLLERS, BUS_USB);
- if (IS_EXPERT)
- expert_third_party_modules();
-
if (IS_UPDATEMODULES)
update_modules();