Skip to content

Commit

Permalink
ide, vl: turn -win2k-hack into a property on IDE devices
Browse files Browse the repository at this point in the history
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini committed Feb 27, 2024
1 parent dcaff46 commit d13f403
Show file tree
Hide file tree
Showing 7 changed files with 8 additions and 5 deletions.
3 changes: 2 additions & 1 deletion hw/ide/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1059,7 +1059,7 @@ static void ide_sector_write_cb(void *opaque, int ret)
ide_sector_write);
}

if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
if (s->win2k_install_hack && ((++s->irq_count % 16) == 0)) {
/* It seems there is a bug in the Windows 2000 installer HDD
IDE driver which fills the disk with empty logs when the
IDE write IRQ comes too early. This hack tries to correct
Expand Down Expand Up @@ -2597,6 +2597,7 @@ int ide_init_drive(IDEState *s, IDEDevice *dev, IDEDriveKind kind, Error **errp)
s->drive_kind = kind;

blk_get_geometry(s->blk, &nb_sectors);
s->win2k_install_hack = dev->win2k_install_hack;
s->cylinders = dev->conf.cyls;
s->heads = s->drive_heads = dev->conf.heads;
s->sectors = s->drive_sectors = dev->conf.secs;
Expand Down
1 change: 1 addition & 0 deletions hw/ide/ide-dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

static Property ide_props[] = {
DEFINE_PROP_UINT32("unit", IDEDevice, unit, -1),
DEFINE_PROP_BOOL("win2k-install-hack", IDEDevice, win2k_install_hack, false),
DEFINE_PROP_END_OF_LIST(),
};

Expand Down
2 changes: 2 additions & 0 deletions include/hw/ide/ide-dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ struct IDEState {
int drive_serial;
char drive_serial_str[21];
char drive_model_str[41];
bool win2k_install_hack;
uint64_t wwn;
/* ide regs */
uint8_t feature;
Expand Down Expand Up @@ -163,6 +164,7 @@ struct IDEDevice {
* 0xffff - reserved
*/
uint16_t rotation_rate;
bool win2k_install_hack;
};

typedef struct IDEDrive {
Expand Down
1 change: 0 additions & 1 deletion include/sysemu/sysemu.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ extern int graphic_height;
extern int graphic_depth;
extern int display_opengl;
extern const char *keyboard_layout;
extern int win2k_install_hack;
extern int graphic_rotate;
extern int old_param;
extern uint8_t *boot_splash_filedata;
Expand Down
3 changes: 2 additions & 1 deletion qemu-options.hx
Original file line number Diff line number Diff line change
Expand Up @@ -2641,7 +2641,8 @@ SRST
``-win2k-hack``
Use it when installing Windows 2000 to avoid a disk full bug. After
Windows 2000 is installed, you no longer need this option (this
option slows down the IDE transfers).
option slows down the IDE transfers). Synonym of ``-global
ide-device.win2k-install-hack=on``.
ERST

DEF("no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk,
Expand Down
1 change: 0 additions & 1 deletion system/globals.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ int autostart = 1;
int vga_interface_type = VGA_NONE;
bool vga_interface_created;
Chardev *parallel_hds[MAX_PARALLEL_PORTS];
int win2k_install_hack;
int graphic_rotate;
QEMUOptionRom option_rom[MAX_OPTION_ROMS];
int nb_option_roms;
Expand Down
2 changes: 1 addition & 1 deletion system/vl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3265,7 +3265,7 @@ void qemu_init(int argc, char **argv)
pid_file = optarg;
break;
case QEMU_OPTION_win2k_hack:
win2k_install_hack = 1;
object_register_sugar_prop("ide-device", "win2k-install-hack", "true", true);
break;
case QEMU_OPTION_acpitable:
opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),
Expand Down

0 comments on commit d13f403

Please sign in to comment.