113328753SAndrew Thompson /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 33728855aSPedro F. Giffuni * 413328753SAndrew Thompson * Copyright (c) 2008 Andrew Thompson <thompsa@FreeBSD.org> 513328753SAndrew Thompson * All rights reserved. 613328753SAndrew Thompson * 713328753SAndrew Thompson * Redistribution and use in source and binary forms, with or without 813328753SAndrew Thompson * modification, are permitted provided that the following conditions 913328753SAndrew Thompson * are met: 1013328753SAndrew Thompson * 1. Redistributions of source code must retain the above copyright 1113328753SAndrew Thompson * notice, this list of conditions and the following disclaimer. 1213328753SAndrew Thompson * 2. Redistributions in binary form must reproduce the above copyright 1313328753SAndrew Thompson * notice, this list of conditions and the following disclaimer in the 1413328753SAndrew Thompson * documentation and/or other materials provided with the distribution. 1513328753SAndrew Thompson * 1613328753SAndrew Thompson * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 1713328753SAndrew Thompson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1813328753SAndrew Thompson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1913328753SAndrew Thompson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 2013328753SAndrew Thompson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2113328753SAndrew Thompson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2213328753SAndrew Thompson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2313328753SAndrew Thompson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2413328753SAndrew Thompson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2513328753SAndrew Thompson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2613328753SAndrew Thompson * SUCH DAMAGE. 2713328753SAndrew Thompson * 2813328753SAndrew Thompson * $FreeBSD$ 2913328753SAndrew Thompson */ 3013328753SAndrew Thompson 31ac03832eSConrad Meyer #define G_LLVM_DEBUG(lvl, ...) \ 32ac03832eSConrad Meyer _GEOM_DEBUG("GEOM_LINUX_LVM", g_llvm_debug, (lvl), NULL, __VA_ARGS__) 3313328753SAndrew Thompson 3413328753SAndrew Thompson #define G_LLVM_CLASS_NAME "LINUX_LVM" 3513328753SAndrew Thompson #define G_LLVM_NAMELEN 128 3613328753SAndrew Thompson #define G_LLVM_UUIDLEN 40 3713328753SAndrew Thompson #define G_LLVM_MAGIC "\040\114\126\115\062\040\170\133" \ 3813328753SAndrew Thompson "\065\101\045\162\060\116\052\076" 3913328753SAndrew Thompson 4013328753SAndrew Thompson struct g_llvm_label { 4113328753SAndrew Thompson uint64_t ll_sector; 4213328753SAndrew Thompson uint32_t ll_crc; 4313328753SAndrew Thompson uint32_t ll_offset; 4413328753SAndrew Thompson char ll_uuid[G_LLVM_UUIDLEN]; 4513328753SAndrew Thompson uint64_t ll_size; 4613328753SAndrew Thompson uint64_t ll_pestart; 4713328753SAndrew Thompson uint64_t ll_md_offset; 4813328753SAndrew Thompson uint64_t ll_md_size; 4913328753SAndrew Thompson }; 5013328753SAndrew Thompson 5113328753SAndrew Thompson struct g_llvm_metadata { 5213328753SAndrew Thompson uint32_t md_csum; 5313328753SAndrew Thompson uint32_t md_version; 5413328753SAndrew Thompson uint64_t md_start; 5513328753SAndrew Thompson uint64_t md_size; 5613328753SAndrew Thompson uint64_t md_reloffset; 5713328753SAndrew Thompson uint64_t md_relsize; 5813328753SAndrew Thompson struct g_llvm_vg *md_vg; 5913328753SAndrew Thompson }; 6013328753SAndrew Thompson 6113328753SAndrew Thompson struct g_llvm_lv { 6213328753SAndrew Thompson LIST_ENTRY(g_llvm_lv) lv_next; 6313328753SAndrew Thompson struct g_llvm_vg *lv_vg; 6413328753SAndrew Thompson char lv_name[G_LLVM_NAMELEN]; 6513328753SAndrew Thompson char lv_uuid[G_LLVM_UUIDLEN]; 6613328753SAndrew Thompson int lv_sgcount; 6713328753SAndrew Thompson int lv_sgactive; 6813328753SAndrew Thompson struct g_provider *lv_gprov; 6913328753SAndrew Thompson int lv_extentcount; 7013328753SAndrew Thompson LIST_HEAD(, g_llvm_segment) lv_segs; 7113328753SAndrew Thompson int lv_numsegs; 7213328753SAndrew Thompson struct g_llvm_segment *lv_firstsg; 7313328753SAndrew Thompson }; 7413328753SAndrew Thompson 7513328753SAndrew Thompson struct g_llvm_pv { 7613328753SAndrew Thompson LIST_ENTRY(g_llvm_pv) pv_next; 7713328753SAndrew Thompson struct g_llvm_vg *pv_vg; 7813328753SAndrew Thompson char pv_name[G_LLVM_NAMELEN]; 7913328753SAndrew Thompson char pv_uuid[G_LLVM_UUIDLEN]; 8013328753SAndrew Thompson size_t pv_size; 8113328753SAndrew Thompson off_t pv_start; 8213328753SAndrew Thompson int pv_count; 8313328753SAndrew Thompson struct g_provider *pv_gprov; 8413328753SAndrew Thompson struct g_consumer *pv_gcons; 8513328753SAndrew Thompson }; 8613328753SAndrew Thompson 8713328753SAndrew Thompson struct g_llvm_segment { 8813328753SAndrew Thompson LIST_ENTRY(g_llvm_segment) sg_next; 8913328753SAndrew Thompson int sg_start; 9013328753SAndrew Thompson int sg_end; 9113328753SAndrew Thompson int sg_count; 9213328753SAndrew Thompson char sg_pvname[G_LLVM_NAMELEN]; 9313328753SAndrew Thompson struct g_llvm_pv *sg_pv; 9413328753SAndrew Thompson int sg_pvstart; 9513328753SAndrew Thompson off_t sg_pvoffset; 9613328753SAndrew Thompson }; 9713328753SAndrew Thompson 9813328753SAndrew Thompson struct g_llvm_vg { 9913328753SAndrew Thompson LIST_ENTRY(g_llvm_vg) vg_next; 10013328753SAndrew Thompson char vg_name[G_LLVM_NAMELEN]; 10113328753SAndrew Thompson char vg_uuid[G_LLVM_UUIDLEN]; 10213328753SAndrew Thompson size_t vg_extentsize; 10313328753SAndrew Thompson int vg_sectorsize; 10413328753SAndrew Thompson struct g_geom *vg_geom; 10513328753SAndrew Thompson LIST_HEAD(, g_llvm_pv) vg_pvs; 10613328753SAndrew Thompson LIST_HEAD(, g_llvm_lv) vg_lvs; 10713328753SAndrew Thompson }; 108