12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright (c) 2019 Western Digital Corporation or its affiliates.
- *
- * Authors:
- * Anup Patel <anup.patel@wdc.com>
- */
- #ifndef __RISCV_ATOMIC_H__
- #define __RISCV_ATOMIC_H__
- typedef struct {
- volatile long counter;
- } atomic_t;
- #define ATOMIC_INIT(_lptr, val) (_lptr)->counter = (val)
- #define ATOMIC_INITIALIZER(val) \
- { \
- .counter = (val), \
- }
- long atomic_read(atomic_t *atom);
- void atomic_write(atomic_t *atom, long value);
- long atomic_add_return(atomic_t *atom, long value);
- long atomic_sub_return(atomic_t *atom, long value);
- long atomic_cmpxchg(atomic_t *atom, long oldval, long newval);
- long atomic_xchg(atomic_t *atom, long newval);
- unsigned int atomic_raw_xchg_uint(volatile unsigned int *ptr,
- unsigned int newval);
- unsigned long atomic_raw_xchg_ulong(volatile unsigned long *ptr,
- unsigned long newval);
- /**
- * Set a bit in an atomic variable and return the new value.
- * @nr : Bit to set.
- * @atom: atomic variable to modify
- */
- int atomic_set_bit(int nr, atomic_t *atom);
- /**
- * Clear a bit in an atomic variable and return the new value.
- * @nr : Bit to set.
- * @atom: atomic variable to modify
- */
- int atomic_clear_bit(int nr, atomic_t *atom);
- /**
- * Set a bit in any address and return the new value .
- * @nr : Bit to set.
- * @addr: Address to modify
- */
- int atomic_raw_set_bit(int nr, volatile unsigned long *addr);
- /**
- * Clear a bit in any address and return the new value .
- * @nr : Bit to set.
- * @addr: Address to modify
- */
- int atomic_raw_clear_bit(int nr, volatile unsigned long *addr);
- #endif
|