]> err.no Git - linux-2.6/blobdiff - include/asm-sh/system.h
[TCP] Vegas: Increase default alpha to 2 and beta to 4.
[linux-2.6] / include / asm-sh / system.h
index 198d17e3069a8f0bca9e5f575f63c5529763f761..3340126f4e0fc7785cef0ed7e4c191583fdc6e35 100644 (file)
@@ -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)) */
+static inline unsigned long tas(volatile int *m)
+{
        unsigned long retval;
 
        __asm__ __volatile__ ("tas.b    @%1\n\t"
@@ -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.
  *
@@ -165,7 +161,7 @@ static inline void local_irq_enable(void)
 }
 #endif
 
-static __inline__ void local_irq_disable(void)
+static inline void local_irq_disable(void)
 {
        unsigned long __dummy;
        __asm__ __volatile__("stc       sr, %0\n\t"
@@ -176,6 +172,31 @@ static __inline__ void local_irq_disable(void)
                             : "memory");
 }
 
+static inline void set_bl_bit(void)
+{
+       unsigned long __dummy0, __dummy1;
+
+       __asm__ __volatile__ ("stc      sr, %0\n\t"
+                            "or        %2, %0\n\t"
+                            "and       %3, %0\n\t"
+                            "ldc       %0, sr"
+                            : "=&r" (__dummy0), "=r" (__dummy1)
+                            : "r" (0x10000000), "r" (0xffffff0f)
+                            : "memory");
+}
+
+static inline void clear_bl_bit(void)
+{
+       unsigned long __dummy0, __dummy1;
+
+       __asm__ __volatile__ ("stc      sr, %0\n\t"
+                            "and       %2, %0\n\t"
+                            "ldc       %0, sr"
+                            : "=&r" (__dummy0), "=r" (__dummy1)
+                            : "1" (~0x10000000)
+                            : "memory");
+}
+
 #define local_save_flags(x) \
        __asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" )
 
@@ -186,7 +207,7 @@ static __inline__ void local_irq_disable(void)
        (flags != 0);                   \
 })
 
-static __inline__ unsigned long local_irq_save(void)
+static inline unsigned long local_irq_save(void)
 {
        unsigned long flags, __dummy;
 
@@ -202,35 +223,9 @@ static __inline__ unsigned long local_irq_save(void)
        return flags;
 }
 
-#ifdef DEBUG_CLI_STI
-static __inline__ void  local_irq_restore(unsigned long x)
-{
-       if ((x & 0x000000f0) != 0x000000f0)
-               local_irq_enable();
-       else {
-               unsigned long flags;
-               local_save_flags(flags);
-
-               if (flags == 0) {
-                       extern void dump_stack(void);
-                       printk(KERN_ERR "BUG!\n");
-                       dump_stack();
-                       local_irq_disable();
-               }
-       }
-}
-#else
-#define local_irq_restore(x) do {                      \
-       if ((x & 0x000000f0) != 0x000000f0)             \
-               local_irq_enable();                             \
-} while (0)
-#endif
-
-#define really_restore_flags(x) do {                   \
+#define local_irq_restore(x) do {                      \
        if ((x & 0x000000f0) != 0x000000f0)             \
-               local_irq_enable();                             \
-       else                                            \
-               local_irq_disable();                            \
+               local_irq_enable();                     \
 } while (0)
 
 /*
@@ -272,7 +267,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;
 
@@ -283,7 +278,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;
 
@@ -294,19 +289,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)
@@ -347,6 +353,13 @@ static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
                                    (unsigned long)_n_, sizeof(*(ptr))); \
   })
 
+extern void *set_exception_table_vec(unsigned int vec, void *handler);
+
+static inline void *set_exception_table_evt(unsigned int evt, void *handler)
+{
+       return set_exception_table_vec(evt >> 5, handler);
+}
+
 /* XXX
  * disable hlt during certain critical i/o operations
  */