46 lines
845 B
C
46 lines
845 B
C
/*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*
|
|
* Copyright (c) 2019 Western Digital Corporation or its affiliates.
|
|
* Copyright (c) 2021 Christoph Müllner <cmuellner@linux.com>
|
|
*/
|
|
|
|
#ifndef __RISCV_LOCKS_H__
|
|
#define __RISCV_LOCKS_H__
|
|
|
|
#include <sbi/sbi_types.h>
|
|
|
|
#define TICKET_SHIFT 16
|
|
|
|
typedef struct {
|
|
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
u16 next;
|
|
u16 owner;
|
|
#else
|
|
u16 owner;
|
|
u16 next;
|
|
#endif
|
|
} __aligned(4) spinlock_t;
|
|
|
|
#define __SPIN_LOCK_UNLOCKED \
|
|
(spinlock_t) { 0, 0 }
|
|
|
|
#define SPIN_LOCK_INIT(x) \
|
|
x = __SPIN_LOCK_UNLOCKED
|
|
|
|
#define SPIN_LOCK_INITIALIZER \
|
|
__SPIN_LOCK_UNLOCKED
|
|
|
|
#define DEFINE_SPIN_LOCK(x) \
|
|
spinlock_t SPIN_LOCK_INIT(x)
|
|
|
|
bool spin_lock_check(spinlock_t *lock);
|
|
|
|
bool spin_trylock(spinlock_t *lock);
|
|
|
|
void spin_lock(spinlock_t *lock);
|
|
|
|
void spin_unlock(spinlock_t *lock);
|
|
|
|
#endif
|