Kernel Functions for Drivers ldi_ev_finalize(9F)
NAME
ldi_ev_finalize - propagate disposition of a state change
eventSYNOPSIS
#include
void ldi_ev_finalize(dev_info_t *dip, minor_t minor, int spec_type,
int ldi_result, ldi_ev_cookie_t cookie, void *ev_data);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI)PARAMETERS
dev_info_t *dip
The devinfo node of the layered consumer exporting the minor device.minor_t minor
The minor number of the exported minor device.int spec_type
The type of minor device (S_IFCHR or S_IFBLK).
int ldi_result
The final disposition of the state change.ldi_ev_cookie_t cookie
An opaque event cookie for the event type returned by aprevious call to ldi_ev_get_cookie(9F).
void *ev_data
Event specific data.DESCRIPTION
The ldi_ev_finalize() function propagates the final disposi-
tion of an event up the software stack. It may result in two actions:SunOS 5.11 Last change: 21 Aug 2007 1
Kernel Functions for Drivers ldi_ev_finalize(9F)
o Invocation of "finalize" LDI callback handlers registered by layered drivers up the software stack.o Device contract "negotiation end" (CT_EV_NEGEND)
events generated on minors exported to userland. The event propagated up the software stack may be different than the event received by the layered driver invokingldi_ev_finalize(). For example, a volume manager may receive
an "offline" event on one of it's LDI opened disks, but may choose to propagate a "degraded" event on minors it exports to userland (since it may have more than one copy of thedata). The event cookie argument to ldi_ev_notify(9F) may be
different from the event cookie currently possessed by the layered driver. If that is the case, the layered driver must generate another event cookie via a newldi_ev_get_cookie(9F) call.
RETURN VALUES
None.CONTEXT
This function can be called from user and kernel contexts only.EXAMPLES
Example 1 Invoking ldi_ev_finalize(9F) from widget's final-
ize callbackThe following example shows how the ldi_ev_finalize() func-
tion is invoked from a widget's finalize callback: static voidwidget_finalize(ldi_handle_t lh, ldi_ev_cookie_t foo_cookie,
int ldi_result, void *arg, void *ev_data)
{ASSERT(strcmp(ldi_ev_get_type(foo_cookie), LDI_EV_FOO) == 0);
/* Map imported minor to exported minors */widget_map(lh, &minor, &spec_type);
if (ldi_result == LDI_EV_SUCCESS) {
ldi_ev_finalize(dip, minor, spec_type,
LDI_EV_SUCCESS, foo_cookie, ev_data);
} /*SunOS 5.11 Last change: 21 Aug 2007 2
Kernel Functions for Drivers ldi_ev_finalize(9F)
* The event foo failed. Reconfigure yourself * *before* propagating */widget_reconfigure(lh, LDI_EV_FOO, REACQUIRE);
ldi_ev_finalize(dip, minor, spec_type, LDI_EV_FAILURE,
foo_cookie, ev_data);
}SEE ALSO
ldi_ev_get_cookie(9F), ldi_ev_register_callbacks(9F),
ldi_ev_remove_callbacks(9F)
SunOS 5.11 Last change: 21 Aug 2007 3