libgeom.h revision 169305
1251886Speter/*- 2251886Speter * Copyright (c) 2003 Poul-Henning Kamp 3251886Speter * All rights reserved. 4251886Speter * 5251886Speter * Redistribution and use in source and binary forms, with or without 6251886Speter * modification, are permitted provided that the following conditions 7251886Speter * are met: 8251886Speter * 1. Redistributions of source code must retain the above copyright 9251886Speter * notice, this list of conditions and the following disclaimer. 10251886Speter * 2. Redistributions in binary form must reproduce the above copyright 11251886Speter * notice, this list of conditions and the following disclaimer in the 12251886Speter * documentation and/or other materials provided with the distribution. 13251886Speter * 3. The names of the authors may not be used to endorse or promote 14251886Speter * products derived from this software without specific prior written 15251886Speter * permission. 16251886Speter * 17251886Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18251886Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19251886Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20251886Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21251886Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22251886Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23251886Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24251886Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25251886Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26251886Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27251886Speter * SUCH DAMAGE. 28251886Speter * 29251886Speter * $FreeBSD: head/lib/libgeom/libgeom.h 169305 2007-05-06 10:00:27Z des $ 30251886Speter */ 31251886Speter#ifndef _LIBGEOM_H_ 32251886Speter#define _LIBGEOM_H_ 33251886Speter 34251886Speter#include <sys/cdefs.h> 35251886Speter 36251886Speter#include <sys/queue.h> 37251886Speter#include <sys/time.h> 38251886Speter 39251886Speter#include <geom/geom_ctl.h> 40251886Speter 41251886Speter__BEGIN_DECLS 42251886Speter 43251886Spetervoid geom_stats_close(void); 44251886Spetervoid geom_stats_resync(void); 45251886Speterint geom_stats_open(void); 46251886Spetervoid *geom_stats_snapshot_get(void); 47251886Spetervoid geom_stats_snapshot_free(void *); 48251886Spetervoid geom_stats_snapshot_timestamp(void *, struct timespec *); 49251886Spetervoid geom_stats_snapshot_reset(void *); 50251886Speterstruct devstat *geom_stats_snapshot_next(void *); 51251886Speter 52251886Speterchar *geom_getxml(void); 53251886Speter 54251886Speter/* geom_xml2tree.c */ 55251886Speter 56251886Speter/* 57251886Speter * These structs are used to build the tree based on the XML. 58251886Speter * they're named as the kernel variant without the first '_'. 59251886Speter */ 60251886Speter 61251886Speterstruct gclass; 62251886Speterstruct ggeom; 63251886Speterstruct gconsumer; 64251886Speterstruct gprovider; 65251886Speter 66251886SpeterLIST_HEAD(gconf, gconfig); 67251886Speter 68251886Speterstruct gident { 69251886Speter void *lg_id; 70251886Speter void *lg_ptr; 71251886Speter enum { ISCLASS, 72251886Speter ISGEOM, 73251886Speter ISPROVIDER, 74251886Speter ISCONSUMER } lg_what; 75251886Speter}; 76251886Speter 77251886Speterstruct gmesh { 78251886Speter LIST_HEAD(, gclass) lg_class; 79251886Speter struct gident *lg_ident; 80251886Speter}; 81251886Speter 82251886Speterstruct gconfig { 83251886Speter LIST_ENTRY(gconfig) lg_config; 84251886Speter char *lg_name; 85251886Speter char *lg_val; 86251886Speter}; 87251886Speter 88251886Speterstruct gclass { 89251886Speter void *lg_id; 90251886Speter char *lg_name; 91251886Speter LIST_ENTRY(gclass) lg_class; 92251886Speter LIST_HEAD(, ggeom) lg_geom; 93251886Speter struct gconf lg_config; 94251886Speter}; 95251886Speter 96251886Speterstruct ggeom { 97251886Speter void *lg_id; 98251886Speter struct gclass *lg_class; 99251886Speter char *lg_name; 100251886Speter u_int lg_rank; 101251886Speter LIST_ENTRY(ggeom) lg_geom; 102251886Speter LIST_HEAD(, gconsumer) lg_consumer; 103251886Speter LIST_HEAD(, gprovider) lg_provider; 104251886Speter struct gconf lg_config; 105251886Speter}; 106251886Speter 107251886Speterstruct gconsumer { 108289166Speter void *lg_id; 109251886Speter struct ggeom *lg_geom; 110251886Speter LIST_ENTRY(gconsumer) lg_consumer; 111251886Speter struct gprovider *lg_provider; 112251886Speter LIST_ENTRY(gconsumer) lg_consumers; 113251886Speter char *lg_mode; 114251886Speter struct gconf lg_config; 115251886Speter}; 116251886Speter 117289166Speterstruct gprovider { 118251886Speter void *lg_id; 119251886Speter char *lg_name; 120251886Speter struct ggeom *lg_geom; 121251886Speter LIST_ENTRY(gprovider) lg_provider; 122289166Speter LIST_HEAD(, gconsumer) lg_consumers; 123289166Speter char *lg_mode; 124289166Speter off_t lg_mediasize; 125251886Speter u_int lg_sectorsize; 126251886Speter struct gconf lg_config; 127251886Speter}; 128251886Speter 129251886Speterstruct gident * geom_lookupid(struct gmesh *, const void *); 130251886Speterint geom_xml2tree(struct gmesh *, char *); 131251886Speterint geom_gettree(struct gmesh *); 132251886Spetervoid geom_deletetree(struct gmesh *); 133251886Speter 134251886Speter/* geom_ctl.c */ 135289166Speter 136251886Speterstruct gctl_req; 137251886Speter 138289166Speter#ifdef _STDIO_H_ /* limit #include pollution */ 139251886Spetervoid gctl_dump(struct gctl_req *, FILE *); 140251886Speter#endif 141251886Spetervoid gctl_free(struct gctl_req *); 142251886Speterstruct gctl_req *gctl_get_handle(void); 143251886Speterconst char *gctl_issue(struct gctl_req *); 144251886Spetervoid gctl_ro_param(struct gctl_req *, const char *, int, const void *); 145251886Spetervoid gctl_rw_param(struct gctl_req *, const char *, int, void *); 146251886Speter 147251886Speter/* geom_util.c */ 148251886Speterint g_open(const char *, int); 149251886Speterint g_close(int); 150251886Speteroff_t g_mediasize(int); 151251886Speterssize_t g_sectorsize(int); 152251886Speterint g_flush(int); 153251886Speterint g_delete(int, off_t, off_t); 154251886Speterint g_get_ident(int, char *, size_t); 155251886Speterint g_get_name(const char *, char *, size_t); 156251886Speterint g_open_by_ident(const char *, int, char *, size_t); 157251886Speter 158251886Speter__END_DECLS 159289166Speter 160251886Speter#endif /* _LIBGEOM_H_ */ 161251886Speter