mirror of
				https://github.com/riscv-software-src/opensbi
				synced 2025-11-04 14:00:31 +00:00 
			
		
		
		
	We should remove the "arch_" prefix from atomic xchg() and cmpxchg() function names to have consistent naming of all atomic functions. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * 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
 |