Provided by: freebsd-manpages_6.2-1_all bug
 

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 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:
 
            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 * name
                    Class name.
 
            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).
 
            g_config_t * config
                    This field is not used anymore, its functionality 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 after class reg‐
                    istration.
 
            g_fini_t * fini
                    Pointer to function which is called right before class
                    deregistration.
 
            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 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);
      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_wither_geom(9)
 

AUTHORS

      This manual page was written by Pawel Jakub Dawidek 〈pjd@FreeBSD.org〉.