]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright(c) 2019 Intel Corporation | |
3 | * SPDX-License-Identifier: BSD-3-Clause-Clear | |
4 | */ | |
5 | ||
6 | #ifndef __UTILS_ASYNC_LOCK_H__ | |
7 | #define __UTILS_ASYNC_LOCK_H__ | |
8 | ||
9 | #include "ocf_env.h" | |
10 | ||
11 | struct ocf_async_lock { | |
12 | struct list_head waiters; | |
13 | env_spinlock waiters_lock; | |
14 | uint32_t rd; | |
15 | uint32_t wr; | |
16 | uint32_t waiter_priv_size; | |
17 | }; | |
18 | ||
19 | typedef struct ocf_async_lock *ocf_async_lock_t; | |
20 | ||
21 | typedef struct ocf_async_lock_waiter *ocf_async_lock_waiter_t; | |
22 | ||
23 | typedef void (*ocf_async_lock_end_t)(ocf_async_lock_waiter_t waiter, int error); | |
24 | ||
25 | int ocf_async_lock_init(ocf_async_lock_t lock, uint32_t waiter_priv_size); | |
26 | ||
27 | void ocf_async_lock_deinit(ocf_async_lock_t lock); | |
28 | ||
29 | ocf_async_lock_waiter_t ocf_async_lock_new_waiter(ocf_async_lock_t lock, | |
30 | ocf_async_lock_end_t cmpl); | |
31 | ||
32 | ocf_async_lock_t ocf_async_lock_waiter_get_lock(ocf_async_lock_waiter_t waiter); | |
33 | ||
34 | void *ocf_async_lock_waiter_get_priv(ocf_async_lock_waiter_t waiter); | |
35 | ||
36 | void ocf_async_lock(ocf_async_lock_waiter_t waiter); | |
37 | ||
38 | int ocf_async_trylock(struct ocf_async_lock *lock); | |
39 | ||
40 | void ocf_async_unlock(struct ocf_async_lock *lock); | |
41 | ||
42 | void ocf_async_read_lock(ocf_async_lock_waiter_t waiter); | |
43 | ||
44 | int ocf_async_read_trylock(struct ocf_async_lock *lock); | |
45 | ||
46 | void ocf_async_read_unlock(struct ocf_async_lock *lock); | |
47 | ||
48 | bool ocf_async_is_locked(struct ocf_async_lock *lock); | |
49 | ||
50 | #endif /* __UTILS_ASYNC_LOCK_H__ */ |