declare_geom_class(9)
NAME
DECLARE_GEOM_CLASS - GEOM class declaration macro
SYNOPSIS
#include <geom/geom.h>
DECLARE_GEOM_CLASS(class, mod_name);
DESCRIPTION
- The DECLARE_GEOM_CLASS() macro registers a GEOM class in GE
- OM. A GEOM
class itself implements one particular kind of transforma - tion. Typical
examples are: MBR disk partition, BSD disklabel and RAID5 - classes.
DECLARE_GEOM_CLASS() can be used both for compiled in and - loaded as
kld(4) modules GEOM classes and it is the only official way - for class
registration. - The arguments to DECLARE_GEOM_CLASS() are:
class The g_class structure which describes a- GEOM class.
- mod_name A kernel module name (not a class
- name!).
- Structure g_class contains data describing the class. They
- are:
const char * nameClass name.- g_taste_t * taste
- Pointer to function used for taste event han
- dling. If it
is non-NULL it is called in three situations: - - On class activation, all existing
- providers are offered
for tasting.
- - When new provider is created it is offered
- for tasting.
- After last write access to a provider is - closed it is
offered for retasting (on first write openevent
``spoil'' was sent). - g_config_t * config
- This field is not used anymore, its function
- ality was
replaced by the ctlreq field. - g_ctl_req_t * ctlreq
- Pointer to function used for handling events
- from userland
applications. - g_init_t * init
- Pointer to function which is called right af
- ter class registration.
- g_fini_t * fini
- Pointer to function which is called right be
- fore class
deregistration. - g_ctl_destroy_geom_t * destroy_geom
- Pointer to a function which is called for ev
- ery geom on
class unload. If this field is not set, the - class can not
be unloaded. - Only a name field is required; the rest are optional.
RESTRICTIONS/CONDITIONS
- The fields of g_class should always be initialized using
- C99-style field
naming (see the initialization of example_class below).
EXAMPLES
- Example class declaration.
- static struct geom *
g_example_taste(struct g_class *mp, struct g_provider - *pp,
int flags __unused)
- {
g_topology_assert();[...]
- }
- static void
g_example_ctlreq(struct gctl_req *req, struct g_class - *cp,
char const *verb)
- {
[...] - }
- static int
g_example_destroy_geom(struct gctl_req *req, struct - g_class *cp,
struct g_geom *gp)
- {
g_topology_assert();[...] - }
- static void
g_example_init(struct g_class *mp)
{
[...] - }
- static void
g_example_fini(struct g_class *mp)
{
[...] - }
- struct g_class example_class = {
.name = "EXAMPLE",
.taste = g_example_taste,
.ctlreq = g_example_ctlreq,
.init = g_example_init,
.fini = g_example_fini,
.destroy_geom = g_example_destroy_geom - };
- DECLARE_GEOM_CLASS(example_class, g_example);
SEE ALSO
- geom(4), g_attach(9), g_bio(9), g_consumer(9), g_data(9),
- g_event(9),
g_geom(9), g_provider(9), g_provider_by_name(9), g_with - er_geom(9)
AUTHORS
- This manual page was written by Pawel Jakub Dawidek
- <pjd@FreeBSD.org>.
- BSD January 6, 2005