ide, vl: turn -win2k-hack into a property on IDE devices

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2024-02-20 17:09:30 +01:00
parent dcaff46101
commit d13f40357b
7 changed files with 8 additions and 5 deletions

View File

@ -1059,7 +1059,7 @@ static void ide_sector_write_cb(void *opaque, int ret)
ide_sector_write); 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 /* It seems there is a bug in the Windows 2000 installer HDD
IDE driver which fills the disk with empty logs when the IDE driver which fills the disk with empty logs when the
IDE write IRQ comes too early. This hack tries to correct IDE write IRQ comes too early. This hack tries to correct
@ -2597,6 +2597,7 @@ int ide_init_drive(IDEState *s, IDEDevice *dev, IDEDriveKind kind, Error **errp)
s->drive_kind = kind; s->drive_kind = kind;
blk_get_geometry(s->blk, &nb_sectors); blk_get_geometry(s->blk, &nb_sectors);
s->win2k_install_hack = dev->win2k_install_hack;
s->cylinders = dev->conf.cyls; s->cylinders = dev->conf.cyls;
s->heads = s->drive_heads = dev->conf.heads; s->heads = s->drive_heads = dev->conf.heads;
s->sectors = s->drive_sectors = dev->conf.secs; s->sectors = s->drive_sectors = dev->conf.secs;

View File

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

View File

@ -65,6 +65,7 @@ struct IDEState {
int drive_serial; int drive_serial;
char drive_serial_str[21]; char drive_serial_str[21];
char drive_model_str[41]; char drive_model_str[41];
bool win2k_install_hack;
uint64_t wwn; uint64_t wwn;
/* ide regs */ /* ide regs */
uint8_t feature; uint8_t feature;
@ -163,6 +164,7 @@ struct IDEDevice {
* 0xffff - reserved * 0xffff - reserved
*/ */
uint16_t rotation_rate; uint16_t rotation_rate;
bool win2k_install_hack;
}; };
typedef struct IDEDrive { typedef struct IDEDrive {

View File

@ -41,7 +41,6 @@ extern int graphic_height;
extern int graphic_depth; extern int graphic_depth;
extern int display_opengl; extern int display_opengl;
extern const char *keyboard_layout; extern const char *keyboard_layout;
extern int win2k_install_hack;
extern int graphic_rotate; extern int graphic_rotate;
extern int old_param; extern int old_param;
extern uint8_t *boot_splash_filedata; extern uint8_t *boot_splash_filedata;

View File

@ -2641,7 +2641,8 @@ SRST
``-win2k-hack`` ``-win2k-hack``
Use it when installing Windows 2000 to avoid a disk full bug. After Use it when installing Windows 2000 to avoid a disk full bug. After
Windows 2000 is installed, you no longer need this option (this 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 ERST
DEF("no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk, DEF("no-fd-bootchk", 0, QEMU_OPTION_no_fd_bootchk,

View File

@ -40,7 +40,6 @@ int autostart = 1;
int vga_interface_type = VGA_NONE; int vga_interface_type = VGA_NONE;
bool vga_interface_created; bool vga_interface_created;
Chardev *parallel_hds[MAX_PARALLEL_PORTS]; Chardev *parallel_hds[MAX_PARALLEL_PORTS];
int win2k_install_hack;
int graphic_rotate; int graphic_rotate;
QEMUOptionRom option_rom[MAX_OPTION_ROMS]; QEMUOptionRom option_rom[MAX_OPTION_ROMS];
int nb_option_roms; int nb_option_roms;

View File

@ -3265,7 +3265,7 @@ void qemu_init(int argc, char **argv)
pid_file = optarg; pid_file = optarg;
break; break;
case QEMU_OPTION_win2k_hack: case QEMU_OPTION_win2k_hack:
win2k_install_hack = 1; object_register_sugar_prop("ide-device", "win2k-install-hack", "true", true);
break; break;
case QEMU_OPTION_acpitable: case QEMU_OPTION_acpitable:
opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"), opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),