mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
-win2k-hack performance+DMA support (Leonardo E. Reiter)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1841 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
fa7cf687ac
commit
e774a278d8
1 changed files with 15 additions and 2 deletions
15
hw/ide.c
15
hw/ide.c
|
@ -336,6 +336,7 @@ typedef struct IDEState {
|
||||||
uint8_t *data_end;
|
uint8_t *data_end;
|
||||||
uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];
|
uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];
|
||||||
QEMUTimer *sector_write_timer; /* only used for win2k instal hack */
|
QEMUTimer *sector_write_timer; /* only used for win2k instal hack */
|
||||||
|
uint32_t irq_count; /* counts IRQs when using win2k install hack */
|
||||||
} IDEState;
|
} IDEState;
|
||||||
|
|
||||||
#define BM_STATUS_DMAING 0x01
|
#define BM_STATUS_DMAING 0x01
|
||||||
|
@ -712,7 +713,7 @@ static void ide_sector_write(IDEState *s)
|
||||||
ide_set_sector(s, sector_num + n);
|
ide_set_sector(s, sector_num + n);
|
||||||
|
|
||||||
#ifdef TARGET_I386
|
#ifdef TARGET_I386
|
||||||
if (win2k_install_hack) {
|
if (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
|
||||||
|
@ -750,6 +751,18 @@ static int ide_write_dma_cb(IDEState *s,
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
/* end of transfer */
|
/* end of transfer */
|
||||||
s->status = READY_STAT | SEEK_STAT;
|
s->status = READY_STAT | SEEK_STAT;
|
||||||
|
#ifdef TARGET_I386
|
||||||
|
if (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 that at the expense of slower write
|
||||||
|
performances. Use this option _only_ to install Windows
|
||||||
|
2000. You must disable it for normal use. */
|
||||||
|
qemu_mod_timer(s->sector_write_timer,
|
||||||
|
qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
ide_set_irq(s);
|
ide_set_irq(s);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue