1e13db587SPoul-Henning Kamp /*- 2*eb8f8877SWarner Losh * SPDX-License-Identifier: BSD-3-Clause 35e53a4f9SPedro F. Giffuni * 4e13db587SPoul-Henning Kamp * Copyright (c) 2003 Poul-Henning Kamp 5e13db587SPoul-Henning Kamp * All rights reserved. 6e13db587SPoul-Henning Kamp * 7e13db587SPoul-Henning Kamp * Redistribution and use in source and binary forms, with or without 8e13db587SPoul-Henning Kamp * modification, are permitted provided that the following conditions 9e13db587SPoul-Henning Kamp * are met: 10e13db587SPoul-Henning Kamp * 1. Redistributions of source code must retain the above copyright 11e13db587SPoul-Henning Kamp * notice, this list of conditions and the following disclaimer. 12e13db587SPoul-Henning Kamp * 2. Redistributions in binary form must reproduce the above copyright 13e13db587SPoul-Henning Kamp * notice, this list of conditions and the following disclaimer in the 14e13db587SPoul-Henning Kamp * documentation and/or other materials provided with the distribution. 15e13db587SPoul-Henning Kamp * 3. The names of the authors may not be used to endorse or promote 16e13db587SPoul-Henning Kamp * products derived from this software without specific prior written 17e13db587SPoul-Henning Kamp * permission. 18e13db587SPoul-Henning Kamp * 19e13db587SPoul-Henning Kamp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20e13db587SPoul-Henning Kamp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21e13db587SPoul-Henning Kamp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22e13db587SPoul-Henning Kamp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23e13db587SPoul-Henning Kamp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24e13db587SPoul-Henning Kamp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25e13db587SPoul-Henning Kamp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26e13db587SPoul-Henning Kamp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27e13db587SPoul-Henning Kamp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28e13db587SPoul-Henning Kamp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29e13db587SPoul-Henning Kamp * SUCH DAMAGE. 30e13db587SPoul-Henning Kamp * 31e13db587SPoul-Henning Kamp * $FreeBSD$ 32e13db587SPoul-Henning Kamp */ 33e13db587SPoul-Henning Kamp #ifndef _LIBGEOM_H_ 34e13db587SPoul-Henning Kamp #define _LIBGEOM_H_ 35e13db587SPoul-Henning Kamp 36ccac9da4SJohn Baldwin #include <sys/cdefs.h> 37ccac9da4SJohn Baldwin 387bd4e7b4SPoul-Henning Kamp #include <sys/queue.h> 39ba798fb2SPoul-Henning Kamp #include <sys/time.h> 40e13db587SPoul-Henning Kamp 414b8938c1SPoul-Henning Kamp #include <geom/geom_ctl.h> 424b8938c1SPoul-Henning Kamp 43ccac9da4SJohn Baldwin __BEGIN_DECLS 44ccac9da4SJohn Baldwin 45748e404fSScott Long #ifndef DEBUG_LIBGEOM 46748e404fSScott Long #define DEBUG_LIBGEOM 0 47748e404fSScott Long #endif 48748e404fSScott Long 49e13db587SPoul-Henning Kamp void geom_stats_close(void); 50e13db587SPoul-Henning Kamp void geom_stats_resync(void); 51e13db587SPoul-Henning Kamp int geom_stats_open(void); 52e13db587SPoul-Henning Kamp void *geom_stats_snapshot_get(void); 535f145b19SDag-Erling Smørgrav void geom_stats_snapshot_free(void *); 545f145b19SDag-Erling Smørgrav void geom_stats_snapshot_timestamp(void *, struct timespec *); 555f145b19SDag-Erling Smørgrav void geom_stats_snapshot_reset(void *); 565f145b19SDag-Erling Smørgrav struct devstat *geom_stats_snapshot_next(void *); 57e13db587SPoul-Henning Kamp 587bd4e7b4SPoul-Henning Kamp char *geom_getxml(void); 597f16b501SAlexander Motin char *geom_getxml_geom(const char *, const char *, int); 607bd4e7b4SPoul-Henning Kamp 617bd4e7b4SPoul-Henning Kamp /* geom_xml2tree.c */ 627bd4e7b4SPoul-Henning Kamp 637bd4e7b4SPoul-Henning Kamp /* 647bd4e7b4SPoul-Henning Kamp * These structs are used to build the tree based on the XML. 657bd4e7b4SPoul-Henning Kamp * they're named as the kernel variant without the first '_'. 667bd4e7b4SPoul-Henning Kamp */ 677bd4e7b4SPoul-Henning Kamp 687bd4e7b4SPoul-Henning Kamp struct gclass; 697bd4e7b4SPoul-Henning Kamp struct ggeom; 707bd4e7b4SPoul-Henning Kamp struct gconsumer; 717bd4e7b4SPoul-Henning Kamp struct gprovider; 727bd4e7b4SPoul-Henning Kamp 737bd4e7b4SPoul-Henning Kamp LIST_HEAD(gconf, gconfig); 747bd4e7b4SPoul-Henning Kamp 757bd4e7b4SPoul-Henning Kamp struct gident { 76ccac9da4SJohn Baldwin void *lg_id; 77ccac9da4SJohn Baldwin void *lg_ptr; 787bd4e7b4SPoul-Henning Kamp enum { ISCLASS, 797bd4e7b4SPoul-Henning Kamp ISGEOM, 807bd4e7b4SPoul-Henning Kamp ISPROVIDER, 81019100deSJuli Mallett ISCONSUMER } lg_what; 827bd4e7b4SPoul-Henning Kamp }; 837bd4e7b4SPoul-Henning Kamp 847bd4e7b4SPoul-Henning Kamp struct gmesh { 85ccac9da4SJohn Baldwin LIST_HEAD(, gclass) lg_class; 86ccac9da4SJohn Baldwin struct gident *lg_ident; 877bd4e7b4SPoul-Henning Kamp }; 887bd4e7b4SPoul-Henning Kamp 897bd4e7b4SPoul-Henning Kamp struct gconfig { 90ccac9da4SJohn Baldwin LIST_ENTRY(gconfig) lg_config; 91ccac9da4SJohn Baldwin char *lg_name; 92ccac9da4SJohn Baldwin char *lg_val; 937bd4e7b4SPoul-Henning Kamp }; 947bd4e7b4SPoul-Henning Kamp 957bd4e7b4SPoul-Henning Kamp struct gclass { 96ccac9da4SJohn Baldwin void *lg_id; 97ccac9da4SJohn Baldwin char *lg_name; 98ccac9da4SJohn Baldwin LIST_ENTRY(gclass) lg_class; 99ccac9da4SJohn Baldwin LIST_HEAD(, ggeom) lg_geom; 100ccac9da4SJohn Baldwin struct gconf lg_config; 1017bd4e7b4SPoul-Henning Kamp }; 1027bd4e7b4SPoul-Henning Kamp 1037bd4e7b4SPoul-Henning Kamp struct ggeom { 104ccac9da4SJohn Baldwin void *lg_id; 105ccac9da4SJohn Baldwin struct gclass *lg_class; 106ccac9da4SJohn Baldwin char *lg_name; 107ccac9da4SJohn Baldwin u_int lg_rank; 108ccac9da4SJohn Baldwin LIST_ENTRY(ggeom) lg_geom; 109ccac9da4SJohn Baldwin LIST_HEAD(, gconsumer) lg_consumer; 110ccac9da4SJohn Baldwin LIST_HEAD(, gprovider) lg_provider; 111ccac9da4SJohn Baldwin struct gconf lg_config; 1127bd4e7b4SPoul-Henning Kamp }; 1137bd4e7b4SPoul-Henning Kamp 1147bd4e7b4SPoul-Henning Kamp struct gconsumer { 115ccac9da4SJohn Baldwin void *lg_id; 116ccac9da4SJohn Baldwin struct ggeom *lg_geom; 117ccac9da4SJohn Baldwin LIST_ENTRY(gconsumer) lg_consumer; 118ccac9da4SJohn Baldwin struct gprovider *lg_provider; 119ccac9da4SJohn Baldwin LIST_ENTRY(gconsumer) lg_consumers; 120ccac9da4SJohn Baldwin char *lg_mode; 121ccac9da4SJohn Baldwin struct gconf lg_config; 1227bd4e7b4SPoul-Henning Kamp }; 1237bd4e7b4SPoul-Henning Kamp 1247bd4e7b4SPoul-Henning Kamp struct gprovider { 125ccac9da4SJohn Baldwin void *lg_id; 126ccac9da4SJohn Baldwin char *lg_name; 127ccac9da4SJohn Baldwin struct ggeom *lg_geom; 128ccac9da4SJohn Baldwin LIST_ENTRY(gprovider) lg_provider; 129ccac9da4SJohn Baldwin LIST_HEAD(, gconsumer) lg_consumers; 130ccac9da4SJohn Baldwin char *lg_mode; 131ccac9da4SJohn Baldwin off_t lg_mediasize; 132ccac9da4SJohn Baldwin u_int lg_sectorsize; 13335daa28fSXin LI off_t lg_stripeoffset; 13435daa28fSXin LI off_t lg_stripesize; 135ccac9da4SJohn Baldwin struct gconf lg_config; 1367bd4e7b4SPoul-Henning Kamp }; 1377bd4e7b4SPoul-Henning Kamp 1385f145b19SDag-Erling Smørgrav struct gident * geom_lookupid(struct gmesh *, const void *); 1395f145b19SDag-Erling Smørgrav int geom_xml2tree(struct gmesh *, char *); 1405f145b19SDag-Erling Smørgrav int geom_gettree(struct gmesh *); 1417f16b501SAlexander Motin int geom_gettree_geom(struct gmesh *, const char *, const char *, int); 1425f145b19SDag-Erling Smørgrav void geom_deletetree(struct gmesh *); 1437bd4e7b4SPoul-Henning Kamp 1444b8938c1SPoul-Henning Kamp /* geom_ctl.c */ 1454b8938c1SPoul-Henning Kamp 14663728c47SPoul-Henning Kamp struct gctl_req; 1474b8938c1SPoul-Henning Kamp 1484b8938c1SPoul-Henning Kamp #ifdef _STDIO_H_ /* limit #include pollution */ 1495f145b19SDag-Erling Smørgrav void gctl_dump(struct gctl_req *, FILE *); 1504b8938c1SPoul-Henning Kamp #endif 1515f145b19SDag-Erling Smørgrav void gctl_free(struct gctl_req *); 1527e02e189SPoul-Henning Kamp struct gctl_req *gctl_get_handle(void); 1535f145b19SDag-Erling Smørgrav const char *gctl_issue(struct gctl_req *); 1542117cdd4SAlexander Motin void gctl_add_param(struct gctl_req *req, const char *name, int len, 1552117cdd4SAlexander Motin void *value, int flag); 1565f145b19SDag-Erling Smørgrav void gctl_ro_param(struct gctl_req *, const char *, int, const void *); 1575f145b19SDag-Erling Smørgrav void gctl_rw_param(struct gctl_req *, const char *, int, void *); 1584b8938c1SPoul-Henning Kamp 159fbda685dSPawel Jakub Dawidek /* geom_util.c */ 1605f145b19SDag-Erling Smørgrav int g_open(const char *, int); 1615f145b19SDag-Erling Smørgrav int g_close(int); 1625f145b19SDag-Erling Smørgrav off_t g_mediasize(int); 1635f145b19SDag-Erling Smørgrav ssize_t g_sectorsize(int); 16435daa28fSXin LI off_t g_stripeoffset(int); 16535daa28fSXin LI off_t g_stripesize(int); 1665f145b19SDag-Erling Smørgrav int g_flush(int); 1675f145b19SDag-Erling Smørgrav int g_delete(int, off_t, off_t); 1685f145b19SDag-Erling Smørgrav int g_get_ident(int, char *, size_t); 1695f145b19SDag-Erling Smørgrav int g_get_name(const char *, char *, size_t); 1705f145b19SDag-Erling Smørgrav int g_open_by_ident(const char *, int, char *, size_t); 171f805f204SUlf Lilleengen char *g_device_path(const char *); 172f805f204SUlf Lilleengen char *g_providername(int); 173fbda685dSPawel Jakub Dawidek 174ccac9da4SJohn Baldwin __END_DECLS 175ccac9da4SJohn Baldwin 176e13db587SPoul-Henning Kamp #endif /* _LIBGEOM_H_ */ 177