1
0
Fork 0
virtualbox/include/VBox/vdmedia.h
Daniel Baumann df1bda4fe9
Adding upstream version 7.0.20-dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 09:56:04 +02:00

226 lines
7 KiB
C

/** @file
* Virtual Disk Container API - Media type definitions shared with PDM.
*/
/*
* Copyright (C) 2017-2023 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 */