Revision f0c596cb hw/ide.c

b/hw/ide.c
864 864
    ide_set_irq(s);
865 865
}
866 866

  
867
static void ide_sector_write_aio_cb(void *opaque, int ret)
868
{
869
    BMDMAState *bm = opaque;
870
    IDEState *s = bm->ide_if;
871

  
872
#ifdef TARGET_I386
873
    if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
874
	/* It seems there is a bug in the Windows 2000 installer HDD
875
	   IDE driver which fills the disk with empty logs when the
876
	   IDE write IRQ comes too early. This hack tries to correct
877
	   that at the expense of slower write performances. Use this
878
	   option _only_ to install Windows 2000. You must disable it
879
	   for normal use. */
880
	qemu_mod_timer(s->sector_write_timer,
881
		       qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
882
    } else
883
#endif
884
    {
885
	ide_set_irq(s);
886
    }
887
    bm->aiocb = NULL;
888
}
889

  
867 890
static void ide_sector_write(IDEState *s)
868 891
{
892
    BMDMAState *bm;
869 893
    int64_t sector_num;
870
    int ret, n, n1;
894
    int n, n1;
895

  
896
    s->io_buffer_index = 0;
897
    s->io_buffer_size = 0;
898
    bm = s->bmdma;
899
    if(bm == NULL) {
900
	bm = qemu_mallocz(sizeof(BMDMAState));
901
	s->bmdma = bm;
902
    }
903
    bm->ide_if = s;
904
    bm->dma_cb = ide_sector_write_aio_cb;
871 905

  
872 906
    s->status = READY_STAT | SEEK_STAT;
873 907
    sector_num = ide_get_sector(s);
......
877 911
    n = s->nsector;
878 912
    if (n > s->req_nb_sectors)
879 913
        n = s->req_nb_sectors;
880
    ret = bdrv_write(s->bs, sector_num, s->io_buffer, n);
881 914
    s->nsector -= n;
882 915
    if (s->nsector == 0) {
883 916
        /* no more sectors to write */
......
890 923
    }
891 924
    ide_set_sector(s, sector_num + n);
892 925
    
893
#ifdef TARGET_I386
894
    if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
895
        /* It seems there is a bug in the Windows 2000 installer HDD
896
           IDE driver which fills the disk with empty logs when the
897
           IDE write IRQ comes too early. This hack tries to correct
898
           that at the expense of slower write performances. Use this
899
           option _only_ to install Windows 2000. You must disable it
900
           for normal use. */
901
        qemu_mod_timer(s->sector_write_timer, 
902
                       qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
903
    } else 
904
#endif
905
    {
906
        ide_set_irq(s);
907
    }
926
    bm->aiocb = bdrv_aio_write(s->bs, sector_num, s->io_buffer, n,
927
			       ide_sector_write_aio_cb, bm);
908 928
}
909 929

  
910 930
/* XXX: handle errors */

Also available in: Unified diff