- Initial checkin of the freebios2 tree
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@784 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
53
src/include/smp/atomic.h
Normal file
53
src/include/smp/atomic.h
Normal file
@@ -0,0 +1,53 @@
|
||||
#ifndef SMP_ATOMIC_H
|
||||
#define SMP_ATOMIC_H
|
||||
|
||||
#ifdef SMP
|
||||
#include <arch/smp/atomic.h>
|
||||
#else
|
||||
|
||||
typedef struct { int counter; } atomic_t;
|
||||
#define ATOMIC_INIT(i) { (i) }
|
||||
|
||||
/**
|
||||
* atomic_read - read atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically reads the value of @v. Note that the guaranteed
|
||||
* useful range of an atomic_t is only 24 bits.
|
||||
*/
|
||||
#define atomic_read(v) ((v)->counter)
|
||||
|
||||
/**
|
||||
* atomic_set - set atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
* @i: required value
|
||||
*
|
||||
* Atomically sets the value of @v to @i. Note that the guaranteed
|
||||
* useful range of an atomic_t is only 24 bits.
|
||||
*/
|
||||
#define atomic_set(v,i) (((v)->counter) = (i))
|
||||
|
||||
|
||||
/**
|
||||
* atomic_inc - increment atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically increments @v by 1. Note that the guaranteed
|
||||
* useful range of an atomic_t is only 24 bits.
|
||||
*/
|
||||
#define atomic_inc(v) (((v)->counter)++)
|
||||
|
||||
|
||||
/**
|
||||
* atomic_dec - decrement atomic variable
|
||||
* @v: pointer of type atomic_t
|
||||
*
|
||||
* Atomically decrements @v by 1. Note that the guaranteed
|
||||
* useful range of an atomic_t is only 24 bits.
|
||||
*/
|
||||
#define atomic_dec(v) (((v)->counter)--)
|
||||
|
||||
|
||||
#endif /* SMP */
|
||||
|
||||
#endif /* SMP_ATOMIC_H */
|
24
src/include/smp/spinlock.h
Normal file
24
src/include/smp/spinlock.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef SMP_SPINLOCK_H
|
||||
#define SMP_SPINLOCK_H
|
||||
|
||||
#ifdef SMP
|
||||
#include <arch/smp/spinlock.h>
|
||||
#else /* !SMP */
|
||||
|
||||
/* Most GCC versions have a nasty bug with empty initializers */
|
||||
#if (__GNUC__ > 2)
|
||||
typedef struct { } spinlock_t;
|
||||
#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
|
||||
#else
|
||||
typedef struct { int gcc_is_buggy; } spinlock_t;
|
||||
#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 }
|
||||
#endif
|
||||
|
||||
#define barrier() do {} while(0)
|
||||
#define spin_is_locked(lock) 0
|
||||
#define spin_unlock_wait(lock) do {} while(0)
|
||||
#define spin_lock(lock) do {} while(0)
|
||||
#define spin_unlock(lock) do {} while(0)
|
||||
#endif
|
||||
|
||||
#endif /* SMP_SPINLOCK_H */
|
17
src/include/smp/start_stop.h
Normal file
17
src/include/smp/start_stop.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef SMP_START_STOP_H
|
||||
#define SMP_START_STOP_H
|
||||
|
||||
#if SMP == 1
|
||||
#include <smp/atomic.h>
|
||||
unsigned long this_processors_id(void);
|
||||
int processor_index(unsigned long processor_id);
|
||||
void stop_cpu(unsigned long processor_id);
|
||||
int start_cpu(unsigned long processor_id);
|
||||
void startup_other_cpus(unsigned long *processor_map);
|
||||
#else
|
||||
#define this_processors_id() 0
|
||||
#define startup_other_cpus(p) do {} while(0)
|
||||
#define processor_index(p) 0
|
||||
#endif
|
||||
|
||||
#endif /* SMP_START_STOP_H */
|
Reference in New Issue
Block a user