Rev 2485 | Rev 2488 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2485 | Rev 2486 | ||
---|---|---|---|
Line 97... | Line 97... | ||
97 | #include <libadt/hash_table.h> |
97 | #include <libadt/hash_table.h> |
98 | #include <libadt/list.h> |
98 | #include <libadt/list.h> |
99 | #include <ipc/ipc.h> |
99 | #include <ipc/ipc.h> |
100 | #include <assert.h> |
100 | #include <assert.h> |
101 | #include <errno.h> |
101 | #include <errno.h> |
102 | #include <time.h> |
102 | #include <sys/time.h> |
103 | #include <arch/barrier.h> |
103 | #include <arch/barrier.h> |
104 | 104 | ||
105 | atomic_t async_futex = FUTEX_INITIALIZER; |
105 | atomic_t async_futex = FUTEX_INITIALIZER; |
106 | static hash_table_t conn_hash_table; |
106 | static hash_table_t conn_hash_table; |
107 | static LIST_INITIALIZE(timeout_list); |
107 | static LIST_INITIALIZE(timeout_list); |
Line 159... | Line 159... | ||
159 | static void default_client_connection(ipc_callid_t callid, ipc_call_t *call); |
159 | static void default_client_connection(ipc_callid_t callid, ipc_call_t *call); |
160 | static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call); |
160 | static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call); |
161 | static async_client_conn_t client_connection = default_client_connection; |
161 | static async_client_conn_t client_connection = default_client_connection; |
162 | static async_client_conn_t interrupt_received = default_interrupt_received; |
162 | static async_client_conn_t interrupt_received = default_interrupt_received; |
163 | 163 | ||
164 | /** Add microseconds to give timeval */ |
- | |
165 | static void tv_add(struct timeval *tv, suseconds_t usecs) |
- | |
166 | { |
- | |
167 | tv->tv_sec += usecs / 1000000; |
- | |
168 | tv->tv_usec += usecs % 1000000; |
- | |
169 | if (tv->tv_usec > 1000000) { |
- | |
170 | tv->tv_sec++; |
- | |
171 | tv->tv_usec -= 1000000; |
- | |
172 | } |
- | |
173 | } |
- | |
174 | - | ||
175 | /** Subtract 2 timevals, return microseconds difference */ |
- | |
176 | static suseconds_t tv_sub(struct timeval *tv1, struct timeval *tv2) |
- | |
177 | { |
- | |
178 | suseconds_t result; |
- | |
179 | - | ||
180 | result = tv1->tv_usec - tv2->tv_usec; |
- | |
181 | result += (tv1->tv_sec - tv2->tv_sec) * 1000000; |
- | |
182 | - | ||
183 | return result; |
- | |
184 | } |
- | |
185 | - | ||
186 | /** Compare timeval |
- | |
187 | * |
- | |
188 | * @return 1 if tv1 > tv2, otherwise 0 |
- | |
189 | */ |
- | |
190 | static int tv_gt(struct timeval *tv1, struct timeval *tv2) |
- | |
191 | { |
- | |
192 | if (tv1->tv_sec > tv2->tv_sec) |
- | |
193 | return 1; |
- | |
194 | if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec > tv2->tv_usec) |
- | |
195 | return 1; |
- | |
196 | return 0; |
- | |
197 | } |
- | |
198 | static int tv_gteq(struct timeval *tv1, struct timeval *tv2) |
- | |
199 | { |
- | |
200 | if (tv1->tv_sec > tv2->tv_sec) |
- | |
201 | return 1; |
- | |
202 | if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec >= tv2->tv_usec) |
- | |
203 | return 1; |
- | |
204 | return 0; |
- | |
205 | } |
- | |
206 | - | ||
207 | /* Hash table functions */ |
164 | /* Hash table functions */ |
208 | #define CONN_HASH_TABLE_CHAINS 32 |
165 | #define CONN_HASH_TABLE_CHAINS 32 |
209 | 166 | ||
210 | static hash_index_t conn_hash(unsigned long *key) |
167 | static hash_index_t conn_hash(unsigned long *key) |
211 | { |
168 | { |