diff options
Diffstat (limited to 'perl-install/install_any.pm')
-rw-r--r-- | perl-install/install_any.pm | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm index 4e6464a2e..10572a2e1 100644 --- a/perl-install/install_any.pm +++ b/perl-install/install_any.pm @@ -706,4 +706,66 @@ sub move_desktop_file($) { } } +sub ultra66 { + my ($o) = @_; + + if (cat_("/proc/cmdline") !~ /ide2=/) { + require pci_probing::main; + my @l = map { $_->[0] } grep { $_->[1] =~ /(HPT|Ultra66)/ } pci_probing::main::probe('STORAGE_OTHER', 'more'); + if (@l && $o->ask_yesorno('', +_("Linux does not yet fully support ultra dma 66. +As a work-around i can make a custom floppy giving access the hard drive on ide2 and ide3"), 1)) { + log::l("HPT|Ultra66: found"); + my $ide = sprintf "ide2=0x%x,0x%x ide3=0x%x,0x%x", + map_index { hex($_) + (odd($::i) ? 1 : -1) } do { + if (@l == 2) { + map { (split ' ')[3..4] } @l + } else { + map { (split ' ')[3..6] } @l + } + }; + log::l("HPT|Ultra66: gonna add ($ide)"); + + my $dev = devices::make("fd0"); + my $image = $o->{pcmcia} ? "pcmcia" : + ${{ hd => 'hd', cdrom => 'cdrom', + ftp => 'network', nfs => 'network', http => 'network' }}{$o->{method}}; + + my $nb_try; + for ($nb_try = 0; $nb_try <= 1; $nb_try++) { + eval { fs::mount($dev, "/floppy", "vfat", 0) }; + last if !$@ && -e "/floppy/syslinux.cfg"; + + eval { fs::umount("/floppy") }; + $o->ask_warn('', +_("Enter a floppy to create an HTP enabled boot +(all data on floppy will be lost)")); + if (my $fd = getFile("$image.img")) { + my $w = $o->wait_message('', _("Creating bootdisk")); + local *OUT; + open OUT, ">$dev" or log::l("failed to write $dev"), return; + local $/ = \ (16 * 1024); + print OUT foreach <$fd>; + } + } + if (-e "/floppy/syslinux.cfg") { + log::l("HTP: modifying syslinux.cfg"); + substInFile { s/(?=$)/ $ide/ if /^\s*append\s/ } "/floppy/syslinux.cfg"; + fs::umount("/floppy"); + log::l("HPT|Ultra66: all done"); + + $o->ask_warn('', $nb_try ? + _("It is necessary to restart installation booting on the floppy") : + _("It is necessary to restart installation with the new parameters")); + install_steps::rebootNeeded ($o); + } else { + $o->ask_warn('', +_("Failed to create an HTP boot floppy. +You may have to restart installation and give ``%s'' at the prompt", $ide)); + } + } + } +} + + 1; |