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 29ac03832eSConrad Meyer #define G_LLVM_DEBUG(lvl, ...) \ 30ac03832eSConrad Meyer _GEOM_DEBUG("GEOM_LINUX_LVM", g_llvm_debug, (lvl), NULL, __VA_ARGS__) 3113328753SAndrew Thompson 3213328753SAndrew Thompson #define G_LLVM_CLASS_NAME "LINUX_LVM" 3313328753SAndrew Thompson #define G_LLVM_NAMELEN 128 3413328753SAndrew Thompson #define G_LLVM_UUIDLEN 40 3513328753SAndrew Thompson #define G_LLVM_MAGIC "\040\114\126\115\062\040\170\133" \ 3613328753SAndrew Thompson "\065\101\045\162\060\116\052\076" 3713328753SAndrew Thompson 3813328753SAndrew Thompson struct g_llvm_label { 3913328753SAndrew Thompson uint64_t ll_sector; 4013328753SAndrew Thompson uint32_t ll_crc; 4113328753SAndrew Thompson uint32_t ll_offset; 4213328753SAndrew Thompson char ll_uuid[G_LLVM_UUIDLEN]; 4313328753SAndrew Thompson uint64_t ll_size; 4413328753SAndrew Thompson uint64_t ll_pestart; 4513328753SAndrew Thompson uint64_t ll_md_offset; 4613328753SAndrew Thompson uint64_t ll_md_size; 4713328753SAndrew Thompson }; 4813328753SAndrew Thompson 4913328753SAndrew Thompson struct g_llvm_metadata { 5013328753SAndrew Thompson uint32_t md_csum; 5113328753SAndrew Thompson uint32_t md_version; 5213328753SAndrew Thompson uint64_t md_start; 5313328753SAndrew Thompson uint64_t md_size; 5413328753SAndrew Thompson uint64_t md_reloffset; 5513328753SAndrew Thompson uint64_t md_relsize; 5613328753SAndrew Thompson struct g_llvm_vg *md_vg; 5713328753SAndrew Thompson }; 5813328753SAndrew Thompson 5913328753SAndrew Thompson struct g_llvm_lv { 6013328753SAndrew Thompson LIST_ENTRY(g_llvm_lv) lv_next; 6113328753SAndrew Thompson struct g_llvm_vg *lv_vg; 6213328753SAndrew Thompson char lv_name[G_LLVM_NAMELEN]; 6313328753SAndrew Thompson char lv_uuid[G_LLVM_UUIDLEN]; 6413328753SAndrew Thompson int lv_sgcount; 6513328753SAndrew Thompson int lv_sgactive; 6613328753SAndrew Thompson struct g_provider *lv_gprov; 6713328753SAndrew Thompson int lv_extentcount; 6813328753SAndrew Thompson LIST_HEAD(, g_llvm_segment) lv_segs; 6913328753SAndrew Thompson int lv_numsegs; 7013328753SAndrew Thompson struct g_llvm_segment *lv_firstsg; 7113328753SAndrew Thompson }; 7213328753SAndrew Thompson 7313328753SAndrew Thompson struct g_llvm_pv { 7413328753SAndrew Thompson LIST_ENTRY(g_llvm_pv) pv_next; 7513328753SAndrew Thompson struct g_llvm_vg *pv_vg; 7613328753SAndrew Thompson char pv_name[G_LLVM_NAMELEN]; 7713328753SAndrew Thompson char pv_uuid[G_LLVM_UUIDLEN]; 7813328753SAndrew Thompson size_t pv_size; 7913328753SAndrew Thompson off_t pv_start; 8013328753SAndrew Thompson int pv_count; 8113328753SAndrew Thompson struct g_provider *pv_gprov; 8213328753SAndrew Thompson struct g_consumer *pv_gcons; 8313328753SAndrew Thompson }; 8413328753SAndrew Thompson 8513328753SAndrew Thompson struct g_llvm_segment { 8613328753SAndrew Thompson LIST_ENTRY(g_llvm_segment) sg_next; 8713328753SAndrew Thompson int sg_start; 8813328753SAndrew Thompson int sg_end; 8913328753SAndrew Thompson int sg_count; 9013328753SAndrew Thompson char sg_pvname[G_LLVM_NAMELEN]; 9113328753SAndrew Thompson struct g_llvm_pv *sg_pv; 9213328753SAndrew Thompson int sg_pvstart; 9313328753SAndrew Thompson off_t sg_pvoffset; 9413328753SAndrew Thompson }; 9513328753SAndrew Thompson 9613328753SAndrew Thompson struct g_llvm_vg { 9713328753SAndrew Thompson LIST_ENTRY(g_llvm_vg) vg_next; 9813328753SAndrew Thompson char vg_name[G_LLVM_NAMELEN]; 9913328753SAndrew Thompson char vg_uuid[G_LLVM_UUIDLEN]; 10013328753SAndrew Thompson size_t vg_extentsize; 10113328753SAndrew Thompson int vg_sectorsize; 10213328753SAndrew Thompson struct g_geom *vg_geom; 10313328753SAndrew Thompson LIST_HEAD(, g_llvm_pv) vg_pvs; 10413328753SAndrew Thompson LIST_HEAD(, g_llvm_lv) vg_lvs; 10513328753SAndrew Thompson }; 106