Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / docs / mmi / mmi_register_interface_cb.html
<html>
<head>
<title>SPARC Architectural Model: Device and Utility API</title>
</head>
<body bgcolor="#FFFFFF" LANG="en-US">
&nbsp;
<h2>
mmi_register_interface_cb</h2>
<h4>
NAME</h4>
<ul>mmi_register_interface_cb - Register interface callback</ul>
<h4>
SYNOPSIS</h4>
<ul>
<font color="#0000FF">#include "mmi.h"</font>
<p>typedef void * (*<i>fn_interface_cb</i>) (
void * <i>cb_data</i>,
const char *<i>interface_name</i>);
<p>bool_t mmi_register_interface_cb (module_t *<i>module</i>, fn_interface_cb <i>fn</i>);
</ul>
<h4>
DESCRIPTION</h4>
<ul>
Register <i>fn</i> callback for <i>module</i>.
This function is called via <b>mmi_get_interface()</b> from a client module.
</ul>
<ul>
The callback function examines <i>interface_name</i>, returning a corresponding interface pointer if it matches.
</ul>
<h4>
RETURN VALUES</h4>
<ul>Returns 0 for failure.</ul>
<h4>
ERRORS</h4>
<ul>Will fail if:</ul>
<ul><i>module</i> is invalid.</ul>
<h4>
USAGE</h4>
<ul>
<pre>
<tt>
// return pointer to interface
void *
Schizo::get_interface(const char *name)
{
if (!strcmp(name, SCHIZO_INTERFACE))
return this;
if (!strcmp(name, PCI_BUS_INTERFACE))
return (PciBusIf*)this;
if (!strcmp(name, PCI_DEV_INTERFACE))
return (PciDevIf*)this;
return NULL;
}
static void *schizo_get_interface(void *cb_data, const char *name)
{
Schizo *schizo = (Schizo *) cb_data;
return schizo-&gt;get_interface(name);
}
void
Schizo::register_interface_callback(module_t *instance)
{
mmi_register_cb_data(instance, this);
mmi_register_interface_cb(instance, schizo_get_interface);
}
</tt>
</pre>
</ul>
<h4>
SEE ALSO</h4>
<ul>
<a href="mmi_get_interface.html">mmi_get_interface</a>
</ul>
<h4>
WARNINGS</h4>
&nbsp;
</body>
</html>