Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.


CALLBACK(9)                Kernel Developer's Manual               CALLBACK(9)

NAME
     callback - generic callback interface

SYNOPSIS
     #include <sys/callback.h>

     void
     callback_head_init(struct callback_head *ch, int ipl);

     void
     callback_head_destroy(struct callback_head *ch);

     void
     callback_register(struct callback_head *ch, struct callback_entry *ce,
         void *obj, int (*fn)(struct callback_entry *, void *, void *));

     void
     callback_unregister(struct callback_head *ch, struct callback_entry *ce);

     int
     callback_run_roundrobin(struct callback_head *ch, void *arg);

DESCRIPTION
     The generic callback interface allows lower-level layer code to execute a
     registered function, or set of functions, from the higher-level layer.

     Registered functions must return one of these constants:

     CALLBACK_CHAIN_CONTINUE
                   Indicates that the function call was successful.  The
                   following functions in the chain will be called.

     CALLBACK_CHAIN_ABORT
                   Indicates a failure case in the function call.  Any
                   following functions in the chain will not be executed.

FUNCTIONS
     The callback structure callback_head should be initialized and destroyed
     using the functions described below.  This structure contains the list of
     callback entries and other internal data.

     The callback_entry structure is an entry, normally associated with the
     higher-level object.  It contains the internal data of the callback
     interface.

     callback_head_init(ch, ipl)
              Initialize the callback structure specified by ch.  The highest
              IPL at which this callback can be used is specified by ipl.

     callback_head_destroy(ch)
              Destroy the callback structure specified by ch.  The caller must
              unregister all functions before destroying the callback
              structure.

     callback_register(ch, ce, obj, fn)
              Register the callback function in the callback structure
              specified by ch.  ce should point to the entry structure of the
              callback object.  The callback object itself is specified by
              obj.  The function pointer is specified by fn.

     callback_unregister(ch, ce)
              Unregister the callback function from the structure specified by
              ch.  The entry should be passed as ce.  This function may block.

     callback_run_roundrobin(ch, arg)
              Executes all functions registered in the callback structure,
              specified by ch.  The functions are executed in round-robin
              fashion.  The value of arg will be passed to the callback
              functions.

CODE REFERENCES
     The callback interface is implemented within the file
     sys/kern/subr_callback.c.

SEE ALSO
     intro(9)

NetBSD 10.99                   October 28, 2009                   NetBSD 10.99