The
DECLARE_GEOM_CLASS ();
macro registers a GEOM class in GEOM.
A GEOM class itself implements one particular kind of transformation.
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:
Fa class
The
Vt g_class
structure which describes a GEOM class.
Fa mod_name
A kernel module name (not a class name!).
Structure
Vt g_class
contains data describing the class.
They are:
Vt const char * name
Class name.
Vt g_taste_t * taste
Pointer to function used for taste event handling.
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 open event
``spoil''
was sent).
Vt g_config_t * config
This field is not used anymore, its functionality was replaced by the
ctlreq
field.
Vt g_ctl_req_t * ctlreq
Pointer to function used for handling events from userland applications.
Vt g_init_t * init
Pointer to function which is called right after class registration.
Vt g_fini_t * fini
Pointer to function which is called right before class deregistration.
Vt g_ctl_destroy_geom_t * destroy_geom
Pointer to a function which is called for every geom on class unload.
If this field is not set, the class can not be unloaded.
Only a
Fa name
field is required; the rest are optional.
RESTRICTIONS/CONDITIONS
The fields of
Vt g_class
should always be initialized using C99-style field naming
(see the initialization of
example_class
below).