mirror of
https://github.com/qemu/qemu.git
synced 2025-01-22 13:33:25 +08:00
fdc: reduce number of pick_geometry arguments
Modify this function to operate directly on FDrive objects instead of unpacking and passing all of those parameters manually. Reduces the complexity in the caller and reduces the number of args to just one. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 1453495865-9649-3-git-send-email-jsnow@redhat.com
This commit is contained in:
parent
9a97223399
commit
21862658fd
@ -242,11 +242,9 @@ static void fd_recalibrate(FDrive *drv)
|
|||||||
fd_seek(drv, 0, 0, 1, 1);
|
fd_seek(drv, 0, 0, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pick_geometry(BlockBackend *blk, int *nb_heads,
|
static void pick_geometry(FDrive *drv)
|
||||||
int *max_track, int *last_sect,
|
|
||||||
FDriveType drive_in, FDriveType *drive,
|
|
||||||
FDriveRate *rate)
|
|
||||||
{
|
{
|
||||||
|
BlockBackend *blk = drv->blk;
|
||||||
const FDFormat *parse;
|
const FDFormat *parse;
|
||||||
uint64_t nb_sectors, size;
|
uint64_t nb_sectors, size;
|
||||||
int i, first_match, match;
|
int i, first_match, match;
|
||||||
@ -259,8 +257,8 @@ static void pick_geometry(BlockBackend *blk, int *nb_heads,
|
|||||||
if (parse->drive == FDRIVE_DRV_NONE) {
|
if (parse->drive == FDRIVE_DRV_NONE) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (drive_in == parse->drive ||
|
if (drv->drive == parse->drive ||
|
||||||
drive_in == FDRIVE_DRV_NONE) {
|
drv->drive == FDRIVE_DRV_NONE) {
|
||||||
size = (parse->max_head + 1) * parse->max_track *
|
size = (parse->max_head + 1) * parse->max_track *
|
||||||
parse->last_sect;
|
parse->last_sect;
|
||||||
if (nb_sectors == size) {
|
if (nb_sectors == size) {
|
||||||
@ -280,41 +278,33 @@ static void pick_geometry(BlockBackend *blk, int *nb_heads,
|
|||||||
}
|
}
|
||||||
parse = &fd_formats[match];
|
parse = &fd_formats[match];
|
||||||
}
|
}
|
||||||
*nb_heads = parse->max_head + 1;
|
|
||||||
*max_track = parse->max_track;
|
if (parse->max_head == 0) {
|
||||||
*last_sect = parse->last_sect;
|
drv->flags &= ~FDISK_DBL_SIDES;
|
||||||
*drive = parse->drive;
|
} else {
|
||||||
*rate = parse->rate;
|
drv->flags |= FDISK_DBL_SIDES;
|
||||||
|
}
|
||||||
|
drv->max_track = parse->max_track;
|
||||||
|
drv->last_sect = parse->last_sect;
|
||||||
|
drv->drive = parse->drive;
|
||||||
|
drv->media_rate = parse->rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Revalidate a disk drive after a disk change */
|
/* Revalidate a disk drive after a disk change */
|
||||||
static void fd_revalidate(FDrive *drv)
|
static void fd_revalidate(FDrive *drv)
|
||||||
{
|
{
|
||||||
int nb_heads, max_track, last_sect, ro;
|
|
||||||
FDriveType drive;
|
|
||||||
FDriveRate rate;
|
|
||||||
|
|
||||||
FLOPPY_DPRINTF("revalidate\n");
|
FLOPPY_DPRINTF("revalidate\n");
|
||||||
if (drv->blk != NULL) {
|
if (drv->blk != NULL) {
|
||||||
ro = blk_is_read_only(drv->blk);
|
drv->ro = blk_is_read_only(drv->blk);
|
||||||
pick_geometry(drv->blk, &nb_heads, &max_track,
|
pick_geometry(drv);
|
||||||
&last_sect, drv->drive, &drive, &rate);
|
|
||||||
if (!drv->media_inserted) {
|
if (!drv->media_inserted) {
|
||||||
FLOPPY_DPRINTF("No disk in drive\n");
|
FLOPPY_DPRINTF("No disk in drive\n");
|
||||||
} else {
|
} else {
|
||||||
FLOPPY_DPRINTF("Floppy disk (%d h %d t %d s) %s\n", nb_heads,
|
FLOPPY_DPRINTF("Floppy disk (%d h %d t %d s) %s\n",
|
||||||
max_track, last_sect, ro ? "ro" : "rw");
|
(drv->flags & FDISK_DBL_SIDES) ? 2 : 1,
|
||||||
|
drv->max_track, drv->last_sect,
|
||||||
|
drv->ro ? "ro" : "rw");
|
||||||
}
|
}
|
||||||
if (nb_heads == 1) {
|
|
||||||
drv->flags &= ~FDISK_DBL_SIDES;
|
|
||||||
} else {
|
|
||||||
drv->flags |= FDISK_DBL_SIDES;
|
|
||||||
}
|
|
||||||
drv->max_track = max_track;
|
|
||||||
drv->last_sect = last_sect;
|
|
||||||
drv->ro = ro;
|
|
||||||
drv->drive = drive;
|
|
||||||
drv->media_rate = rate;
|
|
||||||
} else {
|
} else {
|
||||||
FLOPPY_DPRINTF("No drive connected\n");
|
FLOPPY_DPRINTF("No drive connected\n");
|
||||||
drv->last_sect = 0;
|
drv->last_sect = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user