From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56885) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aW8Vh-0003zf-AN for qemu-devel@nongnu.org; Wed, 17 Feb 2016 15:15:42 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aW8Ve-0002oP-2B for qemu-devel@nongnu.org; Wed, 17 Feb 2016 15:15:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45635) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aW8Vd-0002oL-QM for qemu-devel@nongnu.org; Wed, 17 Feb 2016 15:15:37 -0500 Date: Wed, 17 Feb 2016 22:15:32 +0200 From: "Michael S. Tsirkin" Message-ID: <20160217220522-mutt-send-email-mst@redhat.com> References: <1455733533-12030-1-git-send-email-rkagan@virtuozzo.com> <1455733533-12030-4-git-send-email-rkagan@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1455733533-12030-4-git-send-email-rkagan@virtuozzo.com> Subject: Re: [Qemu-devel] [PATCH v8 3/4] fdc: add function to determine drive chs limits List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Roman Kagan Cc: Laszlo Ersek , qemu-devel@nongnu.org, Kevin O'Connor , =?iso-8859-1?Q?Herv=E9?= Poussineau , Igor Mammedov , Marcel Apfelbaum , Denis Lunev , John Snow On Wed, Feb 17, 2016 at 09:25:32PM +0300, Roman Kagan wrote: > When populating ACPI objects for floppy drives one needs to provide the > maximum values for cylinder, sector, and head number the drive supports. > > This patch adds a function that iterates through the array of predefined > floppy drive formats and returns the maximum values of c, h, s, out of > those matching the given floppy drive type. > > Signed-off-by: Roman Kagan > Cc: Igor Mammedov > Cc: "Michael S. Tsirkin" > Cc: Marcel Apfelbaum > Cc: John Snow > Cc: Laszlo Ersek > Cc: Kevin O'Connor > --- > changes since v7: > - use drive max c,h,s rather than the current diskette geometry > > hw/block/fdc.c | 23 +++++++++++++++++++++++ > include/hw/block/fdc.h | 2 ++ > 2 files changed, 25 insertions(+) > > diff --git a/hw/block/fdc.c b/hw/block/fdc.c > index 9838d21..fc3aef9 100644 > --- a/hw/block/fdc.c > +++ b/hw/block/fdc.c > @@ -2557,6 +2557,29 @@ FloppyDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i) > return isa->state.drives[i].drive; > } > > +void isa_fdc_get_drive_max_chs(FloppyDriveType type, > + uint8_t *maxc, uint8_t *maxh, uint8_t *maxs) > +{ > + const FDFormat *fdf; > + > + *maxc = *maxh = *maxs = 0; > + for (fdf = fd_formats; fdf->drive != FLOPPY_DRIVE_TYPE_NONE; fdf++) { > + if (fdf->drive != type) { > + continue; > + } Hmm. How does this interact with the fallback/autodetect thing? I understand what it does rather vaguely. I wonder whether we can just ignore the type and take global maximum in all cases. > + if (*maxc < fdf->max_track) { > + *maxc = fdf->max_track; > + } > + if (*maxh < fdf->max_head) { > + *maxh = fdf->max_head; > + } > + if (*maxs < fdf->last_sect) { > + *maxs = fdf->last_sect; > + } > + } > + (*maxc)--; Why not just *maxc = fdf->max_track - 1 above? > +} > + > static const VMStateDescription vmstate_isa_fdc ={ > .name = "fdc", > .version_id = 2, > diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h > index adce14f..1749dab 100644 > --- a/include/hw/block/fdc.h > +++ b/include/hw/block/fdc.h > @@ -15,5 +15,7 @@ void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base, > DriveInfo **fds, qemu_irq *fdc_tc); > > FloppyDriveType isa_fdc_get_drive_type(ISADevice *fdc, int i); > +void isa_fdc_get_drive_max_chs(FloppyDriveType type, > + uint8_t *maxc, uint8_t *maxh, uint8_t *maxs); > > #endif > -- > 2.5.0