VirtualBox

source: vbox/trunk/include/VBox/vd-common.h@ 97964

Last change on this file since 97964 was 96407, checked in by vboxsync, 2 years ago

scm copyright and license note update

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.0 KB
Line 
1/** @file
2 * VD: common definitions for the registration, backend and interface structures.
3 */
4
5/*
6 * Copyright (C) 2016-2022 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef VBOX_INCLUDED_vd_common_h
37#define VBOX_INCLUDED_vd_common_h
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <VBox/types.h>
43
44/** Makes a VD structure version out of an unique magic value and major &
45 * minor version numbers.
46 *
47 * @returns 32-bit structure version number.
48 *
49 * @param uMagic 16-bit magic value. This must be unique.
50 * @param uMajor 12-bit major version number. Structures with different
51 * major numbers are not compatible.
52 * @param uMinor 4-bit minor version number. When only the minor version
53 * differs, the structures will be 100% backwards
54 * compatible.
55 */
56#define VD_VERSION_MAKE(uMagic, uMajor, uMinor) \
57 ( ((uint32_t)(uMagic) << 16) | ((uint32_t)((uMajor) & 0xff) << 4) | ((uint32_t)((uMinor) & 0xf) << 0) )
58
59/** Checks if @a uVerMagic1 is compatible with @a uVerMagic2.
60 *
61 * @returns true / false.
62 * @param uVerMagic1 Typically the runtime version of the struct. This must
63 * have the same magic and major version as @a uVerMagic2
64 * and the minor version must be greater or equal to that
65 * of @a uVerMagic2.
66 * @param uVerMagic2 Typically the version the code was compiled against.
67 *
68 * @remarks The parameters will be referenced more than once.
69 */
70#define VD_VERSION_ARE_COMPATIBLE(uVerMagic1, uVerMagic2) \
71 ( (uVerMagic1) == (uVerMagic2) \
72 || ( (uVerMagic1) >= (uVerMagic2) \
73 && ((uVerMagic1) & UINT32_C(0xfffffff0)) == ((uVerMagic2) & UINT32_C(0xfffffff0)) ) \
74 )
75
76#endif /* !VBOX_INCLUDED_vd_common_h */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette