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