Commit e774a278d82c9391c9fb6c9af42cd08bb9364b9f

Authored by bellard
1 parent fa7cf687

-win2k-hack performance+DMA support (Leonardo E. Reiter)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1841 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 15 additions and 2 deletions
hw/ide.c
@@ -336,6 +336,7 @@ typedef struct IDEState { @@ -336,6 +336,7 @@ typedef struct IDEState {
336 uint8_t *data_end; 336 uint8_t *data_end;
337 uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4]; 337 uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];
338 QEMUTimer *sector_write_timer; /* only used for win2k instal hack */ 338 QEMUTimer *sector_write_timer; /* only used for win2k instal hack */
  339 + uint32_t irq_count; /* counts IRQs when using win2k install hack */
339 } IDEState; 340 } IDEState;
340 341
341 #define BM_STATUS_DMAING 0x01 342 #define BM_STATUS_DMAING 0x01
@@ -712,7 +713,7 @@ static void ide_sector_write(IDEState *s) @@ -712,7 +713,7 @@ static void ide_sector_write(IDEState *s)
712 ide_set_sector(s, sector_num + n); 713 ide_set_sector(s, sector_num + n);
713 714
714 #ifdef TARGET_I386 715 #ifdef TARGET_I386
715 - if (win2k_install_hack) { 716 + if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
716 /* It seems there is a bug in the Windows 2000 installer HDD 717 /* It seems there is a bug in the Windows 2000 installer HDD
717 IDE driver which fills the disk with empty logs when the 718 IDE driver which fills the disk with empty logs when the
718 IDE write IRQ comes too early. This hack tries to correct 719 IDE write IRQ comes too early. This hack tries to correct
@@ -750,7 +751,19 @@ static int ide_write_dma_cb(IDEState *s, @@ -750,7 +751,19 @@ static int ide_write_dma_cb(IDEState *s,
750 if (n == 0) { 751 if (n == 0) {
751 /* end of transfer */ 752 /* end of transfer */
752 s->status = READY_STAT | SEEK_STAT; 753 s->status = READY_STAT | SEEK_STAT;
753 - ide_set_irq(s); 754 +#ifdef TARGET_I386
  755 + if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
  756 + /* It seems there is a bug in the Windows 2000 installer
  757 + HDD IDE driver which fills the disk with empty logs
  758 + when the IDE write IRQ comes too early. This hack tries
  759 + to correct that at the expense of slower write
  760 + performances. Use this option _only_ to install Windows
  761 + 2000. You must disable it for normal use. */
  762 + qemu_mod_timer(s->sector_write_timer,
  763 + qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
  764 + } else
  765 +#endif
  766 + ide_set_irq(s);
754 return 0; 767 return 0;
755 } 768 }
756 if (n > MAX_MULT_SECTORS) 769 if (n > MAX_MULT_SECTORS)