From patchwork Mon Sep 3 09:18:42 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wayne Xia X-Patchwork-Id: 181340 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 97AC52C0091 for ; Mon, 3 Sep 2012 19:22:43 +1000 (EST) Received: from localhost ([::1]:44247 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8Srh-0004tt-Gw for incoming@patchwork.ozlabs.org; Mon, 03 Sep 2012 05:22:41 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8SrJ-0004fB-OI for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:22:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T8SrD-0007qC-GS for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:22:17 -0400 Received: from e23smtp05.au.ibm.com ([202.81.31.147]:43308) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T8SrC-0007ph-Jm for qemu-devel@nongnu.org; Mon, 03 Sep 2012 05:22:11 -0400 Received: from /spool/local by e23smtp05.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 3 Sep 2012 19:21:17 +1000 Received: from d23relay05.au.ibm.com (202.81.31.247) by e23smtp05.au.ibm.com (202.81.31.211) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 3 Sep 2012 19:20:53 +1000 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q839CbY830015568 for ; Mon, 3 Sep 2012 19:12:38 +1000 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q839LgvQ018276 for ; Mon, 3 Sep 2012 19:21:42 +1000 Received: from RedHat62GAWSWenchao ([9.115.122.34]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id q839JI4i012127; Mon, 3 Sep 2012 19:21:40 +1000 From: Wenchao Xia To: qemu-devel@nongnu.org Date: Mon, 3 Sep 2012 17:18:42 +0800 Message-Id: <1346663926-20188-3-git-send-email-xiawenc@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1346663926-20188-1-git-send-email-xiawenc@linux.vnet.ibm.com> References: <1346663926-20188-1-git-send-email-xiawenc@linux.vnet.ibm.com> x-cbid: 12090309-1396-0000-0000-000001CF8FA5 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 202.81.31.147 Cc: kwolf@redhat.com, aliguori@us.ibm.com, stefanha@gmail.com, pbonzini@redhat.com, eblake@redhat.com, Wenchao Xia Subject: [Qemu-devel] [PATCH 2/6] libqblock public type defines X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This patch contains public type and defines used in APIs. Signed-off-by: Wenchao Xia --- libqblock/libqblock-types.h | 228 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 228 insertions(+), 0 deletions(-) create mode 100644 libqblock/libqblock-types.h diff --git a/libqblock/libqblock-types.h b/libqblock/libqblock-types.h new file mode 100644 index 0000000..3389bda --- /dev/null +++ b/libqblock/libqblock-types.h @@ -0,0 +1,228 @@ +#ifndef LIBQBLOCK_TYPES_H +#define LIBQBLOCK_TYPES_H + +#include +#include +#include +#include + +/* this library is designed around this core struct. */ +struct QBlockState; + +/* every thread would have a broker. */ +struct QBroker; + +/* flag used in open and create */ +#define LIBQBLOCK_O_RDWR 0x0002 +/* do not use the host page cache */ +#define LIBQBLOCK_O_NOCACHE 0x0020 +/* use write-back caching */ +#define LIBQBLOCK_O_CACHE_WB 0x0040 +/* don't open the backing file */ +#define LIBQBLOCK_O_NO_BACKING 0x0100 +/* disable flushing on this disk */ +#define LIBQBLOCK_O_NO_FLUSH 0x0200 + +#define LIBQBLOCK_O_CACHE_MASK \ + (LIBQBLOCK_O_NOCACHE | LIBQBLOCK_O_CACHE_WB | LIBQBLOCK_O_NO_FLUSH) + +#define LIBQBLOCK_O_VALID_MASK \ + (LIBQBLOCK_O_RDWR | LIBQBLOCK_O_NOCACHE | LIBQBLOCK_O_CACHE_WB | \ + LIBQBLOCK_O_NO_BACKING | LIBQBLOCK_O_NO_FLUSH) + +enum QBlockProtocol { + QB_PROTO_NONE = 0, + QB_PROTO_FILE, + QB_PROTO_MAX +}; + +enum QBlockFormat { + QB_FMT_NONE = 0, + QB_FMT_COW, + QB_FMT_QED, + QB_FMT_QCOW, + QB_FMT_QCOW2, + QB_FMT_RAW, + QB_FMT_RBD, + QB_FMT_SHEEPDOG, + QB_FMT_VDI, + QB_FMT_VMDK, + QB_FMT_VPC, + QB_FMT_MAX +}; + +struct QBlockOption_prot_file { + char *filename; +}; + +union QBlockOption_prot { + struct QBlockOption_prot_file o_file; +}; + +/** + * struct QBlockOptionLoc: contains information about how to find the image + * + * @prot_type: protocol type, now only support FILE. + * @prot_op: protocol related options. + */ +struct QBlockOptionLoc { + enum QBlockProtocol prot_type; + union QBlockOption_prot prot_op; + uint8_t reserved[512]; +}; + +/* format related options */ +struct QBlockOption_fmt_cow { + size_t virt_size; + struct QBlockOptionLoc backing_loc; +}; + +struct QBlockOption_fmt_qed { + size_t virt_size; + struct QBlockOptionLoc backing_loc; + enum QBlockFormat backing_fmt; + size_t cluster_size; /* unit is bytes */ + size_t table_size; /* unit is clusters */ +}; + +struct QBlockOption_fmt_qcow { + size_t virt_size; + struct QBlockOptionLoc backing_loc; + bool encrypt; +}; + +/* "Compatibility level (0.10 or 1.1)" */ +enum QBlockOption_fmt_qcow2_cpt { + QBO_FMT_QCOW2_CPT_NONE = 0, + QBO_FMT_QCOW2_CPT_V010, + QBO_FMT_QCOW2_CPT_V110, +}; + +/* off or metadata */ +enum QBlockOption_fmt_qcow2_prealloc { + QBO_FMT_QCOW2_PREALLOC_NONE = 0, + QBO_FMT_QCOW2_PREALLOC_OFF, + QBO_FMT_QCOW2_PREALLOC_METADATA, +}; + +struct QBlockOption_fmt_qcow2 { + size_t virt_size; + struct QBlockOptionLoc backing_loc; + enum QBlockFormat backing_fmt; + bool encrypt; + size_t cluster_size; /* unit is bytes */ + enum QBlockOption_fmt_qcow2_cpt cpt_lv; + enum QBlockOption_fmt_qcow2_prealloc pre_mode; +}; + +struct QBlockOption_fmt_raw { + size_t virt_size; +}; + +struct QBlockOption_fmt_rbd { + size_t virt_size; + size_t cluster_size; +}; + +/* off or full */ +enum QBlockOption_fmt_sheepdog_prealloc { + QBO_FMT_SD_PREALLOC_NONE = 0, + QBO_FMT_SD_PREALLOC_OFF, + QBO_FMT_SD_PREALLOC_FULL, +}; + +struct QBlockOption_fmt_sheepdog { + size_t virt_size; + struct QBlockOptionLoc backing_loc; + enum QBlockOption_fmt_sheepdog_prealloc pre_mode; +}; + +enum QBlockOption_fmt_vdi_prealloc { + QBO_FMT_VDI_PREALLOC_NONE = 0, + QBO_FMT_VDI_PREALLOC_FALSE, + QBO_FMT_VDI_PREALLOC_TRUE, +}; + +struct QBlockOption_fmt_vdi { + size_t virt_size; + size_t cluster_size; + enum QBlockOption_fmt_vdi_prealloc pre_mode; +}; + +/* whether compact to vmdk verion 6 */ +enum QBlockOption_fmt_vmdk_cpt { + QBO_FMT_VMDK_CPT_NONE = 0, + QBO_FMT_VMDK_CPT_VMDKV6_FALSE, + QBO_FMT_VMDK_CPT_VMDKV6_TRUE, +}; + +/* vmdk flat extent format, values: +"{monolithicSparse (default) | monolithicFlat | twoGbMaxExtentSparse | +twoGbMaxExtentFlat | streamOptimized} */ +enum QBlockOption_fmt_vmdk_subfmt { + QBO_FMT_VMDK_SUBFMT_MONOLITHIC_NONE = 0, + QBO_FMT_VMDK_SUBFMT_MONOLITHIC_SPARSE, + QBO_FMT_VMDK_SUBFMT_MONOLITHIC_FLAT, + QBO_FMT_VMDK_SUBFMT_TWOGBMAX_EXTENT_SPARSE, + QBO_FMT_VMDK_SUBFMT_TWOGBMAX_EXTENT_FLAT, + QBO_FMT_VMDK_SUBFMT_STREAM_OPTIMIZED, +}; + +struct QBlockOption_fmt_vmdk { + size_t virt_size; + struct QBlockOptionLoc backing_loc; + enum QBlockOption_fmt_vmdk_cpt cpt_lv; + enum QBlockOption_fmt_vmdk_subfmt subfmt; +}; + +/* "{dynamic (default) | fixed} " */ +enum QBlockOption_fmt_vpc_subfmt { + QBO_FMT_VPC_SUBFMT_NONE = 0, + QBO_FMT_VPC_SUBFMT_DYNAMIC, + QBO_FMT_VPC_SUBFMT_FIXED, +}; + +struct QBlockOption_fmt_vpc { + size_t virt_size; + enum QBlockOption_fmt_vpc_subfmt subfmt; +}; + +union QBlockOption_fmt { + struct QBlockOption_fmt_cow o_cow; + struct QBlockOption_fmt_qed o_qed; + struct QBlockOption_fmt_qcow o_qcow; + struct QBlockOption_fmt_qcow2 o_qcow2; + struct QBlockOption_fmt_raw o_raw; + struct QBlockOption_fmt_rbd o_rbd; + struct QBlockOption_fmt_sheepdog o_sheepdog; + struct QBlockOption_fmt_vdi o_vdi; + struct QBlockOption_fmt_vmdk o_vmdk; + struct QBlockOption_fmt_vpc o_vpc; +}; + +struct QBlockOptionFormat { + enum QBlockFormat fmt_type; + union QBlockOption_fmt fmt_op; + uint8_t reserved[512]; +}; + +/** + * QBlockInfoImageStatic: information about the block image. + * + * @loc: location info. + * @fmt_type: format type. + * @virt_size: virtual size in bytes. + * @backing_loc: backing file location, its type is QB_PROT_NONE if not exist. + * @allocated_size: allocated size in bytes, negative if not available. + * @encrypt: encrypt flag. + */ +struct QBlockInfoImageStatic { + struct QBlockOptionLoc loc; + enum QBlockFormat fmt_type; + size_t virt_size; + /* advance info */ + struct QBlockOptionLoc backing_loc; + size_t allocated_size; + bool encrypt; +}; +#endif