00001 00009 /* (c) 2000-2004 Technische Universitaet Dresden 00010 * This file is part of DROPS, which is distributed under the terms of the 00011 * GNU General Public License 2. Please see the COPYING file for details. 00012 */ 00013 #ifndef __OMEGA0_INCLUDE_CLIENT_H_ 00014 #define __OMEGA0_INCLUDE_CLIENT_H_ 00015 00016 #include <l4/sys/types.h> 00017 00018 EXTERN_C_BEGIN 00019 00023 typedef struct omega0_irqdesc_struct_t{ 00024 l4_umword_t num :16; 00025 l4_umword_t shared :1; 00026 l4_umword_t reserved :15; 00027 } omega0_irqdesc_struct_t; 00028 00032 typedef union omega0_irqdesc_t{ 00033 omega0_irqdesc_struct_t s; 00034 l4_umword_t i; 00035 } omega0_irqdesc_t; 00036 00037 00041 typedef struct omega0_request_struct_t{ 00042 unsigned param:16; 00043 unsigned wait:1; 00044 unsigned consume:1; 00045 unsigned mask:1; 00046 unsigned unmask:1; 00047 unsigned again:1; 00048 unsigned reserved:11; 00049 } omega0_request_struct_t; 00050 00054 typedef union omega0_request_t{ 00055 omega0_request_struct_t s; 00056 l4_umword_t i; 00057 } omega0_request_t; 00058 00062 typedef L4_CV void(*omega0_alien_handler_t)(l4_threadid_t alien, l4_umword_t d0, 00063 l4_umword_t d1); 00064 extern omega0_alien_handler_t omega0_alien_handler; 00065 00066 // constants for creating OMEGA0_RQ 00067 #define OMEGA0_WAIT (((omega0_request_t){s: \ 00068 (omega0_request_struct_t){wait:1}}).i) 00069 #define OMEGA0_CONSUME (((omega0_request_t){s: \ 00070 (omega0_request_struct_t){consume:1}}).i) 00071 #define OMEGA0_MASK (((omega0_request_t){s: \ 00072 (omega0_request_struct_t){mask:1}}).i) 00073 #define OMEGA0_UNMASK (((omega0_request_t){s: \ 00074 (omega0_request_struct_t){unmask:1}}).i) 00075 00076 #define OMEGA0_RQ(action,param) ((omega0_request_t){i:(param)|(action)}) 00077 00087 L4_CV int omega0_attach(omega0_irqdesc_t desc); 00088 00096 L4_CV int omega0_detach(omega0_irqdesc_t desc); 00097 00107 L4_CV int omega0_pass(omega0_irqdesc_t desc, l4_threadid_t new_driver); 00108 00122 L4_CV int omega0_request(int handle, omega0_request_t action); 00123 00124 00139 L4_CV int omega0_request_timeout(int handle, omega0_request_t action, 00140 l4_timeout_t timeout); 00141 00142 00149 L4_CV int omega0_first(void); 00150 00158 L4_CV int omega0_next(int irq_num); 00159 00170 L4_CV omega0_alien_handler_t omega0_set_alien_handler( 00171 omega0_alien_handler_t handler); 00172 00173 EXTERN_C_END 00174 00175 #endif