Introduction   User API Reference   DSMlib Reference   IDL Interface   File List   Index  

dsmlib.h

Go to the documentation of this file.
00001 /* $Id: dsmlib.h 31603 2008-05-12 06:54:17Z adam $ */
00002 /*****************************************************************************/
00011 /*****************************************************************************/
00012 
00013 /* (c) 2003 Technische Universitaet Dresden
00014  * This file is part of DROPS, which is distributed under the terms of the
00015  * GNU General Public License 2. Please see the COPYING file for details.
00016  */
00017 
00018 #ifndef _L4_DM_GENERIC_DSMLIB_H
00019 #define _L4_DM_GENERIC_DSMLIB_H
00020 
00021 /* L4/L4Env includes */
00022 #include <l4/sys/types.h>
00023 #include <l4/env/cdefs.h>
00024 
00025 /* dm_generic includes */
00026 #include <l4/dm_generic/consts.h>
00027 #include <l4/dm_generic/types.h>
00028 
00029 /*****************************************************************************
00030  *** datatypes
00031  *****************************************************************************/
00032 
00037 typedef struct dsmlib_client_desc
00038 {
00039   l4_threadid_t               client;  
00040   l4_uint32_t                 rights;  
00041 
00042   struct dsmlib_client_desc * next;    
00043 } dsmlib_client_desc_t;
00044 
00049 typedef struct dsmlib_ds_desc
00050 {
00051   l4_uint32_t             id;          
00052   char                    name[L4DM_DS_NAME_MAX_LEN + 1]; 
00053   l4_threadid_t           owner;       
00054   dsmlib_client_desc_t *  clients;     
00055   void *                  dsm_ptr;     
00056 
00057   struct dsmlib_ds_desc * next;        
00058 
00059   struct dsmlib_ds_desc * ds_next;     
00060   struct dsmlib_ds_desc * ds_prev;     
00061 } dsmlib_ds_desc_t;
00062 
00067 typedef void (* dsmlib_iterator_fn_t) (dsmlib_ds_desc_t * ds, void * data);
00068 
00073 #define dsmlib_get_id(ds)     ((ds)->id)
00074 
00079 #define dsmlib_next_ds(ds)    ((ds)->ds_next)
00080 
00085 #define dsmlib_prev_ds(ds)    ((ds)->ds_prev)
00086 
00087 /*****************************************************************************
00088  *** Memory allocation
00089  *****************************************************************************/
00090 
00099 typedef L4_CV void * (* dsmlib_get_page_fn_t)(void ** data);
00100 
00105 typedef L4_CV void (* dsmlib_free_page_fn_t)(void * page, void * data);
00106 
00107 /*****************************************************************************
00108  *** public API
00109  *****************************************************************************/
00110 
00111 __BEGIN_DECLS;
00112 
00113 /*****************************************************************************/
00123 /*****************************************************************************/
00124 L4_CV int
00125 dsmlib_init(dsmlib_get_page_fn_t get_page_fn,
00126             dsmlib_free_page_fn_t free_page_fn);
00127 
00128 /*****************************************************************************/
00139 /*****************************************************************************/
00140 L4_CV dsmlib_ds_desc_t *
00141 dsmlib_create_dataspace(void);
00142 
00143 /*****************************************************************************/
00153 /*****************************************************************************/
00154 L4_CV void
00155 dsmlib_release_dataspace(dsmlib_ds_desc_t * ds);
00156 
00157 /*****************************************************************************/
00166 /*****************************************************************************/
00167 L4_CV dsmlib_ds_desc_t *
00168 dsmlib_get_dataspace(l4_uint32_t id);
00169 
00170 /*****************************************************************************/
00178 /*****************************************************************************/
00179 L4_CV void
00180 dsmlib_set_owner(dsmlib_ds_desc_t * ds, l4_threadid_t owner);
00181 
00182 /*****************************************************************************/
00191 /*****************************************************************************/
00192 L4_CV l4_threadid_t
00193 dsmlib_get_owner(const dsmlib_ds_desc_t * ds);
00194 
00195 /*****************************************************************************/
00205 /*****************************************************************************/
00206 L4_CV int
00207 dsmlib_is_owner(const dsmlib_ds_desc_t * ds, l4_threadid_t client);
00208 
00209 /*****************************************************************************/
00217 /*****************************************************************************/
00218 L4_CV void
00219 dsmlib_set_name(dsmlib_ds_desc_t * ds, const char * name);
00220 
00221 /*****************************************************************************/
00230 /*****************************************************************************/
00231 L4_CV char *
00232 dsmlib_get_name(dsmlib_ds_desc_t * ds);
00233 
00234 /*****************************************************************************/
00242 /*****************************************************************************/
00243 L4_CV void
00244 dsmlib_set_dsm_ptr(dsmlib_ds_desc_t * ds, void * ptr);
00245 
00246 /*****************************************************************************/
00255 /*****************************************************************************/
00256 L4_CV void *
00257 dsmlib_get_dsm_ptr(const dsmlib_ds_desc_t * ds);
00258 
00259 /*****************************************************************************/
00275 /*****************************************************************************/
00276 L4_CV int
00277 dsmlib_add_client(dsmlib_ds_desc_t * ds, l4_threadid_t client,
00278                   l4_uint32_t rights);
00279 
00280 /*****************************************************************************/
00294 /*****************************************************************************/
00295 L4_CV int
00296 dsmlib_remove_client(dsmlib_ds_desc_t * ds, l4_threadid_t client);
00297 
00298 /*****************************************************************************/
00308 /*****************************************************************************/
00309 L4_CV int
00310 dsmlib_remove_all_clients(dsmlib_ds_desc_t * ds);
00311 
00312 /*****************************************************************************/
00325 /*****************************************************************************/
00326 L4_CV int
00327 dsmlib_is_client(const dsmlib_ds_desc_t * ds, l4_threadid_t client);
00328 
00329 /*****************************************************************************/
00344 /*****************************************************************************/
00345 L4_CV int
00346 dsmlib_set_rights(const dsmlib_ds_desc_t * ds, l4_threadid_t client,
00347                   l4_uint32_t rights);
00348 
00349 /*****************************************************************************/
00366 /*****************************************************************************/
00367 L4_CV l4_uint32_t
00368 dsmlib_get_rights(const dsmlib_ds_desc_t * ds, l4_threadid_t client);
00369 
00370 /*****************************************************************************/
00386 /*****************************************************************************/
00387 L4_CV int
00388 dsmlib_check_rights(const dsmlib_ds_desc_t * ds, l4_threadid_t client,
00389                     l4_uint32_t rights);
00390 
00391 /*****************************************************************************/
00398 /*****************************************************************************/
00399 L4_CV dsmlib_ds_desc_t *
00400 dsmlib_get_dataspace_list(void);
00401 
00402 /*****************************************************************************/
00410 /*****************************************************************************/
00411 L4_CV void
00412 dsmlib_dataspaces_iterate(dsmlib_iterator_fn_t fn, void * data);
00413 
00414 /*****************************************************************************
00415  *** DEBUG
00416  *****************************************************************************/
00417 
00418 /*****************************************************************************/
00423 /*****************************************************************************/
00424 L4_CV void
00425 dsmlib_show_ds_hash(void);
00426 
00427 /*****************************************************************************/
00432 /*****************************************************************************/
00433 L4_CV void
00434 dsmlib_list_ds(void);
00435 
00436 /*****************************************************************************/
00443 /*****************************************************************************/
00444 void L4_CV
00445 dsmlib_list_ds_clients(const dsmlib_ds_desc_t * ds);
00446 
00447 __END_DECLS;
00448 
00449 #endif /* !_L4_DM_GENERIC_DSMLIB_H */

DMphys Reference Manual, written by Lars Reuther  © 2000-2003