From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53756) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a65Is-0000AU-3s for qemu-devel@nongnu.org; Mon, 07 Dec 2015 18:34:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a65Iq-0006PV-Vo for qemu-devel@nongnu.org; Mon, 07 Dec 2015 18:34:45 -0500 From: John Snow Date: Mon, 7 Dec 2015 18:34:28 -0500 Message-Id: <1449531275-30362-4-git-send-email-jsnow@redhat.com> In-Reply-To: <1449531275-30362-1-git-send-email-jsnow@redhat.com> References: <1449531275-30362-1-git-send-email-jsnow@redhat.com> Subject: [Qemu-devel] [PATCH for-2.6 v2 03/10] fdc: add disk field List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-block@nongnu.org Cc: kwolf@redhat.com, John Snow , armbru@redhat.com, qemu-devel@nongnu.org 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 --- 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 { FDCtrl *fdctrl; BlockBackend *blk; /* Drive status */ - FDriveType drive; + FDriveType drive; /* CMOS drive type */ + FDriveType disk; /* Current disk type */ uint8_t perpendicular; /* 2.88 MB access mode */ /* Position */ uint8_t head; @@ -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) { -- 2.4.3