Start of merge from work on the AMD760MP platform.
This is the safe part just additions to files, and comment changes
This commit is contained in:
parent
ad44ad6bc8
commit
228148aa23
63 changed files with 6591 additions and 3 deletions
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_inc(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 */
|
||||
15
src/include/smp/start_stop.h
Normal file
15
src/include/smp/start_stop.h
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef SMP_START_STOP_H
|
||||
#define SMP_START_STOP_H
|
||||
|
||||
#ifdef SMP
|
||||
#include <smp/atomic.h>
|
||||
int this_processors_id(void);
|
||||
void stop_cpu(int processor_id);
|
||||
void start_cpu(int processor_id);
|
||||
void startup_other_cpus(void);
|
||||
#else
|
||||
#define this_processors_id() 0
|
||||
#define startup_other_cpus() do {} while(0)
|
||||
#endif
|
||||
|
||||
#endif /* SMP_START_STOP_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue