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 */