summaryrefslogtreecommitdiffstats
path: root/include/VBox/vdmedia.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/VBox/vdmedia.h')
-rw-r--r--include/VBox/vdmedia.h226
1 files changed, 226 insertions, 0 deletions
diff --git a/include/VBox/vdmedia.h b/include/VBox/vdmedia.h
new file mode 100644
index 00000000..89886efb
--- /dev/null
+++ b/include/VBox/vdmedia.h
@@ -0,0 +1,226 @@
+/** @file
+ * Virtual Disk Container API - Media type definitions shared with PDM.
+ */
+
+/*
+ * Copyright (C) 2017-2022 Oracle and/or its affiliates.
+ *
+ * This file is part of VirtualBox base platform packages, as
+ * available from https://www.virtualbox.org.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, in version 3 of the
+ * License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses>.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
+ * in the VirtualBox distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
+ */
+
+#ifndef VBOX_INCLUDED_vdmedia_h
+#define VBOX_INCLUDED_vdmedia_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <iprt/types.h>
+
+/** @name VD container type.
+ * @{
+ */
+typedef enum VDTYPE
+{
+ /** Invalid. */
+ VDTYPE_INVALID = 0,
+ /** HardDisk */
+ VDTYPE_HDD,
+ /** Any kind of optical disc (CD/DVD etc.). */
+ VDTYPE_OPTICAL_DISC,
+ /** Floppy. */
+ VDTYPE_FLOPPY
+} VDTYPE;
+/** @}*/
+
+/** @name VD medium type.
+ * @{
+ */
+typedef enum VDMEDIUMTYPE
+{
+ /** Invalid. */
+ VDMEDIUMTYPE_INVALID = 0,
+ /** HardDisk (spinning platter or SSD). */
+ VDMEDIUMTYPE_HDD,
+ /** CD-ROM */
+ VDMEDIUMTYPE_CDROM,
+ /** DVD-ROM */
+ VDMEDIUMTYPE_DVDROM,
+ /** BluRay. */
+ VDMEDIUMTYPE_BD,
+ /** 360KB 5 1/4" floppy. */
+ VDMEDIUMTYPE_FLOPPY_360,
+ /** 720KB 3 1/2" floppy. */
+ VDMEDIUMTYPE_FLOPPY_720,
+ /** 1.2MB 5 1/4" floppy. */
+ VDMEDIUMTYPE_FLOPPY_1_20,
+ /** 1.44MB 3 1/2" floppy. */
+ VDMEDIUMTYPE_FLOPPY_1_44,
+ /** 2.88MB 3 1/2" floppy. */
+ VDMEDIUMTYPE_FLOPPY_2_88,
+ /** Fake disk that can take up to 15.6 MB images.
+ * C=255, H=2, S=63. */
+ VDMEDIUMTYPE_FLOPPY_FAKE_15_6,
+ /** Fake disk that can take up to 63.5 MB images.
+ * C=255, H=2, S=255. */
+ VDMEDIUMTYPE_FLOPPY_FAKE_63_5
+} VDMEDIUMTYPE;
+/** @} */
+
+/** Check if the given medium type is a floppy. */
+#define VDMEDIUMTYPE_IS_FLOPPY(a_enmType) ( (a_enmType) >= VDMEDIUMTYPE_FLOPPY_360 && (a_enmType) <= VDMEDIUMTYPE_FLOPPY_2_88 )
+
+/**
+ * Disk geometry.
+ */
+typedef struct VDGEOMETRY
+{
+ /** Number of cylinders. */
+ uint32_t cCylinders;
+ /** Number of heads. */
+ uint32_t cHeads;
+ /** Number of sectors. */
+ uint32_t cSectors;
+} VDGEOMETRY;
+
+/** Pointer to disk geometry. */
+typedef VDGEOMETRY *PVDGEOMETRY;
+/** Pointer to constant disk geometry. */
+typedef const VDGEOMETRY *PCVDGEOMETRY;
+
+/**
+ * Disk region data form known to us from various standards.
+ */
+typedef enum VDREGIONDATAFORM
+{
+ /** Invalid data form. */
+ VDREGIONDATAFORM_INVALID = 0,
+ /** Raw data, no standardized format. */
+ VDREGIONDATAFORM_RAW,
+ /** CD-DA (audio CD), 2352 bytes of data. */
+ VDREGIONDATAFORM_CDDA,
+ /** CDDA data is pause. */
+ VDREGIONDATAFORM_CDDA_PAUSE,
+ /** Mode 1 with 2048 bytes sector size. */
+ VDREGIONDATAFORM_MODE1_2048,
+ /** Mode 1 with 2352 bytes sector size. */
+ VDREGIONDATAFORM_MODE1_2352,
+ /** Mode 1 with 0 bytes sector size (generated by the drive). */
+ VDREGIONDATAFORM_MODE1_0,
+ /** XA Mode with 2336 bytes sector size. */
+ VDREGIONDATAFORM_XA_2336,
+ /** XA Mode with 2352 bytes sector size. */
+ VDREGIONDATAFORM_XA_2352,
+ /** XA Mode with 0 bytes sector size (generated by the drive). */
+ VDREGIONDATAFORM_XA_0,
+ /** Mode 2 with 2336 bytes sector size. */
+ VDREGIONDATAFORM_MODE2_2336,
+ /** Mode 2 with 2352 bytes sector size. */
+ VDREGIONDATAFORM_MODE2_2352,
+ /** Mode 2 with 0 bytes sector size (generated by the drive). */
+ VDREGIONDATAFORM_MODE2_0
+} VDREGIONDATAFORM;
+/** Pointer to a region data form. */
+typedef VDREGIONDATAFORM *PVDREGIONDATAFORM;
+/** Pointer to a const region data form. */
+typedef const VDREGIONDATAFORM PCVDREGIONDATAFORM;
+
+/**
+ * Disk region metadata forms known to us.
+ */
+typedef enum VDREGIONMETADATAFORM
+{
+ /** Invalid metadata form. */
+ VDREGIONMETADATAFORM_INVALID = 0,
+ /** No metadata assined to the region. */
+ VDREGIONMETADATAFORM_NONE,
+ /** Raw metadata, no standardized format. */
+ VDREGIONMETADATAFORM_RAW
+} VDREGIONMETADATAFORM;
+/** Pointer to a region metadata form. */
+typedef VDREGIONMETADATAFORM *PVDREGIONMETADATAFORM;
+/** Pointer to a const region metadata form. */
+typedef const VDREGIONMETADATAFORM PCVDREGIONMETADATAFORM;
+
+/**
+ * Disk region descriptor.
+ */
+typedef struct VDREGIONDESC
+{
+ /** Start of the region in bytes or LBA number (depending on the flag in the
+ * list header). */
+ uint64_t offRegion;
+ /** Overall size of the region in bytes or number of blocks (depending on the
+ * flag in the list header). */
+ uint64_t cRegionBlocksOrBytes;
+ /** Size of one block in bytes, containing user and metadata. */
+ uint64_t cbBlock;
+ /** User data form of the block. */
+ VDREGIONDATAFORM enmDataForm;
+ /** Metadata form of the block. */
+ VDREGIONMETADATAFORM enmMetadataForm;
+ /** Size of the data block in bytes. */
+ uint64_t cbData;
+ /** Size of the metadata in a block in bytes. */
+ uint64_t cbMetadata;
+} VDREGIONDESC;
+/** Pointer to a region descriptor. */
+typedef VDREGIONDESC *PVDREGIONDESC;
+/** Pointer to a constant region descriptor. */
+typedef const VDREGIONDESC *PCVDREGIONDESC;
+
+/**
+ * Disk region list.
+ */
+typedef struct VDREGIONLIST
+{
+ /** Flags valid for the region list. */
+ uint32_t fFlags;
+ /** Number of regions in the descriptor array. */
+ uint32_t cRegions;
+ /** Region descriptors - variable in size. */
+ VDREGIONDESC aRegions[RT_FLEXIBLE_ARRAY_NESTED];
+} VDREGIONLIST;
+/** Pointer to a region list. */
+typedef VDREGIONLIST *PVDREGIONLIST;
+/** Pointer to a constant region list. */
+typedef const VDREGIONLIST *PCVDREGIONLIST;
+/** Pointer to a region list pointer. */
+typedef PVDREGIONLIST *PPVDREGIONLIST;
+
+/** @name Valid region list flags.
+ * @{
+ */
+/** When set the region start offset and size are given in numbers of blocks
+ * instead of byte offsets and sizes. */
+#define VD_REGION_LIST_F_LOC_SIZE_BLOCKS RT_BIT_32(0)
+/** Mask of all valid flags. */
+#define VD_REGION_LIST_F_VALID (VD_REGION_LIST_F_LOC_SIZE_BLOCKS)
+/** @} */
+
+#endif /* !VBOX_INCLUDED_vdmedia_h */
+