Commit ea185bbda732dae6b6a5a44699f90c83e21f1494

Authored by bellard
1 parent 83acc96b

use bdrv_media_changed()


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2122 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 14 additions and 24 deletions
hw/fdc.c
... ... @@ -66,7 +66,6 @@ typedef enum fdrive_type_t {
66 66  
67 67 typedef enum fdrive_flags_t {
68 68 FDRIVE_MOTOR_ON = 0x01, /* motor on/off */
69   - FDRIVE_REVALIDATE = 0x02, /* Revalidated */
70 69 } fdrive_flags_t;
71 70  
72 71 typedef enum fdisk_flags_t {
... ... @@ -236,7 +235,6 @@ static void fd_revalidate (fdrive_t *drv)
236 235 int nb_heads, max_track, last_sect, ro;
237 236  
238 237 FLOPPY_DPRINTF("revalidate\n");
239   - drv->drflags &= ~FDRIVE_REVALIDATE;
240 238 if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) {
241 239 ro = bdrv_is_read_only(drv->bs);
242 240 bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect);
... ... @@ -291,7 +289,6 @@ static void fd_revalidate (fdrive_t *drv)
291 289 drv->max_track = 0;
292 290 drv->flags &= ~FDISK_DBL_SIDES;
293 291 }
294   - drv->drflags |= FDRIVE_REVALIDATE;
295 292 }
296 293  
297 294 /* Motor control */
... ... @@ -488,19 +485,6 @@ static CPUWriteMemoryFunc *fdctrl_mem_write[3] = {
488 485 fdctrl_write_mem,
489 486 };
490 487  
491   -static void fd_change_cb (void *opaque)
492   -{
493   - fdrive_t *drv = opaque;
494   -
495   - FLOPPY_DPRINTF("disk change\n");
496   - fd_revalidate(drv);
497   -#if 0
498   - fd_recalibrate(drv);
499   - fdctrl_reset_fifo(drv->fdctrl);
500   - fdctrl_raise_irq(drv->fdctrl, 0x20);
501   -#endif
502   -}
503   -
504 488 fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
505 489 uint32_t io_base,
506 490 BlockDriverState **fds)
... ... @@ -529,10 +513,6 @@ fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
529 513 }
530 514 for (i = 0; i < 2; i++) {
531 515 fd_init(&fdctrl->drives[i], fds[i]);
532   - if (fds[i]) {
533   - bdrv_set_change_cb(fds[i],
534   - &fd_change_cb, &fdctrl->drives[i]);
535   - }
536 516 }
537 517 fdctrl_reset(fdctrl, 0);
538 518 fdctrl->state = FD_CTRL_ACTIVE;
... ... @@ -760,18 +740,28 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value)
760 740 // fdctrl.precomp = (value >> 2) & 0x07;
761 741 }
762 742  
  743 +static int fdctrl_media_changed(fdrive_t *drv)
  744 +{
  745 + int ret;
  746 + if (!drv->bs)
  747 + return 0;
  748 + ret = bdrv_media_changed(drv->bs);
  749 + if (ret) {
  750 + fd_revalidate(drv);
  751 + }
  752 + return ret;
  753 +}
  754 +
763 755 /* Digital input register : 0x07 (read-only) */
764 756 static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl)
765 757 {
766 758 uint32_t retval = 0;
767 759  
768   - if (drv0(fdctrl)->drflags & FDRIVE_REVALIDATE ||
769   - drv1(fdctrl)->drflags & FDRIVE_REVALIDATE)
  760 + if (fdctrl_media_changed(drv0(fdctrl)) ||
  761 + fdctrl_media_changed(drv1(fdctrl)))
770 762 retval |= 0x80;
771 763 if (retval != 0)
772 764 FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval);
773   - drv0(fdctrl)->drflags &= ~FDRIVE_REVALIDATE;
774   - drv1(fdctrl)->drflags &= ~FDRIVE_REVALIDATE;
775 765  
776 766 return retval;
777 767 }
... ...