Message ID | 1453272694-17106-9-git-send-email-jsnow@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 01/19/2016 11:51 PM, John Snow wrote: > This patch adds a new explicit Floppy Drive Type option. The existing > behavior in QEMU is to automatically guess a drive type based on the > media inserted, or if a diskette is not present, arbitrarily assign one. > > This behavior can be described as "auto." This patch adds the option I might have written '"auto".' (the '.' is not part of the behavior name). But while grammar guides are starting to concede this style, they still admit that for a long time English used to always put the trailing '.' of a sentence inside the "", regardless of whether the quoted material originally included a period at that point or whether it was just the speaker ending their sentence on quoted material. > to pick an explicit behavior: 120, 144, 288 or none. The new "auto" > option is intended to mimic current behavior, while the other types > pick one explicitly. > > Set the type given by the CLI during fd_init. If the type remains the > default (auto), we'll attempt to scan an inserted diskette if present > to determine a type. If auto is selected but no diskette is present, > we fall back to a predetermined default (currently 1.44MB to match > legacy QEMU behavior.) > > Signed-off-by: John Snow <jsnow@redhat.com> > --- > hw/block/fdc.c | 26 +++++++++++++++++++++++--- > 1 file changed, 23 insertions(+), 3 deletions(-) > > diff --git a/hw/block/fdc.c b/hw/block/fdc.c > index e9551e5..f475add 100644 > --- a/hw/block/fdc.c > +++ b/hw/block/fdc.c > @@ -159,7 +159,6 @@ static FloppyDriveType get_fallback_drive_type(FDrive *drv); > static void fd_init(FDrive *drv) > { > /* Drive */ > - drv->drive = FLOPPY_DRIVE_TYPE_NONE; > drv->perpendicular = 0; > /* Disk */ > drv->disk = FLOPPY_DRIVE_TYPE_NONE; > @@ -263,7 +262,7 @@ static int pick_geometry(FDrive *drv) > int i, first_match, match; > > /* We can only pick a geometry if we have a diskette. */ > - if (!drv->media_inserted) { > + if ((!drv->media_inserted) || (drv->drive == FLOPPY_DRIVE_TYPE_NONE)) { I might have dropped the two inner () pairs. But that's cosmetic. Reviewed-by: Eric Blake <eblake@redhat.com>
On 01/20/2016 05:43 PM, Eric Blake wrote: > On 01/19/2016 11:51 PM, John Snow wrote: >> This patch adds a new explicit Floppy Drive Type option. The existing >> behavior in QEMU is to automatically guess a drive type based on the >> media inserted, or if a diskette is not present, arbitrarily assign one. >> >> This behavior can be described as "auto." This patch adds the option > > I might have written '"auto".' (the '.' is not part of the behavior > name). But while grammar guides are starting to concede this style, > they still admit that for a long time English used to always put the > trailing '.' of a sentence inside the "", regardless of whether the > quoted material originally included a period at that point or whether it > was just the speaker ending their sentence on quoted material. > "Starting to concede" -- I think Strunk & White disagrees with you on the concept that this is a cool new thing that young people do! I will start putting my punctuation outside the quotation marks as soon as everyone else agrees to stop using two spaces after the full stop. I am taking no prisoners. >> to pick an explicit behavior: 120, 144, 288 or none. The new "auto" >> option is intended to mimic current behavior, while the other types >> pick one explicitly. >> >> Set the type given by the CLI during fd_init. If the type remains the >> default (auto), we'll attempt to scan an inserted diskette if present >> to determine a type. If auto is selected but no diskette is present, >> we fall back to a predetermined default (currently 1.44MB to match >> legacy QEMU behavior.) >> >> Signed-off-by: John Snow <jsnow@redhat.com> >> --- >> hw/block/fdc.c | 26 +++++++++++++++++++++++--- >> 1 file changed, 23 insertions(+), 3 deletions(-) >> >> diff --git a/hw/block/fdc.c b/hw/block/fdc.c >> index e9551e5..f475add 100644 >> --- a/hw/block/fdc.c >> +++ b/hw/block/fdc.c >> @@ -159,7 +159,6 @@ static FloppyDriveType get_fallback_drive_type(FDrive *drv); >> static void fd_init(FDrive *drv) >> { >> /* Drive */ >> - drv->drive = FLOPPY_DRIVE_TYPE_NONE; >> drv->perpendicular = 0; >> /* Disk */ >> drv->disk = FLOPPY_DRIVE_TYPE_NONE; >> @@ -263,7 +262,7 @@ static int pick_geometry(FDrive *drv) >> int i, first_match, match; >> >> /* We can only pick a geometry if we have a diskette. */ >> - if (!drv->media_inserted) { >> + if ((!drv->media_inserted) || (drv->drive == FLOPPY_DRIVE_TYPE_NONE)) { > > I might have dropped the two inner () pairs. But that's cosmetic. > This nit, however, I'll edit. > Reviewed-by: Eric Blake <eblake@redhat.com> > --js
diff --git a/hw/block/fdc.c b/hw/block/fdc.c index e9551e5..f475add 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -159,7 +159,6 @@ static FloppyDriveType get_fallback_drive_type(FDrive *drv); static void fd_init(FDrive *drv) { /* Drive */ - drv->drive = FLOPPY_DRIVE_TYPE_NONE; drv->perpendicular = 0; /* Disk */ drv->disk = FLOPPY_DRIVE_TYPE_NONE; @@ -263,7 +262,7 @@ static int pick_geometry(FDrive *drv) int i, first_match, match; /* We can only pick a geometry if we have a diskette. */ - if (!drv->media_inserted) { + if ((!drv->media_inserted) || (drv->drive == FLOPPY_DRIVE_TYPE_NONE)) { return -1; } @@ -276,7 +275,7 @@ static int pick_geometry(FDrive *drv) break; } if (drv->drive == parse->drive || - drv->drive == FLOPPY_DRIVE_TYPE_NONE) { + drv->drive == FLOPPY_DRIVE_TYPE_AUTO) { size = (parse->max_head + 1) * parse->max_track * parse->last_sect; if (nb_sectors == size) { @@ -313,11 +312,17 @@ static int pick_geometry(FDrive *drv) static void pick_drive_type(FDrive *drv) { + if (drv->drive != FLOPPY_DRIVE_TYPE_AUTO) { + return; + } + if (pick_geometry(drv) == 0) { drv->drive = drv->disk; } else { drv->drive = get_fallback_drive_type(drv); } + + g_assert(drv->drive != FLOPPY_DRIVE_TYPE_AUTO); } /* Revalidate a disk drive after a disk change */ @@ -2474,6 +2479,12 @@ static Property isa_fdc_properties[] = { DEFINE_PROP_DRIVE("driveB", FDCtrlISABus, state.drives[1].blk), DEFINE_PROP_BIT("check_media_rate", FDCtrlISABus, state.check_media_rate, 0, true), + DEFINE_PROP_DEFAULT("fdtypeA", FDCtrlISABus, state.drives[0].drive, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_DEFAULT("fdtypeB", FDCtrlISABus, state.drives[1].drive, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, FloppyDriveType), @@ -2525,6 +2536,12 @@ static const VMStateDescription vmstate_sysbus_fdc ={ static Property sysbus_fdc_properties[] = { DEFINE_PROP_DRIVE("driveA", FDCtrlSysBus, state.drives[0].blk), DEFINE_PROP_DRIVE("driveB", FDCtrlSysBus, state.drives[1].blk), + DEFINE_PROP_DEFAULT("fdtypeA", FDCtrlSysBus, state.drives[0].drive, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), + DEFINE_PROP_DEFAULT("fdtypeB", FDCtrlSysBus, state.drives[1].drive, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, FloppyDriveType), @@ -2548,6 +2565,9 @@ static const TypeInfo sysbus_fdc_info = { static Property sun4m_fdc_properties[] = { DEFINE_PROP_DRIVE("drive", FDCtrlSysBus, state.drives[0].blk), + DEFINE_PROP_DEFAULT("fdtype", FDCtrlSysBus, state.drives[0].drive, + FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type, + FloppyDriveType), DEFINE_PROP_DEFAULT("fallback", FDCtrlISABus, state.fallback, FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type, FloppyDriveType),
This patch adds a new explicit Floppy Drive Type option. The existing behavior in QEMU is to automatically guess a drive type based on the media inserted, or if a diskette is not present, arbitrarily assign one. This behavior can be described as "auto." This patch adds the option to pick an explicit behavior: 120, 144, 288 or none. The new "auto" option is intended to mimic current behavior, while the other types pick one explicitly. Set the type given by the CLI during fd_init. If the type remains the default (auto), we'll attempt to scan an inserted diskette if present to determine a type. If auto is selected but no diskette is present, we fall back to a predetermined default (currently 1.44MB to match legacy QEMU behavior.) Signed-off-by: John Snow <jsnow@redhat.com> --- hw/block/fdc.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-)