mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-06 17:31:06 +00:00
use bdrv_media_changed()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2122 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
83acc96b23
commit
ea185bbda7
38
hw/fdc.c
38
hw/fdc.c
@ -66,7 +66,6 @@ typedef enum fdrive_type_t {
|
|||||||
|
|
||||||
typedef enum fdrive_flags_t {
|
typedef enum fdrive_flags_t {
|
||||||
FDRIVE_MOTOR_ON = 0x01, /* motor on/off */
|
FDRIVE_MOTOR_ON = 0x01, /* motor on/off */
|
||||||
FDRIVE_REVALIDATE = 0x02, /* Revalidated */
|
|
||||||
} fdrive_flags_t;
|
} fdrive_flags_t;
|
||||||
|
|
||||||
typedef enum fdisk_flags_t {
|
typedef enum fdisk_flags_t {
|
||||||
@ -236,7 +235,6 @@ static void fd_revalidate (fdrive_t *drv)
|
|||||||
int nb_heads, max_track, last_sect, ro;
|
int nb_heads, max_track, last_sect, ro;
|
||||||
|
|
||||||
FLOPPY_DPRINTF("revalidate\n");
|
FLOPPY_DPRINTF("revalidate\n");
|
||||||
drv->drflags &= ~FDRIVE_REVALIDATE;
|
|
||||||
if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) {
|
if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) {
|
||||||
ro = bdrv_is_read_only(drv->bs);
|
ro = bdrv_is_read_only(drv->bs);
|
||||||
bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect);
|
bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect);
|
||||||
@ -291,7 +289,6 @@ static void fd_revalidate (fdrive_t *drv)
|
|||||||
drv->max_track = 0;
|
drv->max_track = 0;
|
||||||
drv->flags &= ~FDISK_DBL_SIDES;
|
drv->flags &= ~FDISK_DBL_SIDES;
|
||||||
}
|
}
|
||||||
drv->drflags |= FDRIVE_REVALIDATE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Motor control */
|
/* Motor control */
|
||||||
@ -488,19 +485,6 @@ static CPUWriteMemoryFunc *fdctrl_mem_write[3] = {
|
|||||||
fdctrl_write_mem,
|
fdctrl_write_mem,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fd_change_cb (void *opaque)
|
|
||||||
{
|
|
||||||
fdrive_t *drv = opaque;
|
|
||||||
|
|
||||||
FLOPPY_DPRINTF("disk change\n");
|
|
||||||
fd_revalidate(drv);
|
|
||||||
#if 0
|
|
||||||
fd_recalibrate(drv);
|
|
||||||
fdctrl_reset_fifo(drv->fdctrl);
|
|
||||||
fdctrl_raise_irq(drv->fdctrl, 0x20);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
|
fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
|
||||||
uint32_t io_base,
|
uint32_t io_base,
|
||||||
BlockDriverState **fds)
|
BlockDriverState **fds)
|
||||||
@ -529,10 +513,6 @@ fdctrl_t *fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped,
|
|||||||
}
|
}
|
||||||
for (i = 0; i < 2; i++) {
|
for (i = 0; i < 2; i++) {
|
||||||
fd_init(&fdctrl->drives[i], fds[i]);
|
fd_init(&fdctrl->drives[i], fds[i]);
|
||||||
if (fds[i]) {
|
|
||||||
bdrv_set_change_cb(fds[i],
|
|
||||||
&fd_change_cb, &fdctrl->drives[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
fdctrl_reset(fdctrl, 0);
|
fdctrl_reset(fdctrl, 0);
|
||||||
fdctrl->state = FD_CTRL_ACTIVE;
|
fdctrl->state = FD_CTRL_ACTIVE;
|
||||||
@ -760,18 +740,28 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value)
|
|||||||
// fdctrl.precomp = (value >> 2) & 0x07;
|
// fdctrl.precomp = (value >> 2) & 0x07;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int fdctrl_media_changed(fdrive_t *drv)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
if (!drv->bs)
|
||||||
|
return 0;
|
||||||
|
ret = bdrv_media_changed(drv->bs);
|
||||||
|
if (ret) {
|
||||||
|
fd_revalidate(drv);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Digital input register : 0x07 (read-only) */
|
/* Digital input register : 0x07 (read-only) */
|
||||||
static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl)
|
static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl)
|
||||||
{
|
{
|
||||||
uint32_t retval = 0;
|
uint32_t retval = 0;
|
||||||
|
|
||||||
if (drv0(fdctrl)->drflags & FDRIVE_REVALIDATE ||
|
if (fdctrl_media_changed(drv0(fdctrl)) ||
|
||||||
drv1(fdctrl)->drflags & FDRIVE_REVALIDATE)
|
fdctrl_media_changed(drv1(fdctrl)))
|
||||||
retval |= 0x80;
|
retval |= 0x80;
|
||||||
if (retval != 0)
|
if (retval != 0)
|
||||||
FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval);
|
FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval);
|
||||||
drv0(fdctrl)->drflags &= ~FDRIVE_REVALIDATE;
|
|
||||||
drv1(fdctrl)->drflags &= ~FDRIVE_REVALIDATE;
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user