From baf29c7a7fe74d8ca799c869440f7b7cd5a33b8a Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Sat, 4 Aug 2007 21:02:22 +0000
Subject: 2007-08-04  Samuel Thibault  <samuel.thibault@ens-lyon.org>

* linux/dev/arch/i386/kernel/irq.c: Include <asm/hardirq.h>.
	(local_bh_count, local_irq_count, global_irq_holder, global_irq_lock)
	(global_irq_count, check_smp_invalidate, show, wait_on_bh)
	(wait_on_irq, synchronize_bh, synchronize_irq, get_irqlock)
	(__global_cli, __global_sti, __global_save_flags)
	(__global_restore_flags): New variables and functions from Linux 2.2
	* linux/src/drivers/net/3c515.c (test_and_set_bit): Remove macro.
	* linux/src/drivers/net/de4x5.c (test_and_set_bit): Remove macro.
	* linux/src/drivers/net/eth16i.c (test_and_set_bit): Remove macro.
	* linux/src/drivers/net/kern_compat.h (test_and_set_bit): Remove macro.
	* linux/src/drivers/net/pcnet32.c (test_and_set_bit): Remove macro.
	* linux/src/include/linux/compatmac.h (test_and_set_bit)
	(test_and_clear_bit): Remove macro.
	* linux/src/include/asm-i386/atomic.h (atomic_read): New macro.
	* linux/src/include/asm-i386/bitops.h (test_and_set_bit)
	(test_and_clear_bit, test_and_change_bit): New inline functions.
	* linux/src/include/asm-i386/hardirq.h (local_bh_count): New
	declaration.
	* linux/src/include/linux/tasks.h (NR_CPUS): Set to NCPUS.
	(NO_PROC_ID): New macro.
---
 linux/src/include/asm-i386/atomic.h  |  2 ++
 linux/src/include/asm-i386/bitops.h  | 34 ++++++++++++++++++++++++++++++++++
 linux/src/include/asm-i386/hardirq.h |  1 +
 3 files changed, 37 insertions(+)

(limited to 'linux/src/include/asm-i386')

diff --git a/linux/src/include/asm-i386/atomic.h b/linux/src/include/asm-i386/atomic.h
index 1b9d99f..7e5dd06 100644
--- a/linux/src/include/asm-i386/atomic.h
+++ b/linux/src/include/asm-i386/atomic.h
@@ -21,6 +21,8 @@
 
 typedef int atomic_t;
 
+#define atomic_read(v) (*v)
+
 static __inline__ void atomic_add(atomic_t i, atomic_t *v)
 {
 	__asm__ __volatile__(
diff --git a/linux/src/include/asm-i386/bitops.h b/linux/src/include/asm-i386/bitops.h
index d3ed1fb..fc4cf19 100644
--- a/linux/src/include/asm-i386/bitops.h
+++ b/linux/src/include/asm-i386/bitops.h
@@ -61,6 +61,40 @@ extern __inline__ int change_bit(int nr, SMPVOL void * addr)
 	return oldbit;
 }
 
+extern __inline__ int test_and_set_bit(int nr, volatile void * addr)
+{
+	int oldbit;
+
+	__asm__ __volatile__( LOCK_PREFIX
+		"btsl %2,%1\n\tsbbl %0,%0"
+		:"=r" (oldbit),"=m" (ADDR)
+		:"Ir" (nr));
+	return oldbit;
+}
+
+extern __inline__ int test_and_clear_bit(int nr, volatile void * addr)
+{
+	int oldbit;
+
+	__asm__ __volatile__( LOCK_PREFIX
+		"btrl %2,%1\n\tsbbl %0,%0"
+		:"=r" (oldbit),"=m" (ADDR)
+		:"Ir" (nr));
+	return oldbit;
+}
+
+extern __inline__ int test_and_change_bit(int nr, volatile void * addr)
+{
+	int oldbit;
+
+	__asm__ __volatile__( LOCK_PREFIX
+		"btcl %2,%1\n\tsbbl %0,%0"
+		:"=r" (oldbit),"=m" (ADDR)
+		:"Ir" (nr));
+	return oldbit;
+}
+
+
 /*
  * This routine doesn't need to be atomic.
  */
diff --git a/linux/src/include/asm-i386/hardirq.h b/linux/src/include/asm-i386/hardirq.h
index 5339613..10dae41 100644
--- a/linux/src/include/asm-i386/hardirq.h
+++ b/linux/src/include/asm-i386/hardirq.h
@@ -4,6 +4,7 @@
 #include <linux/tasks.h>
 
 extern unsigned int local_irq_count[NR_CPUS];
+extern unsigned int local_bh_count[NR_CPUS];
 
 /*
  * Are we in an interrupt context? Either doing bottom half
-- 
cgit v1.2.3