2018-03-24 00:58:24 +00:00
|
|
|
#ifndef KERNEL_KE_RWLOCK_H
|
|
|
|
#define KERNEL_KE_RWLOCK_H
|
2018-02-18 04:06:57 +00:00
|
|
|
|
2018-01-26 08:43:22 +00:00
|
|
|
#include "kernel/ke/spin_lock.h"
|
|
|
|
#include "type.h"
|
2017-06-16 07:19:03 +00:00
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2018-02-18 04:06:57 +00:00
|
|
|
k_spin_lock_t w_mutex;
|
|
|
|
k_spin_lock_t r_mutex;
|
|
|
|
k_spin_lock_t res_lock;
|
|
|
|
k_spin_lock_t r_try;
|
2018-03-24 00:58:24 +00:00
|
|
|
uint32 reader_ct;
|
|
|
|
uint32 writer_ct;
|
2017-06-16 07:19:03 +00:00
|
|
|
} k_rwwlock_t;
|
|
|
|
|
2018-02-18 07:48:59 +00:00
|
|
|
void SXAPI ke_rwwlock_init(k_rwwlock_t *lock);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-02-18 07:48:59 +00:00
|
|
|
void SXAPI ke_rwwlock_reader_lock(k_rwwlock_t *lock);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-02-18 07:48:59 +00:00
|
|
|
void SXAPI ke_rwwlock_reader_unlock(k_rwwlock_t *lock);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-02-18 07:48:59 +00:00
|
|
|
void SXAPI ke_rwwlock_writer_lock(k_rwwlock_t *lock);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-02-18 07:48:59 +00:00
|
|
|
void SXAPI ke_rwwlock_writer_unlock(k_rwwlock_t *lock);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
k_irql SXAPI ke_rwwlock_reader_lock_raise_irql(k_rwwlock_t *lock, k_irql irql);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
void SXAPI ke_rwwlock_reader_unlock_lower_irql(k_rwwlock_t *lock, k_irql irql);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
k_irql SXAPI ke_rwwlock_writer_lock_raise_irql(k_rwwlock_t *lock, k_irql irql);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
2018-03-24 00:58:24 +00:00
|
|
|
void SXAPI ke_rwwlock_writer_unlock_lower_irql(k_rwwlock_t *lock, k_irql irql);
|
2017-06-16 07:19:03 +00:00
|
|
|
|
|
|
|
#endif
|
2018-03-24 00:58:24 +00:00
|
|
|
|