1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Xenomai API: ksrc/skins/posix/registry.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.6 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
<li>
<form action="search.php" method="get">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td><label> <u>S</u>earch for </label></td>
<td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
</tr>
</table>
</form>
</li>
</ul>
</div>
<h1>ksrc/skins/posix/registry.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef PSE51_REGISTRY_H</span>
<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define PSE51_REGISTRY_H</span>
<a name="l00003"></a>00003 <span class="preprocessor"></span>
<a name="l00004"></a>00004 <span class="preprocessor">#include <stdarg.h></span>
<a name="l00005"></a>00005 <span class="preprocessor">#include <nucleus/queue.h></span>
<a name="l00006"></a>00006 <span class="preprocessor">#include <nucleus/synch.h></span>
<a name="l00007"></a>00007 <span class="preprocessor">#include <posix/posix.h></span>
<a name="l00008"></a>00008
<a name="l00009"></a>00009 <span class="preprocessor">#define PSE51_MAXNAME 64</span>
<a name="l00010"></a>00010 <span class="preprocessor"></span>
<a name="l00011"></a>00011 <span class="comment">/* A pse51_node_t is the holder to be added to each object which needs to be put</span>
<a name="l00012"></a>00012 <span class="comment"> in the registry. */</span>
<a name="l00013"></a>00013 <span class="keyword">typedef</span> <span class="keyword">struct </span>pse51_node {
<a name="l00014"></a>00014 <span class="keywordtype">unsigned</span> magic;
<a name="l00015"></a>00015 <span class="keywordtype">unsigned</span> flags; <span class="comment">/* PSE51_NODE_PARTIAL_INIT. */</span>
<a name="l00016"></a>00016 <span class="keywordtype">unsigned</span> refcount;
<a name="l00017"></a>00017 <span class="comment">/* pse51_unlink_t *dest_hook; */</span>
<a name="l00018"></a>00018
<a name="l00019"></a>00019 <span class="keyword">struct </span>pse51_node *next;
<a name="l00020"></a>00020 <span class="keyword">struct </span>pse51_node **prev;
<a name="l00021"></a>00021 <span class="keywordtype">char</span> name[PSE51_MAXNAME];
<a name="l00022"></a>00022 } pse51_node_t;
<a name="l00023"></a>00023
<a name="l00024"></a>00024 <span class="keywordtype">int</span> pse51_reg_pkg_init(<span class="keywordtype">unsigned</span> objects_count, <span class="keywordtype">unsigned</span> maxfds);
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="keywordtype">void</span> pse51_reg_pkg_cleanup(<span class="keywordtype">void</span>);
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="comment">/* Get an existing node: oflags are POSIX open style flags.</span>
<a name="l00029"></a>00029 <span class="comment"> If 0 is returned and (*nodep) is NULL, then a new node should be added</span>
<a name="l00030"></a>00030 <span class="comment"> with node_add. */</span>
<a name="l00031"></a>00031 <span class="keywordtype">int</span> pse51_node_get(pse51_node_t **nodep,
<a name="l00032"></a>00032 <span class="keyword">const</span> <span class="keywordtype">char</span> *name,
<a name="l00033"></a>00033 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> magic,
<a name="l00034"></a>00034 <span class="keywordtype">long</span> oflags);
<a name="l00035"></a>00035
<a name="l00036"></a>00036 <span class="comment">/* bind a node. */</span>
<a name="l00037"></a>00037 <span class="keywordtype">int</span> pse51_node_add(pse51_node_t *node, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> magic);
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="comment">/* Any successful call to node_get or node_add need to be paired with a call</span>
<a name="l00040"></a>00040 <span class="comment"> node_put before a node may be unlinked. */</span>
<a name="l00041"></a>00041 <span class="keywordtype">int</span> pse51_node_put(pse51_node_t *node);
<a name="l00042"></a>00042
<a name="l00043"></a>00043 <span class="comment">/* Remove the binding of a node to its name, if the node is still referenced,</span>
<a name="l00044"></a>00044 <span class="comment"> real destruction is deferred until the last call to node_put. */</span>
<a name="l00045"></a>00045 <span class="keywordtype">int</span> pse51_node_remove(pse51_node_t **nodep, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> magic);
<a name="l00046"></a>00046
<a name="l00047"></a>00047 <span class="preprocessor">#define PSE51_NODE_REMOVED 1</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
<a name="l00049"></a>00049 <span class="preprocessor">#define pse51_node_ref_p(node) ((node)->refcount)</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span>
<a name="l00051"></a>00051 <span class="preprocessor">#define pse51_node_removed_p(node) \</span>
<a name="l00052"></a>00052 <span class="preprocessor"> ((node)->flags & PSE51_NODE_REMOVED && !pse51_node_ref_p(node))</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>
<a name="l00054"></a>00054 <span class="comment">/* A pse51_desc_t is the structure associated with a descriptor. */</span>
<a name="l00055"></a>00055 <span class="keyword">typedef</span> <span class="keyword">struct </span>pse51_desc {
<a name="l00056"></a>00056 pse51_node_t *node;
<a name="l00057"></a>00057 <span class="keywordtype">long</span> flags;
<a name="l00058"></a>00058 <span class="keywordtype">int</span> fd;
<a name="l00059"></a>00059 } pse51_desc_t;
<a name="l00060"></a>00060
<a name="l00061"></a>00061 <span class="keywordtype">int</span> pse51_desc_create(pse51_desc_t **descp, pse51_node_t *node, <span class="keywordtype">long</span> flags);
<a name="l00062"></a>00062
<a name="l00063"></a>00063 <span class="keywordtype">int</span> pse51_desc_get(pse51_desc_t **descp, <span class="keywordtype">int</span> fd, <span class="keywordtype">unsigned</span> magic);
<a name="l00064"></a>00064
<a name="l00065"></a>00065 <span class="keywordtype">int</span> pse51_desc_destroy(pse51_desc_t *desc);
<a name="l00066"></a>00066
<a name="l00067"></a>00067 <span class="preprocessor">#define pse51_desc_setflags(desc, fl) ((desc)->flags = (fl))</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span>
<a name="l00069"></a>00069 <span class="preprocessor">#define pse51_desc_getflags(desc) ((desc)->flags)</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span>
<a name="l00071"></a>00071 <span class="preprocessor">#define pse51_desc_node(desc) ((desc)->node)</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a>00073 <span class="preprocessor">#define pse51_desc_fd(desc) ((desc)->fd)</span>
<a name="l00074"></a>00074 <span class="preprocessor"></span>
<a name="l00075"></a>00075 <span class="preprocessor">#define PSE51_PERMS_MASK (O_RDONLY | O_WRONLY | O_RDWR)</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a>00077
<a name="l00078"></a>00078 <span class="comment">/* Associative lists, used for association of user-space to kernel-space</span>
<a name="l00079"></a>00079 <span class="comment"> objects. */</span>
<a name="l00080"></a>00080 <span class="preprocessor">#ifdef CONFIG_XENO_OPT_PERVASIVE</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="keyword">struct </span>mm_struct;
<a name="l00082"></a>00082
<a name="l00083"></a>00083 DECLARE_EXTERN_XNLOCK(pse51_assoc_lock);
<a name="l00084"></a>00084
<a name="l00085"></a>00085 <span class="keyword">typedef</span> xnqueue_t pse51_assocq_t;
<a name="l00086"></a>00086
<a name="l00087"></a>00087 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00088"></a>00088 u_long key;
<a name="l00089"></a>00089 xnholder_t link;
<a name="l00090"></a>00090
<a name="l00091"></a>00091 <span class="preprocessor">#define link2assoc(laddr) \</span>
<a name="l00092"></a>00092 <span class="preprocessor"> ((pse51_assoc_t *)((unsigned long)(laddr) - offsetof(pse51_assoc_t, link)))</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094 } pse51_assoc_t;
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00097"></a>00097 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kfd;
<a name="l00098"></a>00098 pse51_assoc_t assoc;
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="preprocessor">#define assoc2ufd(laddr) \</span>
<a name="l00101"></a>00101 <span class="preprocessor"> ((pse51_ufd_t *)((unsigned long) (laddr) - offsetof(pse51_ufd_t, assoc)))</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>} pse51_ufd_t;
<a name="l00103"></a>00103
<a name="l00104"></a>00104 <span class="preprocessor">#define pse51_assocq_init(q) (initq(q))</span>
<a name="l00105"></a>00105 <span class="preprocessor"></span>
<a name="l00106"></a>00106 <span class="preprocessor">#define pse51_assoc_key(assoc) ((assoc)->key)</span>
<a name="l00107"></a>00107 <span class="preprocessor"></span>
<a name="l00108"></a>00108 <span class="keywordtype">void</span> pse51_assocq_destroy(pse51_assocq_t *q, <span class="keywordtype">void</span> (*destroy)(pse51_assoc_t *));
<a name="l00109"></a>00109
<a name="l00110"></a>00110 <span class="keywordtype">int</span> pse51_assoc_insert(pse51_assocq_t *q,
<a name="l00111"></a>00111 pse51_assoc_t *assoc,
<a name="l00112"></a>00112 u_long key);
<a name="l00113"></a>00113
<a name="l00114"></a>00114 pse51_assoc_t *pse51_assoc_lookup(pse51_assocq_t *q,
<a name="l00115"></a>00115 u_long key);
<a name="l00116"></a>00116
<a name="l00117"></a>00117 pse51_assoc_t *pse51_assoc_remove(pse51_assocq_t *q,
<a name="l00118"></a>00118 u_long key);
<a name="l00119"></a>00119 <span class="preprocessor">#endif </span><span class="comment">/* CONFIG_XENO_OPT_PERVASIVE */</span>
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <span class="preprocessor">#endif </span><span class="comment">/* PSE51_REGISTRY_H */</span>
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Mon Aug 2 12:48:36 2010 for Xenomai API by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
|