Commit ea185bbda732dae6b6a5a44699f90c83e21f1494
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,7 +66,6 @@ typedef enum fdrive_type_t { | ||
66 | 66 | ||
67 | typedef enum fdrive_flags_t { | 67 | typedef enum fdrive_flags_t { |
68 | FDRIVE_MOTOR_ON = 0x01, /* motor on/off */ | 68 | FDRIVE_MOTOR_ON = 0x01, /* motor on/off */ |
69 | - FDRIVE_REVALIDATE = 0x02, /* Revalidated */ | ||
70 | } fdrive_flags_t; | 69 | } fdrive_flags_t; |
71 | 70 | ||
72 | typedef enum fdisk_flags_t { | 71 | typedef enum fdisk_flags_t { |
@@ -236,7 +235,6 @@ static void fd_revalidate (fdrive_t *drv) | @@ -236,7 +235,6 @@ static void fd_revalidate (fdrive_t *drv) | ||
236 | int nb_heads, max_track, last_sect, ro; | 235 | int nb_heads, max_track, last_sect, ro; |
237 | 236 | ||
238 | FLOPPY_DPRINTF("revalidate\n"); | 237 | FLOPPY_DPRINTF("revalidate\n"); |
239 | - drv->drflags &= ~FDRIVE_REVALIDATE; | ||
240 | if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) { | 238 | if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) { |
241 | ro = bdrv_is_read_only(drv->bs); | 239 | ro = bdrv_is_read_only(drv->bs); |
242 | bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect); | 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,7 +289,6 @@ static void fd_revalidate (fdrive_t *drv) | ||
291 | drv->max_track = 0; | 289 | drv->max_track = 0; |
292 | drv->flags &= ~FDISK_DBL_SIDES; | 290 | drv->flags &= ~FDISK_DBL_SIDES; |
293 | } | 291 | } |
294 | - drv->drflags |= FDRIVE_REVALIDATE; | ||
295 | } | 292 | } |
296 | 293 | ||
297 | /* Motor control */ | 294 | /* Motor control */ |
@@ -488,19 +485,6 @@ static CPUWriteMemoryFunc *fdctrl_mem_write[3] = { | @@ -488,19 +485,6 @@ static CPUWriteMemoryFunc *fdctrl_mem_write[3] = { | ||
488 | fdctrl_write_mem, | 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 | fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, | 488 | fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, |
505 | uint32_t io_base, | 489 | uint32_t io_base, |
506 | BlockDriverState **fds) | 490 | BlockDriverState **fds) |
@@ -529,10 +513,6 @@ fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, | @@ -529,10 +513,6 @@ fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, | ||
529 | } | 513 | } |
530 | for (i = 0; i < 2; i++) { | 514 | for (i = 0; i < 2; i++) { |
531 | fd_init(&fdctrl->drives[i], fds[i]); | 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 | fdctrl_reset(fdctrl, 0); | 517 | fdctrl_reset(fdctrl, 0); |
538 | fdctrl->state = FD_CTRL_ACTIVE; | 518 | fdctrl->state = FD_CTRL_ACTIVE; |
@@ -760,18 +740,28 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value) | @@ -760,18 +740,28 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value) | ||
760 | // fdctrl.precomp = (value >> 2) & 0x07; | 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 | /* Digital input register : 0x07 (read-only) */ | 755 | /* Digital input register : 0x07 (read-only) */ |
764 | static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl) | 756 | static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl) |
765 | { | 757 | { |
766 | uint32_t retval = 0; | 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 | retval |= 0x80; | 762 | retval |= 0x80; |
771 | if (retval != 0) | 763 | if (retval != 0) |
772 | FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval); | 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 | return retval; | 766 | return retval; |
777 | } | 767 | } |