/[qemu]/qemu/hw/ide.c
ViewVC logotype

Diff of /qemu/hw/ide.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.33 by bellard, Thu Apr 28 19:26:35 2005 UTC revision 1.34 by bellard, Sat Apr 30 16:10:35 2005 UTC
# Line 332  typedef struct IDEState { Line 332  typedef struct IDEState {
332      uint8_t *data_ptr;      uint8_t *data_ptr;
333      uint8_t *data_end;      uint8_t *data_end;
334      uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];      uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];
335        QEMUTimer *sector_write_timer; /* only used for win2k instal hack */
336  } IDEState;  } IDEState;
337    
338  #define BM_STATUS_DMAING 0x01  #define BM_STATUS_DMAING 0x01
# Line 645  static void ide_sector_read_dma(IDEState Line 646  static void ide_sector_read_dma(IDEState
646      ide_dma_start(s, ide_read_dma_cb);      ide_dma_start(s, ide_read_dma_cb);
647  }  }
648    
649    static void ide_sector_write_timer_cb(void *opaque)
650    {
651        IDEState *s = opaque;
652        ide_set_irq(s);
653    }
654    
655  static void ide_sector_write(IDEState *s)  static void ide_sector_write(IDEState *s)
656  {  {
657      int64_t sector_num;      int64_t sector_num;
# Line 670  static void ide_sector_write(IDEState *s Line 677  static void ide_sector_write(IDEState *s
677          ide_transfer_start(s, s->io_buffer, 512 * n1, ide_sector_write);          ide_transfer_start(s, s->io_buffer, 512 * n1, ide_sector_write);
678      }      }
679      ide_set_sector(s, sector_num + n);      ide_set_sector(s, sector_num + n);
680      ide_set_irq(s);      
681    #ifdef TARGET_I386
682        if (win2k_install_hack) {
683            /* It seems there is a bug in the Windows 2000 installer HDD
684               IDE driver which fills the disk with empty logs when the
685               IDE write IRQ comes too early. This hack tries to correct
686               that at the expense of slower write performances. Use this
687               option _only_ to install Windows 2000. You must disable it
688               for normal use. */
689            qemu_mod_timer(s->sector_write_timer,
690                           qemu_get_clock(vm_clock) + (ticks_per_sec / 1000));
691        } else
692    #endif
693        {
694            ide_set_irq(s);
695        }
696  }  }
697    
698  static int ide_write_dma_cb(IDEState *s,  static int ide_write_dma_cb(IDEState *s,
# Line 1939  static void ide_init2(IDEState *ide_stat Line 1961  static void ide_init2(IDEState *ide_stat
1961          }          }
1962          s->drive_serial = drive_serial++;          s->drive_serial = drive_serial++;
1963          s->irq = irq;          s->irq = irq;
1964            s->sector_write_timer = qemu_new_timer(vm_clock,
1965                                                   ide_sector_write_timer_cb, s);
1966          ide_reset(s);          ide_reset(s);
1967      }      }
1968  }  }

Legend:
Removed from v.1.33  
changed lines
  Added in v.1.34

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26