diff options
Diffstat (limited to 'mdk-stage1/cdrom.c')
| -rw-r--r-- | mdk-stage1/cdrom.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c index deb635ca5..71db1da16 100644 --- a/mdk-stage1/cdrom.c +++ b/mdk-stage1/cdrom.c @@ -1,7 +1,7 @@ /* - * Guillaume Cottenceau (gc@mandrakesoft.com) + * Guillaume Cottenceau (gc) * - * Copyright 2000 Mandrakesoft + * Copyright 2000 Mandriva * * This software may be freely redistributed under the terms of the GNU * public license. @@ -136,8 +136,9 @@ enum return_type cdrom_prepare(void) char * choice; int i, count = 0; enum return_type results; + static int already_probed_ide_generic = 0; - my_insmod("ide_cd", ANY_DRIVER_TYPE, NULL, 0); + my_modprobe("ide_cd_mod", ANY_DRIVER_TYPE, NULL); if (IS_AUTOMATIC) { get_medias(CDROM, &medias, &medias_models, BUS_IDE); @@ -148,7 +149,7 @@ enum return_type cdrom_prepare(void) if ((i = try_automatic(medias, medias_models)) != -1) return do_with_device(medias[i], medias_models[i]); - my_insmod("sr_mod", ANY_DRIVER_TYPE, NULL, 0); + my_modprobe("sr_mod", ANY_DRIVER_TYPE, NULL); get_medias(CDROM, &medias, &medias_models, BUS_SCSI); if ((i = try_automatic(medias, medias_models)) != -1) return do_with_device(medias[i], medias_models[i]); @@ -157,9 +158,16 @@ enum return_type cdrom_prepare(void) if ((i = try_automatic(medias, medias_models)) != -1) return do_with_device(medias[i], medias_models[i]); + /* detect hybrid isos (isos dumped to an USB stick) */ + my_modprobe("sd_mod", ANY_DRIVER_TYPE, NULL); + get_medias(DISK, &medias, &medias_models, BUS_USB); + if ((i = try_automatic(medias, medias_models)) != -1) { + return do_with_device(medias[i], medias_models[i]); + } + unset_automatic(); } else - my_insmod("sr_mod", ANY_DRIVER_TYPE, NULL, 0); + my_modprobe("sr_mod", ANY_DRIVER_TYPE, NULL); get_medias(CDROM, &medias, &medias_models, BUS_ANY); @@ -170,8 +178,13 @@ enum return_type cdrom_prepare(void) } if (count == 0) { + if (!already_probed_ide_generic) { + already_probed_ide_generic = 1; + my_modprobe("ide_generic", ANY_DRIVER_TYPE, NULL); + return cdrom_prepare(); + } stg1_error_message("No CDROM device found."); - i = ask_insmod(SCSI_ADAPTERS); + i = ask_insmod(MEDIA_ADAPTERS); if (i == RETURN_BACK) return RETURN_BACK; return cdrom_prepare(); @@ -181,7 +194,7 @@ enum return_type cdrom_prepare(void) results = try_with_device(*medias, *medias_models); if (results == RETURN_OK) return RETURN_OK; - i = ask_insmod(SCSI_ADAPTERS); + i = ask_insmod(MEDIA_ADAPTERS); if (i == RETURN_BACK) return RETURN_BACK; return cdrom_prepare(); @@ -206,7 +219,7 @@ enum return_type cdrom_prepare(void) if (results == RETURN_BACK) return cdrom_prepare(); - i = ask_insmod(SCSI_ADAPTERS); + i = ask_insmod(MEDIA_ADAPTERS); if (i == RETURN_BACK) return RETURN_BACK; return cdrom_prepare(); |
