summaryrefslogtreecommitdiff
path: root/hw/block
diff options
context:
space:
mode:
authorRoman Kagan <rkagan@virtuozzo.com>2016-02-17 21:25:32 +0300
committerMichael S. Tsirkin <mst@redhat.com>2016-03-11 14:55:15 +0200
commite08fde0c5ee4e7f3ec319a44b846fb9e127c1db2 (patch)
tree0e0e5b23dd7fd165cdb5e9b8f5ad125c38891e33 /hw/block
parentbda055096be9a91d602af457f8bedeede86eb3f6 (diff)
downloadqemu-e08fde0c5ee4e7f3ec319a44b846fb9e127c1db2.tar.gz
fdc: add function to determine drive chs limits
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 <rkagan@virtuozzo.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Marcel Apfelbaum <marcel@redhat.com> Cc: John Snow <jsnow@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Kevin O'Connor <kevin@koconnor.net> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'hw/block')
-rw-r--r--hw/block/fdc.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index 9838d21cf5..fc3aef9cd1 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;
+ }
+ 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)--;
+}
+
static const VMStateDescription vmstate_isa_fdc ={
.name = "fdc",
.version_id = 2,