From: John Snow <jsnow@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v3 03/11] fdc: add disk field
Date: Thu, 17 Dec 2015 11:59:41 -0500 [thread overview]
Message-ID: <5672E9FD.9010204@redhat.com> (raw)
In-Reply-To: <87fuz11nqh.fsf@blackfin.pond.sub.org>
On 12/17/2015 03:30 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
>
>> This allows us to distinguish between the current disk type and the
>> current drive type. The drive is what's reported to CMOS, the disk is
>> whatever the pick_geometry function suspects has been inserted.
>>
>> The drive field maintains the exact same meaning as it did previously,
>> however pick_geometry/fd_revalidate will be refactored to *never* update
>> the drive field, considering it frozen in-place during an earlier
>> initialization call.
>>
>> Before this patch, pick_geometry/fd_revalidate could only change the
>> drive field when it was FDRIVE_DRV_NONE, which indicated that we had
>> not yet reported our drive type to CMOS. After we "pick one," even
>> though pick_geometry/fd_revalidate re-set drv->drive, it should always
>> be the same as the value going into these calls, so it is effectively
>> already static.
>>
>> As of this patch, disk and drive will always be the same, but that may
>> not be true by the end of this series.
>>
>> Disk does not need to be migrated because it is not user-visible state
>> nor is it currently used for any calculations. It is purely informative,
>> and will be rebuilt automatically via fd_revalidate on the new host.
>>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>> hw/block/fdc.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
>> index 09bb63d..13fef23 100644
>> --- a/hw/block/fdc.c
>> +++ b/hw/block/fdc.c
>> @@ -133,7 +133,8 @@ typedef struct FDrive {
> typedef struct FDrive {
>> FDCtrl *fdctrl;
>> BlockBackend *blk;
>> /* Drive status */
>> - FDriveType drive;
>> + FDriveType drive; /* CMOS drive type */
>> + FDriveType disk; /* Current disk type */
>
> where
>
> typedef enum FDriveType {
> FDRIVE_DRV_144 = 0x00, /* 1.44 MB 3"5 drive */
> FDRIVE_DRV_288 = 0x01, /* 2.88 MB 3"5 drive */
> FDRIVE_DRV_120 = 0x02, /* 1.2 MB 5"25 drive */
> FDRIVE_DRV_NONE = 0x03, /* No drive connected */
> } FDriveType;
>
> FDriveType makes obvious sense as drive type.
>
Sadly yes, because we have very thoroughly intermixed the concept of
media and drive, so DriveType still makes sense for the Diskette.
>> uint8_t perpendicular; /* 2.88 MB access mode */
>
> If I understand @perpendicular correctly, it's just an extra hoop a
> driver needs to jump through to actually access a 2.88M disk.
>
>> /* Position */
>> uint8_t head;
> uint8_t track;
> uint8_t sect;
> /* Media */
>
> Shouldn't @disk go here?
>
Oh, yes.
> FDiskFlags flags;
> uint8_t last_sect; /* Nb sector per track */
> uint8_t max_track; /* Nb of tracks */
> uint16_t bps; /* Bytes per sector */
> uint8_t ro; /* Is read-only */
> uint8_t media_changed; /* Is media changed */
> uint8_t media_rate; /* Data rate of medium */
>
> bool media_inserted; /* Is there a medium in the tray */
> } FDrive;
>
> A disk / medium is characterised by it's form factor, density /
> FDriveRate, #sides, #tracks, #sectors per track, and a read-only bit
> (ignoring a few details that don't interest us). Obviously, the drive
> type restricts possible disk types.
>
> What does @disk add over the media description we already have?
>
It's mostly a semantic game to allow the pick_geometry function to
never, ever, ever write to the "drive" field -- it will operate
exclusively on the "disk" field. Callers can decide what to do with that
information.
The idea in the long haul is to make @drive a "write once or never" kind
of ordeal, and I introduced the new field to help enforce that.
It's purely sugar.
Maybe in the future if I work on the FDC some more it will become useful
for other purposes, but for now it's almost exclusively to inform the
'drive' type when drive is set to AUTO.
> Aside: @bps appears to be write-only, and the value written looks odd.
>
>> @@ -157,6 +158,7 @@ static void fd_init(FDrive *drv)
>> drv->drive = FDRIVE_DRV_NONE;
>> drv->perpendicular = 0;
>> /* Disk */
>> + drv->disk = FDRIVE_DRV_NONE;
>> drv->last_sect = 0;
>> drv->max_track = 0;
>> }
>> @@ -286,6 +288,7 @@ static void pick_geometry(FDrive *drv)
>> drv->max_track = parse->max_track;
>> drv->last_sect = parse->last_sect;
>> drv->drive = parse->drive;
>> + drv->disk = drv->media_inserted ? parse->drive : FDRIVE_DRV_NONE;
>> drv->media_rate = parse->rate;
>>
>> if (drv->media_inserted) {
--
—js
next prev parent reply other threads:[~2015-12-17 16:59 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-16 22:16 [Qemu-devel] [PATCH v3 00/11] fdc: fix 2.88mb floppy diskette support John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 01/11] fdc: move pick_geometry John Snow
2015-12-18 16:15 ` Eric Blake
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 02/11] fdc: refactor pick_geometry John Snow
2015-12-17 7:53 ` Markus Armbruster
2015-12-17 17:50 ` John Snow
2015-12-17 19:09 ` Markus Armbruster
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 03/11] fdc: add disk field John Snow
2015-12-17 8:30 ` Markus Armbruster
2015-12-17 16:59 ` John Snow [this message]
2015-12-17 18:15 ` Markus Armbruster
2015-12-17 18:55 ` John Snow
2015-12-17 19:04 ` Markus Armbruster
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 04/11] fdc: add default drive type option John Snow
2015-12-16 23:03 ` Eric Blake
2015-12-18 15:54 ` Markus Armbruster
2015-12-18 17:20 ` John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 05/11] fdc: Add fallback option John Snow
2015-12-18 15:57 ` Markus Armbruster
2015-12-18 17:22 ` John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 06/11] fdc: do not call revalidate on eject John Snow
2015-12-18 16:11 ` Markus Armbruster
2015-12-18 20:13 ` John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 07/11] fdc: implement new drive type property John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 08/11] fdc: add physical disk sizes John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 09/11] fdc: rework pick_geometry John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 10/11] qtest/fdc: Support for 2.88MB drives John Snow
2015-12-16 22:16 ` [Qemu-devel] [PATCH v3 11/11] fdc: change auto fallback drive for ISA FDC to 288 John Snow
2015-12-16 22:30 ` John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5672E9FD.9010204@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.