Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 36269
b: refs/heads/master
c: 00b3aa3
h: refs/heads/master
i:
  36267: d029c00
v: v3
  • Loading branch information
Paul Mundt committed Sep 27, 2006
1 parent 6c0b786 commit 6adfeef
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bc8bff63bacea47561de34e04a17c79846ecfe91
refs/heads/master: 00b3aa3fc9bd827caaa859de90d9eba831b77d40
57 changes: 32 additions & 25 deletions trunk/include/asm-sh/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,8 @@ static inline void sched_cacheflush(void)
}
#endif

#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))

static __inline__ unsigned long tas(volatile int *m)
{ /* #define tas(ptr) (xchg((ptr),1)) */
{
unsigned long retval;

__asm__ __volatile__ ("tas.b @%1\n\t"
Expand All @@ -91,8 +89,6 @@ static __inline__ unsigned long tas(volatile int *m)
return retval;
}

extern void __xchg_called_with_bad_pointer(void);

/*
* A brief note on ctrl_barrier(), the control register write barrier.
*
Expand Down Expand Up @@ -220,17 +216,17 @@ static __inline__ void local_irq_restore(unsigned long x)
}
}
#else
#define local_irq_restore(x) do { \
#define local_irq_restore(x) do { \
if ((x & 0x000000f0) != 0x000000f0) \
local_irq_enable(); \
local_irq_enable(); \
} while (0)
#endif

#define really_restore_flags(x) do { \
#define really_restore_flags(x) do { \
if ((x & 0x000000f0) != 0x000000f0) \
local_irq_enable(); \
local_irq_enable(); \
else \
local_irq_disable(); \
local_irq_disable(); \
} while (0)

/*
Expand Down Expand Up @@ -272,7 +268,7 @@ do { \
/* For spinlocks etc */
#define local_irq_save(x) x = local_irq_save()

static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val)
static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
{
unsigned long flags, retval;

Expand All @@ -283,7 +279,7 @@ static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val)
return retval;
}

static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned long val)
static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
{
unsigned long flags, retval;

Expand All @@ -294,19 +290,30 @@ static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned lon
return retval;
}

static __inline__ unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
{
switch (size) {
case 4:
return xchg_u32(ptr, x);
break;
case 1:
return xchg_u8(ptr, x);
break;
}
__xchg_called_with_bad_pointer();
return x;
}
extern void __xchg_called_with_bad_pointer(void);

#define __xchg(ptr, x, size) \
({ \
unsigned long __xchg__res; \
volatile void *__xchg_ptr = (ptr); \
switch (size) { \
case 4: \
__xchg__res = xchg_u32(__xchg_ptr, x); \
break; \
case 1: \
__xchg__res = xchg_u8(__xchg_ptr, x); \
break; \
default: \
__xchg_called_with_bad_pointer(); \
__xchg__res = x; \
break; \
} \
\
__xchg__res; \
})

#define xchg(ptr,x) \
((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr))))

static inline unsigned long __cmpxchg_u32(volatile int * m, unsigned long old,
unsigned long new)
Expand Down

0 comments on commit 6adfeef

Please sign in to comment.