From: Yoshinori Sato <ysato@users.sourceforge.jp>
To: Linus Torvalds <torvalds@osdl.org>
Cc: linux kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] linux-2.6.0-test2 h8300 archtecure support update (4/6)
Date: Mon, 28 Jul 2003 23:18:51 +0900 [thread overview]
Message-ID: <m2oezeag50.wl%ysato@users.sourceforge.jp> (raw)
includes
used common header files
build error and warning fix
add include/asm-h8300/local.h and include/asm-h8300/sections.h
--
Yoshinori Sato
<ysato@users.sourceforge.jp>
diff -Nru linux-2.6.0-test2/include/asm-h8300/aki3068net/ne.h linux-2.6.0-test2-h8300/include/asm-h8300/aki3068net/ne.h
--- linux-2.6.0-test2/include/asm-h8300/aki3068net/ne.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/aki3068net/ne.h 2003-07-19 21:41:33.000000000 +0900
@@ -1,6 +1,9 @@
/* AE-3068 (aka. aki3068net) RTL8019AS Config */
-#define NE2000_ADDR CONFIG_NE_BASE
+#ifndef __H8300_AKI3068NET_NE__
+#define __H8300_AKI3068NET_NE__
+
+#define NE2000_ADDR 0x200000
#define NE2000_IRQ 5
#define NE2000_IRQ_VECTOR (12 + NE2000_IRQ)
#define NE2000_BYTE volatile unsigned short
@@ -21,3 +24,5 @@
wordlength = 1; \
outb_p(0x48, ioaddr + EN0_DCFG); \
} while(0)
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/aki3068net/timer_rate.h linux-2.6.0-test2-h8300/include/asm-h8300/aki3068net/timer_rate.h
--- linux-2.6.0-test2/include/asm-h8300/aki3068net/timer_rate.h 1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/aki3068net/timer_rate.h 2003-07-20 01:19:25.000000000 +0900
@@ -0,0 +1,9 @@
+#ifndef __H8300_AKI3068NET_TIMER_RATE__
+#define __H8300_AKI3068NET_TIMER_RATE__
+
+#include <linux/config.h>
+
+#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/atomic.h linux-2.6.0-test2-h8300/include/asm-h8300/atomic.h
--- linux-2.6.0-test2/include/asm-h8300/atomic.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/atomic.h 2003-07-19 21:41:33.000000000 +0900
@@ -71,6 +71,7 @@
return ret == 0;
}
+#if defined(__H8300H__)
static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *v)
{
__asm__ __volatile__("stc ccr,r2l\n\t"
@@ -94,6 +95,32 @@
"ldc r2l,ccr"
: "=m" (*v) : "ir" (mask) :"er0","er1","er2");
}
+#endif
+#if defined(__H8300S__)
+static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *v)
+{
+ __asm__ __volatile__("stc exr,r2l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l %0,er0\n\t"
+ "mov.l %1,er1\n\t"
+ "and.l er1,er0\n\t"
+ "mov.l er0,%0\n\t"
+ "ldc r2l,exr"
+ : "=m" (*v) : "ir" (~(mask)) :"er0","er1","er2");
+}
+
+static __inline__ void atomic_set_mask(unsigned long mask, unsigned long *v)
+{
+ __asm__ __volatile__("stc exr,r2l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l %0,er0\n\t"
+ "mov.l %1,er1\n\t"
+ "or.l er1,er0\n\t"
+ "mov.l er0,%0\n\t"
+ "ldc r2l,exr"
+ : "=m" (*v) : "ir" (mask) :"er0","er1","er2");
+}
+#endif
/* Atomic operations are already serializing */
#define smp_mb__before_atomic_dec() barrier()
@@ -101,7 +128,4 @@
#define smp_mb__before_atomic_inc() barrier()
#define smp_mb__after_atomic_inc() barrier()
-#define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
-#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
-
#endif /* __ARCH_H8300_ATOMIC __ */
diff -Nru linux-2.6.0-test2/include/asm-h8300/bitops.h linux-2.6.0-test2-h8300/include/asm-h8300/bitops.h
--- linux-2.6.0-test2/include/asm-h8300/bitops.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/bitops.h 2003-07-28 12:40:18.000000000 +0900
@@ -10,6 +10,7 @@
#include <linux/config.h>
#include <linux/compiler.h>
#include <asm/byteorder.h> /* swab32 */
+#include <asm/system.h>
#ifdef __KERNEL__
/*
@@ -17,48 +18,33 @@
*/
/*
- * The __ functions are not atomic
- */
-
-extern void set_bit(int nr, volatile unsigned long* addr);
-extern void clear_bit(int nr, volatile unsigned long* addr);
-extern void change_bit(int nr, volatile unsigned long* addr);
-extern int test_and_set_bit(int nr, volatile unsigned long* addr);
-extern int __test_and_set_bit(int nr, volatile unsigned long* addr);
-extern int test_and_clear_bit(int nr, volatile unsigned long* addr);
-extern int __test_and_clear_bit(int nr, volatile unsigned long* addr);
-extern int test_and_change_bit(int nr, volatile unsigned long* addr);
-extern int __test_and_change_bit(int nr, volatile unsigned long* addr);
-extern int __constant_test_bit(int nr, const volatile unsigned long* addr);
-extern int __test_bit(int nr, volatile unsigned long* addr);
-extern int find_first_zero_bit(void * addr, unsigned size);
-extern int find_next_zero_bit (void * addr, int size, int offset);
-
-/*
* ffz = Find First Zero in word. Undefined if no zero exists,
* so code should check against ~0UL first..
*/
-extern __inline__ unsigned long ffz(unsigned long word)
+static __inline__ unsigned long ffz(unsigned long word)
{
- unsigned long result;
+ register unsigned long result asm("er0");
+ register unsigned long _word asm("er1");
+ _word = word;
__asm__("sub.l %0,%0\n\t"
"dec.l #1,%0\n"
"1:\n\t"
"shlr.l %1\n\t"
"adds #1,%0\n\t"
"bcs 1b"
- : "=r" (result) : "r" (word));
+ : "=r" (result) : "r" (_word));
return result;
}
-extern __inline__ void set_bit(int nr, volatile unsigned long* addr)
+static __inline__ void set_bit(int nr, volatile unsigned long* addr)
{
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %0,er0\n\t"
- "bset r0l,@%1"
- ::"r"(nr & 7),"r"(a):"er0","er1");
+ __asm__("mov.l %1,er0\n\t"
+ "mov.l %0,er1\n\t"
+ "bset r0l,@er1"
+ :"=m"(a):"g"(nr & 7):"er0","er1","memory");
}
/* Bigendian is complexed... */
@@ -70,175 +56,239 @@
#define smp_mb__before_clear_bit() barrier()
#define smp_mb__after_clear_bit() barrier()
-extern __inline__ void clear_bit(int nr, volatile unsigned long* addr)
+static __inline__ void clear_bit(int nr, volatile unsigned long* addr)
{
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %0,er0\n\t"
- "bclr r0l,@%1"
- ::"r"(nr & 7),"r"(a):"er0");
+ __asm__("mov.l %1,er0\n\t"
+ "mov.l %0,er1\n\t"
+ "bclr r0l,@er1"
+ :"=m"(a):"g"(nr & 7):"er0","er1","memory");
}
#define __clear_bit(nr, addr) clear_bit(nr, addr)
-extern __inline__ void change_bit(int nr, volatile unsigned long* addr)
+static __inline__ void change_bit(int nr, volatile unsigned long* addr)
{
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %0,er0\n\t"
- "bnot r0l,@%1"
- ::"r"(nr & 7),"r"(a):"er0");
+ __asm__("mov.l %1,er0\n\t"
+ "mov.l %0,er1\n\t"
+ "bnot r0l,@er1"
+ :"=m"(a):"g"(nr & 7):"er0","er1","memory");
}
#define __change_bit(nr, addr) change_bit(nr, addr)
-extern __inline__ int test_and_set_bit(int nr, volatile unsigned long* addr)
+#if defined(__H8300H__)
+static __inline__ int test_and_set_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a;
a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
+ __asm__("mov.l %2,er0\n\t"
"stc ccr,r0h\n\t"
"orc #0x80,ccr\n\t"
- "btst r0l,@%2\n\t"
- "bset r0l,@%2\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bset r0l,r1l\n\t"
"stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
"ldc r0h,ccr\n\t"
- "btst #2,r0l\n\t"
- "bne 1f\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
return retval;
}
+#endif
+#if defined(__H8300S__)
+static __inline__ int test_and_set_bit(int nr, volatile unsigned long* addr)
+{
+ int retval;
+ unsigned char *a;
+ a = (unsigned char *) addr;
-extern __inline__ int __test_and_set_bit(int nr, volatile unsigned long* addr)
+ a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
+ __asm__("mov.l %2,er0\n\t"
+ "stc exr,r0h\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bset r0l,r1l\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
+ "ldc r0h,exr\n\t"
+ "sub.l %0,%0\n\t"
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
+ return retval;
+}
+#endif
+
+static __inline__ int __test_and_set_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
- "btst r0l,@%2\n\t"
- "bset r0l,@%2\n\t"
- "beq 1f\n\t"
+ __asm__("mov.l %2,er0\n\t"
+ "mov.b %1,r0h\n\t"
+ "btst r0l,r0h\n\t"
+ "bset r0l,r0h\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r0h,%1\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","memory");
return retval;
}
-extern __inline__ int test_and_clear_bit(int nr, volatile unsigned long* addr)
+#if defined(__H8300H__)
+static __inline__ int test_and_clear_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
+ __asm__("mov.l %2,er0\n\t"
"stc ccr,r0h\n\t"
"orc #0x80,ccr\n\t"
- "btst r0l,@%2\n\t"
- "bclr r0l,@%2\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bclr r0l,r1l\n\t"
"stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
"ldc r0h,ccr\n\t"
- "btst #2,r0l\n\t"
- "bne 1f\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
return retval;
}
+#endif
+#if defined(__H8300S__)
+static __inline__ int test_and_clear_bit(int nr, volatile unsigned long* addr)
+{
+ int retval;
+ unsigned char *a = (unsigned char *) addr;
-extern __inline__ int __test_and_clear_bit(int nr, volatile unsigned long* addr)
+ a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
+ __asm__("mov.l %2,er0\n\t"
+ "stc exr,r0h\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bclr r0l,r1l\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
+ "ldc r0h,exr\n\t"
+ "sub.l %0,%0\n\t"
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
+ return retval;
+}
+#endif
+
+static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
- "btst r0l,@%2\n\t"
- "bclr r0l,@%2\n\t"
- "beq 1f\n\t"
+ __asm__("mov.l %2,er0\n\t"
+ "mov.b %1,r0h\n\t"
+ "btst r0l,r0h\n\t"
+ "bclr r0l,r0h\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r0h,%1\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","memory");
return retval;
}
-extern __inline__ int test_and_change_bit(int nr, volatile unsigned long* addr)
+#if defined(__H8300H__)
+static __inline__ int test_and_change_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
+ __asm__("mov.l %2,er0\n\t"
"stc ccr,r0h\n\t"
"orc #0x80,ccr\n\t"
- "btst r0l,@%2\n\t"
- "bnot r0l,@%2\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bnot r0l,r1l\n\t"
"stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
"ldc r0h,ccr\n\t"
- "btst #2,r0l\n\t"
- "bne 1f\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
return retval;
}
+#endif
+#if defined(__H8300S__)
+static __inline__ int test_and_change_bit(int nr, volatile unsigned long* addr)
+{
+ int retval;
+ unsigned char *a = (unsigned char *) addr;
+
+ a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
+ __asm__("mov.l %2,er0\n\t"
+ "stc exr,r0h\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.b %1,r1l\n\t"
+ "btst r0l,r1l\n\t"
+ "bnot r0l,r1l\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r1l,%1\n\t"
+ "ldc r0h,exr\n\t"
+ "sub.l %0,%0\n\t"
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","er1","memory");
+ return retval;
+}
+#endif
-extern __inline__ int __test_and_change_bit(int nr, volatile unsigned long* addr)
+static __inline__ int __test_and_change_bit(int nr, volatile unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
a += ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3));
- __asm__("mov.l %1,er0\n\t"
- "btst r0l,@%2\n\t"
- "bnot r0l,@%2\n\t"
- "beq 1f\n\t"
+ __asm__("mov.l %2,er0\n\t"
+ "mov.b %1,r0h\n\t"
+ "btst r0l,r0h\n\t"
+ "bnot r0l,r0h\n\t"
+ "stc ccr,r0l\n\t"
+ "mov.b r0h,%1\n\t"
"sub.l %0,%0\n\t"
- "inc.l #1,%0\n"
- "bra 2f\n"
- "1:\n\t"
- "sub.l %0,%0\n"
- "2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ "bild #2,r0l\n\t"
+ "rotxl.l %0"
+ : "=r"(retval),"=m"(*a) :"g"(nr & 7):"er0","memory");
return retval;
}
/*
* This routine doesn't need to be atomic.
*/
-extern __inline__ int __constant_test_bit(int nr, const volatile unsigned long* addr)
+static __inline__ int __constant_test_bit(int nr, const volatile unsigned long* addr)
{
- return ((1UL << (nr & 7)) &
- (((const volatile unsigned char *) addr)
- [((nr >> 3) & ~3) + 3 - ((nr >> 3) & 3)])) != 0;
+ return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
}
-extern __inline__ int __test_bit(int nr, volatile unsigned long* addr)
+static __inline__ int __test_bit(int nr, const unsigned long* addr)
{
int retval;
unsigned char *a = (unsigned char *) addr;
@@ -253,7 +303,7 @@
"1:\n\t"
"sub.l %0,%0\n"
"2:"
- : "=r"(retval) :"r"(nr & 7),"r"(a):"er0");
+ : "=r"(retval) :"g"(nr & 7),"r"(a):"er0");
return retval;
}
@@ -266,7 +316,7 @@
#define find_first_zero_bit(addr, size) \
find_next_zero_bit((addr), (size), 0)
-extern __inline__ int find_next_zero_bit (void * addr, int size, int offset)
+static __inline__ int find_next_zero_bit (void * addr, int size, int offset)
{
unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
unsigned long result = offset & ~31UL;
@@ -302,18 +352,19 @@
return result + ffz(tmp);
}
-extern __inline__ unsigned long ffs(unsigned long word)
+static __inline__ unsigned long ffs(unsigned long word)
{
- unsigned long result;
+ register unsigned long result asm("er0");
+ register unsigned long _word asm("er1");
- __asm__("sub.l er0,er0\n\t"
- "dec.l #1,er0\n"
+ _word = word;
+ __asm__("sub.l %0,%0\n\t"
+ "dec.l #1,%0\n"
"1:\n\t"
"shlr.l %1\n\t"
- "adds #1,er0\n\t"
- "bcc 1b\n\t"
- "mov.l er0,%0"
- : "=r" (result) : "r"(word) : "er0");
+ "adds #1,%0\n\t"
+ "bcc 1b"
+ : "=r" (result) : "r"(_word));
return result;
}
@@ -352,62 +403,50 @@
#define hweight16(x) generic_hweight16(x)
#define hweight8(x) generic_hweight8(x)
-extern __inline__ int ext2_set_bit(int nr, volatile void *addr)
+static __inline__ int ext2_set_bit(int nr, volatile void * addr)
{
- unsigned char *a = (unsigned char *) addr;
- register unsigned short r __asm__("er0");
- a += nr >> 3;
- __asm__("mov.l %1,er0\n\t"
- "sub.w e0,e0\n\t"
- "btst r0l,@%2\n\t"
- "bset r0l,@%2\n\t"
- "beq 1f\n\t"
- "inc.w #1,e0\n"
- "1:\n\t"
- "mov.w e0,r0\n\t"
- "sub.w e0,e0"
- :"=r"(r):"r"(nr & 7),"r"(a));
- return r;
+ int mask, retval;
+ unsigned long flags;
+ volatile unsigned char *ADDR = (unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ local_irq_save(flags);
+ retval = (mask & *ADDR) != 0;
+ *ADDR |= mask;
+ local_irq_restore(flags);
+ return retval;
}
-extern __inline__ int ext2_clear_bit(int nr, volatile void *addr)
+static __inline__ int ext2_clear_bit(int nr, volatile void * addr)
{
- unsigned char *a = (unsigned char *) addr;
- register unsigned short r __asm__("er0");
- a += nr >> 3;
- __asm__("mov.l %1,er0\n\t"
- "sub.w e0,e0\n\t"
- "btst r0l,@%2\n\t"
- "bclr r0l,@%2\n\t"
- "beq 1f\n\t"
- "inc.w #1,e0\n"
- "1:\n\t"
- "mov.w e0,r0\n\t"
- "sub.w e0,e0"
- :"=r"(r):"r"(nr & 7),"r"(a));
- return r;
+ int mask, retval;
+ unsigned long flags;
+ volatile unsigned char *ADDR = (unsigned char *) addr;
+
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ local_irq_save(flags);
+ retval = (mask & *ADDR) != 0;
+ *ADDR &= ~mask;
+ local_irq_restore(flags);
+ return retval;
}
-extern __inline__ int ext2_test_bit(int nr, volatile void *addr)
+static __inline__ int ext2_test_bit(int nr, const volatile void * addr)
{
- unsigned char *a = (unsigned char *) addr;
- int ret;
- a += nr >> 3;
- __asm__("mov.l %1,er0\n\t"
- "sub.l %0,%0\n\t"
- "btst r0l,@%2\n\t"
- "beq 1f\n\t"
- "inc.l #1,%0\n"
- "1:"
- : "=r"(ret) :"r"(nr & 7),"r"(a):"er0","er1");
- return ret;
-}
+ int mask;
+ const volatile unsigned char *ADDR = (const unsigned char *) addr;
+ ADDR += nr >> 3;
+ mask = 1 << (nr & 0x07);
+ return ((mask & *ADDR) != 0);
+}
#define ext2_find_first_zero_bit(addr, size) \
ext2_find_next_zero_bit((addr), (size), 0)
-extern __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
+static __inline__ unsigned long ext2_find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
{
unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
unsigned long result = offset & ~31UL;
diff -Nru linux-2.6.0-test2/include/asm-h8300/checksum.h linux-2.6.0-test2-h8300/include/asm-h8300/checksum.h
--- linux-2.6.0-test2/include/asm-h8300/checksum.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/checksum.h 2003-07-19 21:41:33.000000000 +0900
@@ -49,15 +49,15 @@
static inline unsigned int csum_fold(unsigned int sum)
{
__asm__("mov.l %0,er0\n\t"
- "sub.w r1,r1\n\t"
"add.w e0,r0\n\t"
- "addx #0,r1l\n\t"
- "add.w r1,r0\n\t"
+ "xor.w e0,e0\n\t"
+ "rotxl.w e0\n\t"
+ "add.w e0,r0\n\t"
"sub.w e0,e0\n\t"
"mov.l er0,%0"
: "=r"(sum)
: "0"(sum)
- : "er0","er1");
+ : "er0");
return ~sum;
}
diff -Nru linux-2.6.0-test2/include/asm-h8300/edosk2674/timer_rate.h linux-2.6.0-test2-h8300/include/asm-h8300/edosk2674/timer_rate.h
--- linux-2.6.0-test2/include/asm-h8300/edosk2674/timer_rate.h 1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/edosk2674/timer_rate.h 2003-07-20 01:18:09.000000000 +0900
@@ -0,0 +1,4 @@
+#include <linux/config.h>
+
+#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
diff -Nru linux-2.6.0-test2/include/asm-h8300/errno.h linux-2.6.0-test2-h8300/include/asm-h8300/errno.h
--- linux-2.6.0-test2/include/asm-h8300/errno.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/errno.h 2003-07-14 15:17:52.000000000 +0900
@@ -1,132 +1,6 @@
#ifndef _H8300_ERRNO_H
#define _H8300_ERRNO_H
-#define EPERM 1 /* Operation not permitted */
-#define ENOENT 2 /* No such file or directory */
-#define ESRCH 3 /* No such process */
-#define EINTR 4 /* Interrupted system call */
-#define EIO 5 /* I/O error */
-#define ENXIO 6 /* No such device or address */
-#define E2BIG 7 /* Arg list too long */
-#define ENOEXEC 8 /* Exec format error */
-#define EBADF 9 /* Bad file number */
-#define ECHILD 10 /* No child processes */
-#define EAGAIN 11 /* Try again */
-#define ENOMEM 12 /* Out of memory */
-#define EACCES 13 /* Permission denied */
-#define EFAULT 14 /* Bad address */
-#define ENOTBLK 15 /* Block device required */
-#define EBUSY 16 /* Device or resource busy */
-#define EEXIST 17 /* File exists */
-#define EXDEV 18 /* Cross-device link */
-#define ENODEV 19 /* No such device */
-#define ENOTDIR 20 /* Not a directory */
-#define EISDIR 21 /* Is a directory */
-#define EINVAL 22 /* Invalid argument */
-#define ENFILE 23 /* File table overflow */
-#define EMFILE 24 /* Too many open files */
-#define ENOTTY 25 /* Not a typewriter */
-#define ETXTBSY 26 /* Text file busy */
-#define EFBIG 27 /* File too large */
-#define ENOSPC 28 /* No space left on device */
-#define ESPIPE 29 /* Illegal seek */
-#define EROFS 30 /* Read-only file system */
-#define EMLINK 31 /* Too many links */
-#define EPIPE 32 /* Broken pipe */
-#define EDOM 33 /* Math argument out of domain of func */
-#define ERANGE 34 /* Math result not representable */
-#define EDEADLK 35 /* Resource deadlock would occur */
-#define ENAMETOOLONG 36 /* File name too long */
-#define ENOLCK 37 /* No record locks available */
-#define ENOSYS 38 /* Function not implemented */
-#define ENOTEMPTY 39 /* Directory not empty */
-#define ELOOP 40 /* Too many symbolic links encountered */
-#define EWOULDBLOCK EAGAIN /* Operation would block */
-#define ENOMSG 42 /* No message of desired type */
-#define EIDRM 43 /* Identifier removed */
-#define ECHRNG 44 /* Channel number out of range */
-#define EL2NSYNC 45 /* Level 2 not synchronized */
-#define EL3HLT 46 /* Level 3 halted */
-#define EL3RST 47 /* Level 3 reset */
-#define ELNRNG 48 /* Link number out of range */
-#define EUNATCH 49 /* Protocol driver not attached */
-#define ENOCSI 50 /* No CSI structure available */
-#define EL2HLT 51 /* Level 2 halted */
-#define EBADE 52 /* Invalid exchange */
-#define EBADR 53 /* Invalid request descriptor */
-#define EXFULL 54 /* Exchange full */
-#define ENOANO 55 /* No anode */
-#define EBADRQC 56 /* Invalid request code */
-#define EBADSLT 57 /* Invalid slot */
-
-#define EDEADLOCK EDEADLK
-
-#define EBFONT 59 /* Bad font file format */
-#define ENOSTR 60 /* Device not a stream */
-#define ENODATA 61 /* No data available */
-#define ETIME 62 /* Timer expired */
-#define ENOSR 63 /* Out of streams resources */
-#define ENONET 64 /* Machine is not on the network */
-#define ENOPKG 65 /* Package not installed */
-#define EREMOTE 66 /* Object is remote */
-#define ENOLINK 67 /* Link has been severed */
-#define EADV 68 /* Advertise error */
-#define ESRMNT 69 /* Srmount error */
-#define ECOMM 70 /* Communication error on send */
-#define EPROTO 71 /* Protocol error */
-#define EMULTIHOP 72 /* Multihop attempted */
-#define EDOTDOT 73 /* RFS specific error */
-#define EBADMSG 74 /* Not a data message */
-#define EOVERFLOW 75 /* Value too large for defined data type */
-#define ENOTUNIQ 76 /* Name not unique on network */
-#define EBADFD 77 /* File descriptor in bad state */
-#define EREMCHG 78 /* Remote address changed */
-#define ELIBACC 79 /* Can not access a needed shared library */
-#define ELIBBAD 80 /* Accessing a corrupted shared library */
-#define ELIBSCN 81 /* .lib section in a.out corrupted */
-#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
-#define ELIBEXEC 83 /* Cannot exec a shared library directly */
-#define EILSEQ 84 /* Illegal byte sequence */
-#define ERESTART 85 /* Interrupted system call should be restarted */
-#define ESTRPIPE 86 /* Streams pipe error */
-#define EUSERS 87 /* Too many users */
-#define ENOTSOCK 88 /* Socket operation on non-socket */
-#define EDESTADDRREQ 89 /* Destination address required */
-#define EMSGSIZE 90 /* Message too long */
-#define EPROTOTYPE 91 /* Protocol wrong type for socket */
-#define ENOPROTOOPT 92 /* Protocol not available */
-#define EPROTONOSUPPORT 93 /* Protocol not supported */
-#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
-#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
-#define EPFNOSUPPORT 96 /* Protocol family not supported */
-#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
-#define EADDRINUSE 98 /* Address already in use */
-#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
-#define ENETDOWN 100 /* Network is down */
-#define ENETUNREACH 101 /* Network is unreachable */
-#define ENETRESET 102 /* Network dropped connection because of reset */
-#define ECONNABORTED 103 /* Software caused connection abort */
-#define ECONNRESET 104 /* Connection reset by peer */
-#define ENOBUFS 105 /* No buffer space available */
-#define EISCONN 106 /* Transport endpoint is already connected */
-#define ENOTCONN 107 /* Transport endpoint is not connected */
-#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
-#define ETOOMANYREFS 109 /* Too many references: cannot splice */
-#define ETIMEDOUT 110 /* Connection timed out */
-#define ECONNREFUSED 111 /* Connection refused */
-#define EHOSTDOWN 112 /* Host is down */
-#define EHOSTUNREACH 113 /* No route to host */
-#define EALREADY 114 /* Operation already in progress */
-#define EINPROGRESS 115 /* Operation now in progress */
-#define ESTALE 116 /* Stale NFS file handle */
-#define EUCLEAN 117 /* Structure needs cleaning */
-#define ENOTNAM 118 /* Not a XENIX named type file */
-#define ENAVAIL 119 /* No XENIX semaphores available */
-#define EISNAM 120 /* Is a named type file */
-#define EREMOTEIO 121 /* Remote I/O error */
-#define EDQUOT 122 /* Quota exceeded */
-
-#define ENOMEDIUM 123 /* No medium found */
-#define EMEDIUMTYPE 124 /* Wrong medium type */
+#include <asm-generic/errno.h>
#endif /* _H8300_ERRNO_H */
diff -Nru linux-2.6.0-test2/include/asm-h8300/generic/timer_rate.h linux-2.6.0-test2-h8300/include/asm-h8300/generic/timer_rate.h
--- linux-2.6.0-test2/include/asm-h8300/generic/timer_rate.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/generic/timer_rate.h 2003-07-19 21:41:33.000000000 +0900
@@ -1,6 +1,6 @@
#include <linux/config.h>
-#if defined(CONFIG_H83007) || defined(CONFIG_H83068)
+#if defined(CONFIG_H83007) || defined(CONFIG_H83068) || defined(CONFIG_H8S2678)
#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
#endif
@@ -9,3 +9,7 @@
#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8
#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8
#endif
+
+#if !defined(H8300_TIMER_COUNT_DATA)
+#error illigal configuration
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/gpio.h linux-2.6.0-test2-h8300/include/asm-h8300/gpio.h
--- linux-2.6.0-test2/include/asm-h8300/gpio.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/gpio.h 2003-07-19 21:41:33.000000000 +0900
@@ -7,11 +7,17 @@
#define H8300_GPIO_P4 3
#define H8300_GPIO_P5 4
#define H8300_GPIO_P6 5
-/*#define H8300_GPIO_P7 6*/
+#define H8300_GPIO_P7 6
#define H8300_GPIO_P8 7
#define H8300_GPIO_P9 8
#define H8300_GPIO_PA 9
#define H8300_GPIO_PB 10
+#define H8300_GPIO_PC 11
+#define H8300_GPIO_PD 12
+#define H8300_GPIO_PE 13
+#define H8300_GPIO_PF 14
+#define H8300_GPIO_PG 15
+#define H8300_GPIO_PH 16
#define H8300_GPIO_B7 0x80
#define H8300_GPIO_B6 0x40
@@ -32,10 +38,10 @@
h8300_free_gpio(port, bits)
#define H8300_GPIO_DDR(port, bit, dir) \
- h8300_set_gpio_dir(((port) << 8) | bit, dir)
+ h8300_set_gpio_dir(((port) << 8) | (bit), dir)
#define H8300_GPIO_GETDIR(port, bit) \
- h8300_get_gpio_dir(((port) << 8) | bit)
+ h8300_get_gpio_dir(((port) << 8) | (bit))
extern int h8300_reserved_gpio(int port, int bits);
extern int h8300_free_gpio(int port, int bits);
diff -Nru linux-2.6.0-test2/include/asm-h8300/h8max/ne.h linux-2.6.0-test2-h8300/include/asm-h8300/h8max/ne.h
--- linux-2.6.0-test2/include/asm-h8300/h8max/ne.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/h8max/ne.h 2003-07-19 21:41:33.000000000 +0900
@@ -1,5 +1,8 @@
/* H8MAX RTL8019AS Config */
+#ifndef __H8300_H8MAX_NE__
+#define __H8300_H8MAX_NE__
+
#define NE2000_ADDR 0x800600
#define NE2000_IRQ 4
#define NE2000_IRQ_VECTOR (12 + NE2000_IRQ)
@@ -33,6 +36,14 @@
# undef insw
#endif
#define insw(a,p,l) h8max_insw((a) - NE2000_ADDR,(unsigned short *)p,l)
+#if defined(outsb)
+# undef outsb
+#endif
+#define outsb(a,p,l) h8max_outsb((a) - NE2000_ADDR,(unsigned char *)p,l)
+#if defined(insb)
+# undef insb
+#endif
+#define insb(a,p,l) h8max_insb((a) - NE2000_ADDR,(unsigned char *)p,l)
#define H8300_INIT_NE() \
do { \
@@ -69,3 +80,18 @@
}
}
+static inline void h8max_outsb(unsigned char a,unsigned char *p,unsigned long l)
+{
+ for (; l != 0; --l, p++) {
+ *(unsigned short *)(NE2000_ADDR + (a << 1)) = *p;
+ }
+}
+
+static inline void h8max_insb(unsigned char a,unsigned char *p,unsigned long l)
+{
+ for (; l != 0; --l, p++) {
+ *p = *((unsigned char *)(NE2000_ADDR + (a << 1))+1);
+ }
+}
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/h8max/timer_rate.h linux-2.6.0-test2-h8300/include/asm-h8300/h8max/timer_rate.h
--- linux-2.6.0-test2/include/asm-h8300/h8max/timer_rate.h 1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/h8max/timer_rate.h 2003-07-20 01:19:25.000000000 +0900
@@ -0,0 +1,10 @@
+#ifndef __H8300_H8MAX_TIMER_RATE__
+#define __H8300_H8MAX_TIMER_RATE__
+
+#include <linux/config.h>
+
+#define H8300_TIMER_COUNT_DATA CONFIG_CPU_CLOCK*10/8192
+#define H8300_TIMER_FREQ CONFIG_CPU_CLOCK*1000/8192
+
+#endif
+
diff -Nru linux-2.6.0-test2/include/asm-h8300/io.h linux-2.6.0-test2-h8300/include/asm-h8300/io.h
--- linux-2.6.0-test2/include/asm-h8300/io.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/io.h 2003-07-14 15:17:52.000000000 +0900
@@ -41,15 +41,15 @@
}
#define readb(addr) \
- ({ unsigned char __v = (*(volatile unsigned char *) (addr)); __v; })
+ ({ unsigned char __v = (*(volatile unsigned char *) (addr & 0x00ffffff)); __v; })
#define readw(addr) \
- ({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; })
+ ({ unsigned short __v = (*(volatile unsigned short *) (addr & 0x00ffffff)); __v; })
#define readl(addr) \
- ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
+ ({ unsigned int __v = (*(volatile unsigned int *) (addr & 0x00ffffff)); __v; })
-#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
-#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
-#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
+#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr & 0x00ffffff)) = (b))
+#define writew(b,addr) (void)((*(volatile unsigned short *) (addr & 0x00ffffff)) = (b))
+#define writel(b,addr) (void)((*(volatile unsigned int *) (addr & 0x00ffffff)) = (b))
/*
* The following are some defines we need for MTD with our
@@ -146,7 +146,7 @@
#define insw(a,b,l) io_insw(a,b,l)
#define insl(a,b,l) io_insl(a,b,l)
-#define IO_SPACE_LIMIT 0xffff
+#define IO_SPACE_LIMIT 0xffffff
/* Values for nocacheflag and cmode */
diff -Nru linux-2.6.0-test2/include/asm-h8300/irq.h linux-2.6.0-test2-h8300/include/asm-h8300/irq.h
--- linux-2.6.0-test2/include/asm-h8300/irq.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/irq.h 2003-07-14 15:17:52.000000000 +0900
@@ -1,17 +1,14 @@
#ifndef _H8300_IRQ_H_
#define _H8300_IRQ_H_
-#define SYS_IRQS 64
-
-#define NR_IRQS 64
-
#include <asm/ptrace.h>
-/*
- * "Generic" interrupt sources
- */
-
-#define IRQ_SCHED_TIMER (40) /* interrupt source for scheduling timer */
+#if defined(CONFIG_CPU_H8300H)
+#define NR_IRQS 64
+#endif
+#if defined(CONFIG_CPU_H8S)
+#define NR_IRQS 128
+#endif
static __inline__ int irq_canonicalize(int irq)
{
@@ -21,32 +18,6 @@
extern void enable_irq(unsigned int);
extern void disable_irq(unsigned int);
-extern int sys_request_irq(unsigned int,
- void (*)(int, void *, struct pt_regs *),
- unsigned long, const char *, void *);
-extern void sys_free_irq(unsigned int, void *);
-
-typedef struct irq_node {
- void (*handler)(int, void *, struct pt_regs *);
- unsigned long flags;
- void *dev_id;
- const char *devname;
- struct irq_node *next;
-} irq_node_t;
-
-/*
- * This structure has only 4 elements for speed reasons
- */
-typedef struct irq_handler {
- void (*handler)(int, void *, struct pt_regs *);
- unsigned long flags;
- void *dev_id;
- const char *devname;
-} irq_handler_t;
-
-/* count of spurious interrupts */
-extern volatile unsigned int num_spurious;
-
/*
* Some drivers want these entry points
*/
diff -Nru linux-2.6.0-test2/include/asm-h8300/local.h linux-2.6.0-test2-h8300/include/asm-h8300/local.h
--- linux-2.6.0-test2/include/asm-h8300/local.h 1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/local.h 2003-07-28 12:40:18.000000000 +0900
@@ -0,0 +1,6 @@
+#ifndef _H8300_LOCAL_H_
+#define _H8300_LOCAL_H_
+
+#include <asm-generic/local.h>
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/pgtable.h linux-2.6.0-test2-h8300/include/asm-h8300/pgtable.h
--- linux-2.6.0-test2/include/asm-h8300/pgtable.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/pgtable.h 2003-07-19 22:32:18.000000000 +0900
@@ -15,6 +15,9 @@
#define pgd_clear(pgdp)
#define kern_addr_valid(addr) (1)
#define pmd_offset(a, b) ((void *)0)
+#define pmd_none(pmd) (1)
+#define pgd_offset_k(adrdress) ((pgd_t *)0)
+#define pte_offset_kernel(dir, address) ((pte_t *)0)
#define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
#define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
@@ -31,6 +34,8 @@
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
+static inline int pte_file(pte_t pte) { return 0; }
+
/*
* ZERO_PAGE is a global shared page that is always zero: used
* for zero-mapped memory areas etc..
@@ -49,4 +54,18 @@
#define pgtable_cache_init() do { } while (0)
#define io_remap_page_range remap_page_range
+/*
+ * All 32bit addresses are effectively valid for vmalloc...
+ * Sort of meaningless for non-VM targets.
+ */
+#define VMALLOC_START 0
+#define VMALLOC_END 0xffffffff
+
+/*
+ * All 32bit addresses are effectively valid for vmalloc...
+ * Sort of meaningless for non-VM targets.
+ */
+#define VMALLOC_START 0
+#define VMALLOC_END 0xffffffff
+
#endif /* _H8300_PGTABLE_H */
diff -Nru linux-2.6.0-test2/include/asm-h8300/processor.h linux-2.6.0-test2-h8300/include/asm-h8300/processor.h
--- linux-2.6.0-test2/include/asm-h8300/processor.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/processor.h 2003-07-19 21:41:33.000000000 +0900
@@ -52,17 +52,16 @@
#define MCA_bus 0
struct thread_struct {
- unsigned long ksp; /* kernel stack pointer */
- unsigned long usp; /* user stack pointer */
- unsigned short ccr; /* saved status register */
- unsigned long esp0; /* points to SR of stack frame */
- unsigned long vfork_ret;
- unsigned long debugreg[8]; /* debug info */
-} __attribute__((aligned(2),packed));
+ unsigned long ksp; /* kernel stack pointer */
+ unsigned long usp; /* user stack pointer */
+ unsigned long ccr; /* saved status register */
+ unsigned long esp0; /* points to SR of stack frame */
+ unsigned long debugreg[8]; /* debug info */
+};
#define INIT_THREAD { \
sizeof(init_stack) + (unsigned long) init_stack, 0, \
- PS_S, 0, 0, \
+ PS_S, \
}
/*
@@ -71,13 +70,25 @@
* pass the data segment into user programs if it exists,
* it can't hurt anything as far as I can tell
*/
+#if defined(__H8300S__)
#define start_thread(_regs, _pc, _usp) \
do { \
+ set_fs(USER_DS); /* reads from user space */ \
+ (_regs)->pc = (_pc); \
+ (_regs)->ccr &= ~0x10; /* clear kernel flag */ \
+} while(0)
+#endif
+#if defined(__H8300S__)
+#define start_thread(_regs, _pc, _usp) \
+do { \
+ set_fs(USER_DS); /* reads from user space */ \
(_regs)->pc = (_pc); \
- (_regs)->ccr &= ~0x10; \
- *((unsigned long *)(_usp)-1) = _pc; \
- wrusp((unsigned long)(_usp) - sizeof(unsigned long)*3); \
+ (_regs)->ccr &= ~0x10; /* clear kernel flag */ \
+ (_regs)->exr = 0x78; /* enable all interrupts */ \
+ /* 14 = space for retaddr(4), vector(4), er0(4) and ext(2) on stack */ \
+ wrusp(((unsigned long)(_usp)) - 14); \
} while(0)
+#endif
/* Forward declaration, a strange C thing */
struct task_struct;
diff -Nru linux-2.6.0-test2/include/asm-h8300/ptrace.h linux-2.6.0-test2-h8300/include/asm-h8300/ptrace.h
--- linux-2.6.0-test2/include/asm-h8300/ptrace.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/ptrace.h 2003-07-14 15:17:52.000000000 +0900
@@ -19,6 +19,10 @@
stack during a system call. */
struct pt_regs {
+ long retpc;
+ long er4;
+ long er5;
+ long er6;
long er3;
long er2;
long er1;
@@ -26,20 +30,12 @@
unsigned short ccr;
long er0;
long vector;
+#if defined(CONFIG_CPU_H8S)
+ unsigned short exr;
+#endif
unsigned long pc;
} __attribute__((aligned(2),packed));
-/*
- * This is the extended stack used by signal handlers and the context
- * switcher: it's pushed after the normal "struct pt_regs".
- */
-struct switch_stack {
- unsigned long er6;
- unsigned long er5;
- unsigned long er4;
- unsigned long retpc;
-};
-
#define PTRACE_GETREGS 12
#define PTRACE_SETREGS 13
diff -Nru linux-2.6.0-test2/include/asm-h8300/regs306x.h linux-2.6.0-test2-h8300/include/asm-h8300/regs306x.h
--- linux-2.6.0-test2/include/asm-h8300/regs306x.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/regs306x.h 2003-07-19 21:41:33.000000000 +0900
@@ -6,7 +6,7 @@
#if defined(__KERNEL__)
-#define DASTCR *(volatile unsigned char *)0xFEE01A
+#define DASTCR 0xFEE01A
#define DADR0 0xFEE09C
#define DADR1 0xFEE09D
#define DACR 0xFEE09E
diff -Nru linux-2.6.0-test2/include/asm-h8300/sections.h linux-2.6.0-test2-h8300/include/asm-h8300/sections.h
--- linux-2.6.0-test2/include/asm-h8300/sections.h 1970-01-01 09:00:00.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/sections.h 2003-07-28 12:40:18.000000000 +0900
@@ -0,0 +1,6 @@
+#ifndef _H8300_SECTIONS_H_
+#define _H8300_SECTIONS_H_
+
+#include <asm-generic/sections.h>
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/semaphore.h linux-2.6.0-test2-h8300/include/asm-h8300/semaphore.h
--- linux-2.6.0-test2/include/asm-h8300/semaphore.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/semaphore.h 2003-07-28 12:40:18.000000000 +0900
@@ -51,7 +51,7 @@
#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
-extern inline void sema_init (struct semaphore *sem, int val)
+static inline void sema_init (struct semaphore *sem, int val)
{
*sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val);
}
@@ -83,92 +83,187 @@
* "down_failed" is a special asm handler that calls the C
* routine that actually waits. See arch/m68k/lib/semaphore.S
*/
-extern inline void down(struct semaphore * sem)
+#if defined(__H8300H__)
+static inline void down(struct semaphore * sem)
{
+ register atomic_t *count asm("er0");
+
#if WAITQUEUE_DEBUG
CHECK_MAGIC(sem->__magic);
#endif
+ count = &(sem->count);
__asm__ __volatile__(
- "stc ccr,r4l\n\t"
+ "stc ccr,r3l\n\t"
"orc #0x80,ccr\n\t"
- "mov.l @%0, er0\n\t"
- "dec.l #1,er0\n\t"
- "mov.l er0,@%0\n\t"
+ "mov.l @%1, er1\n\t"
+ "dec.l #1,er1\n\t"
+ "mov.l er1,@%1\n\t"
"bpl 1f\n\t"
- "ldc r4l,ccr\n\t"
- "mov.l %0,er0\n\t"
- "jsr @___down\n"
+ "ldc r3l,ccr\n\t"
+ "jsr @___down\n\t"
+ "bra 2f\n"
"1:\n\t"
- "ldc r4l,ccr"
- : /* no outputs */
- : "r" (&(sem->count))
- : "cc", "er0", "er1", "er2", "er3", "er4", "memory");
+ "ldc r3l,ccr\n"
+ "2:"
+ : "=m"(sem->count)
+ : "g" (count)
+ : "cc", "er1", "er2", "er3", "er4", "memory");
+}
+#endif
+#if defined(__H8300S__)
+static inline void down(struct semaphore * sem)
+{
+ register atomic_t *count asm("er0");
+
+#if WAITQUEUE_DEBUG
+ CHECK_MAGIC(sem->__magic);
+#endif
+
+ count = &(sem->count);
+ __asm__ __volatile__(
+ "stc exr,r3l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l @%1, er1\n\t"
+ "dec.l #1,er1\n\t"
+ "mov.l er1,@%1\n\t"
+ "ldc r3l,exr\n\t"
+ "bpl 1f\n\t"
+ "jsr @___down\n"
+ "1:"
+ : "=m"(sem->count)
+ : "r" (count)
+ : "cc", "er1", "er2", "er3", "memory");
}
+#endif
-extern inline int down_interruptible(struct semaphore * sem)
+#if defined(__H8300H__)
+static inline int down_interruptible(struct semaphore * sem)
{
- register int ret __asm__("er0");
+ register atomic_t *count asm("er0");
#if WAITQUEUE_DEBUG
CHECK_MAGIC(sem->__magic);
#endif
+ count = &(sem->count);
__asm__ __volatile__(
- "stc ccr,r1l\n\t"
+ "stc ccr,r3l\n\t"
"orc #0x80,ccr\n\t"
- "mov.l @%1, er2\n\t"
+ "mov.l @%2, er2\n\t"
"dec.l #1,er2\n\t"
- "mov.l er2,@%1\n\t"
+ "mov.l er2,@%2\n\t"
"bpl 1f\n\t"
- "ldc r1l,ccr\n\t"
- "mov.l %1,er0\n\t"
+ "ldc r3l,ccr\n\t"
"jsr @___down_interruptible\n\t"
"bra 2f\n"
"1:\n\t"
- "ldc r1l,ccr\n\t"
+ "ldc r3l,ccr\n\t"
+ "sub.l %0,%0\n"
+ "2:"
+ : "=r" (count),"=m"(sem->count)
+ : "r" (count)
+ : "cc", "er1", "er2", "er3", "memory");
+ return (int)count;
+}
+#endif
+#if defined(__H8300S__)
+static inline int down_interruptible(struct semaphore * sem)
+{
+ register atomic_t *count asm("er0");
+
+#if WAITQUEUE_DEBUG
+ CHECK_MAGIC(sem->__magic);
+#endif
+
+ count = &(sem->count);
+ __asm__ __volatile__(
+ "stc exr,r3l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l @%2, er2\n\t"
+ "dec.l #1,er2\n\t"
+ "mov.l er2,@%2\n\t"
+ "ldc r3l,exr\n\t"
+ "bmi 1f\n\t"
"sub.l %0,%0\n\t"
- "2:\n\t"
- : "=r" (ret)
- : "r" (&(sem->count))
+ "bra 2f\n"
+ "1:\n\t"
+ "jsr @___down_interruptible\n"
+ "2:"
+ : "=r" (count),"=m"(sem->count)
+ : "r" (count)
: "cc", "er1", "er2", "er3", "memory");
- return ret;
+ return (int)count;
}
+#endif
-extern inline int down_trylock(struct semaphore * sem)
+#if defined(__H8300H__)
+static inline int down_trylock(struct semaphore * sem)
{
- register int result;
+ register atomic_t *count asm("er0");
#if WAITQUEUE_DEBUG
CHECK_MAGIC(sem->__magic);
#endif
+ count = &(sem->count);
__asm__ __volatile__(
- "stc ccr,r4l\n\t"
+ "stc ccr,r3l\n\t"
"orc #0x80,ccr\n\t"
- "mov.l @%1,er0\n\t"
- "dec.l #1,er0\n\t"
- "mov.l er0,@%1\n\t"
+ "mov.l @%2,er2\n\t"
+ "dec.l #1,er2\n\t"
+ "mov.l er2,@%2\n\t"
"bpl 1f\n\t"
- "ldc r4l,ccr\n\t"
+ "ldc r3l,ccr\n\t"
"jmp @3f\n"
"1:\n\t"
- "ldc r4l,ccr\n\t"
+ "ldc r3l,ccr\n\t"
"sub.l %0,%0\n"
- "2:\n"
- ".section .text.lock,\"ax\"\n"
- ".align 2\n"
+ LOCK_SECTION_START(".align 2\n\t")
"3:\n\t"
- "mov.l %1,er0\n\t"
- "jsr @___down_trylock\n"
- "mov.l er0,%0\n\t"
- "jmp @2b\n\t"
- ".previous"
- : "=r" (result)
- : "r" (&(sem->count))
- : "cc", "er0","er4", "memory");
- return result;
+ "jsr @___down_trylock\n\t"
+ "jmp @2f\n\t"
+ LOCK_SECTION_END
+ "2:"
+ : "=r" (count),"=m"(sem->count)
+ : "r" (count)
+ : "cc", "er2", "er3", "memory");
+ return (int)count;
}
+#endif
+#if defined(__H8300S__)
+static inline int down_trylock(struct semaphore * sem)
+{
+ register atomic_t *count asm("er0");
+
+#if WAITQUEUE_DEBUG
+ CHECK_MAGIC(sem->__magic);
+#endif
+
+ count = &(sem->count);
+ __asm__ __volatile__(
+ "stc exr,r3l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l @%2,er2\n\t"
+ "dec.l #1,er2\n\t"
+ "mov.l er2,@%2\n\t"
+ "ldc r3l,exr\n\t"
+ "bpl 1f\n\t"
+ "jmp @3f\n"
+ "1:\n\t"
+ "sub.l %0,%0\n\t"
+ LOCK_SECTION_START(".align 2\n\t")
+ "3:\n\t"
+ "jsr @___down_trylock\n\t"
+ "jmp @2f\n\t"
+ LOCK_SECTION_END
+ "2:\n\t"
+ : "=r" (count),"=m"(sem->count)
+ : "r" (count)
+ : "cc", "er1", "er2", "er3", "memory");
+ return (int)count;
+}
+#endif
/*
* Note! This is subtle. We jump to wake people up only if
@@ -176,30 +271,60 @@
* The default case (no contention) will result in NO
* jumps for both down() and up().
*/
-extern inline void up(struct semaphore * sem)
+#if defined(__H8300H__)
+static inline void up(struct semaphore * sem)
{
+ register atomic_t *count asm("er0");
+
#if WAITQUEUE_DEBUG
CHECK_MAGIC(sem->__magic);
#endif
+ count = &(sem->count);
__asm__ __volatile__(
- "stc ccr,r4l\n\t"
+ "stc ccr,r3l\n\t"
"orc #0x80,ccr\n\t"
- "mov.l @%0,er0\n\t"
- "inc.l #1,er0\n\t"
- "mov.l er0,@%0\n\t"
- "bmi 1f\n\t"
- "bne 2f\n\t"
- "1:\n\t"
- "ldc r4l,ccr\n\t"
- "mov.l %0,er0\n\t"
+ "mov.l @%1,er1\n\t"
+ "inc.l #1,er1\n\t"
+ "mov.l er1,@%1\n\t"
+ "ldc r3l,ccr\n\t"
+ "sub.l er2,er2\n\t"
+ "cmp.l er2,er1\n\t"
+ "bgt 1f\n\t"
"jsr @___up\n"
- "2:\n\t"
- "ldc r4l,ccr"
- : /* no outputs */
- : "r" (&(sem->count))
- : "cc", "er0", "er4", "memory");
+ "1:"
+ : "=m"(sem->count)
+ : "r" (count)
+ : "cc", "er1", "er2", "er3", "memory");
}
+#endif
+#if defined(__H8300S__)
+static inline void up(struct semaphore * sem)
+{
+ register atomic_t *count asm("er0");
+
+#if WAITQUEUE_DEBUG
+ CHECK_MAGIC(sem->__magic);
+#endif
+
+ count = &(sem->count);
+ __asm__ __volatile__(
+ "stc exr,r3l\n\t"
+ "orc #0x07,exr\n\t"
+ "mov.l @%1,er1\n\t"
+ "inc.l #1,er1\n\t"
+ "mov.l er1,@%1\n\t"
+ "ldc r3l,exr\n\t"
+ "sub.l er2,er2\n\t"
+ "cmp.l er2,er1\n\t"
+ "bgt 1f\n\t"
+ "jsr @___up\n"
+ "1:"
+ : "=m"(sem->count)
+ : "r" (count)
+ : "cc", "er1", "er2", "er3", "memory");
+}
+#endif
#endif /* __ASSEMBLY__ */
diff -Nru linux-2.6.0-test2/include/asm-h8300/system.h linux-2.6.0-test2-h8300/include/asm-h8300/system.h
--- linux-2.6.0-test2/include/asm-h8300/system.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/system.h 2003-07-19 21:41:33.000000000 +0900
@@ -36,17 +36,20 @@
* H8/300 Porting 2002/09/04 Yoshinori Sato
*/
asmlinkage void resume(void);
-#define switch_to(prev,next,last) { \
- void *_last; \
- __asm__ __volatile__( \
- "mov.l %1, er0\n\t" \
- "mov.l %2, er1\n\t" \
- "jsr @_resume" \
- : "=r" (_last) \
- : "r" (&(prev->thread)), \
- "r" (&(next->thread)) \
- : "cc", "er0", "er1", "er2", "er3"); \
- (last) = _last; \
+#define switch_to(prev,next,last) { \
+ void *_last; \
+ __asm__ __volatile__( \
+ "mov.l %1, er0\n\t" \
+ "mov.l %2, er1\n\t" \
+ "mov.l %3, er2\n\t" \
+ "jsr @_resume\n\t" \
+ "mov.l er2,%0\n\t" \
+ : "=r" (_last) \
+ : "r" (&(prev->thread)), \
+ "r" (&(next->thread)), \
+ "g" (prev) \
+ : "cc", "er0", "er1", "er2", "er3"); \
+ (last) = _last; \
}
#if defined(__H8300H__)
@@ -54,17 +57,25 @@
#define __cli() asm volatile ("orc #0x80,ccr")
#define __save_flags(x) \
- asm volatile ("sub.l er0,er0\n\tstc ccr,r0l\n\tmov.l er0,%0":"=r" (x) : : "er0")
+ asm volatile ("stc ccr,r0l\n\tmov.l er0,%0":"=r" (x) : : "er0")
#define __restore_flags(x) \
asm volatile ("mov.l %0,er0\n\tldc r0l,ccr": :"r" (x) : "er0")
+
+#define irqs_disabled() \
+({ \
+ unsigned long flags; \
+ __save_flags(flags); \
+ ((flags & 0x80) == 0x80); \
+})
+
#endif
#if defined(__H8300S__)
#define __sti() asm volatile ("andc #0xf8,exr")
#define __cli() asm volatile ("orc #0x07,exr")
#define __save_flags(x) \
- asm volatile ("sub.l er0,er0\n\tstc exr,r0l\n\tmov.l er0,%0":"=r" (x) : : "er0")
+ asm volatile ("stc exr,r0l\n\tmov.l er0,%0":"=r" (x) : : "er0")
#define __restore_flags(x) \
asm volatile ("mov.l %0,er0\n\tldc r0l,exr": :"r" (x) : "er0")
@@ -73,22 +84,22 @@
#define irqs_disabled() \
({ \
unsigned long flags; \
- __save_flags(flags); \
- ((flags & 0x80) == 0x80); \
+ __save_flags(flags); \
+ ((flags & 0x07) == 0x07); \
})
#define iret() __asm__ __volatile__ ("rte": : :"memory", "sp", "cc")
/* For spinlocks etc */
-#define local_irq_disable() asm volatile ("orc #0x80,ccr")
-#define local_irq_enable() asm volatile ("andc #0x7f,ccr")
+#define local_irq_disable() __cli()
+#define local_irq_enable() __sti()
#define local_irq_save(x) ({ __save_flags(x); local_irq_disable(); })
#define local_irq_restore(x) __restore_flags(x)
#define local_save_flags(x) __save_flags(x)
/*
* Force strict CPU ordering.
- * Not really required on m68k...
+ * Not really required on H8...
*/
#define nop() asm volatile ("nop"::)
#define mb() asm volatile ("" : : :"memory")
diff -Nru linux-2.6.0-test2/include/asm-h8300/target_time.h linux-2.6.0-test2-h8300/include/asm-h8300/target_time.h
--- linux-2.6.0-test2/include/asm-h8300/target_time.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/target_time.h 2003-07-14 15:17:52.000000000 +0900
@@ -1,4 +1,4 @@
extern int platform_timer_setup(void (*timer_int)(int, void *, struct pt_regs *));
extern void platform_timer_eoi(void);
-extern void platfrom_gettod(unsigned int *year, unsigned int *mon, unsigned int *day,
+extern void platform_gettod(unsigned int *year, unsigned int *mon, unsigned int *day,
unsigned int *hour, unsigned int *min, unsigned int *sec);
diff -Nru linux-2.6.0-test2/include/asm-h8300/thread_info.h linux-2.6.0-test2-h8300/include/asm-h8300/thread_info.h
--- linux-2.6.0-test2/include/asm-h8300/thread_info.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/thread_info.h 2003-07-14 15:17:52.000000000 +0900
@@ -59,7 +59,7 @@
"mov.l sp, %0 \n\t"
"and.l %1, %0"
: "=&r"(ti)
- : "r" (~(THREAD_SIZE-1))
+ : "g" (~(THREAD_SIZE-1))
);
return ti;
}
diff -Nru linux-2.6.0-test2/include/asm-h8300/tlb.h linux-2.6.0-test2-h8300/include/asm-h8300/tlb.h
--- linux-2.6.0-test2/include/asm-h8300/tlb.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/tlb.h 2003-07-19 21:41:33.000000000 +0900
@@ -1 +1,23 @@
+/*
+ include/asm-h8300/tlb.h
+*/
+
+#ifndef __H8300_TLB_H__
+#define __H8300_TLB_H__
+
+#define tlb_flush(tlb) do { } while(0)
+
+/*
+ include/asm-h8300/tlb.h
+*/
+
+#ifndef __H8300_TLB_H__
+#define __H8300_TLB_H__
+
+#define tlb_flush(tlb) do { } while(0)
+
#include <asm-generic/tlb.h>
+
+#endif
+
+#endif
diff -Nru linux-2.6.0-test2/include/asm-h8300/traps.h linux-2.6.0-test2-h8300/include/asm-h8300/traps.h
--- linux-2.6.0-test2/include/asm-h8300/traps.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/traps.h 2003-07-14 15:17:52.000000000 +0900
@@ -1,7 +1,7 @@
/*
- * linux/include/asm/traps.h
+ * linux/include/asm-h8300/traps.h
*
- * Copyright (C) 1993 Hamish Macdonald
+ * Copyright (C) 2003 Yoshinori Sato <ysato@users.sourceforge.jp>
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive
@@ -11,197 +11,18 @@
#ifndef _H8300_TRAPS_H
#define _H8300_TRAPS_H
-#if 0
-#ifndef __ASSEMBLY__
-
-typedef void (*e_vector)(void);
-
-extern e_vector vectors[];
-
-#endif
-
-#define VEC_BUSERR (2)
-#define VEC_ADDRERR (3)
-#define VEC_ILLEGAL (4)
-#define VEC_ZERODIV (5)
-#define VEC_CHK (6)
-#define VEC_TRAP (7)
-#define VEC_PRIV (8)
-#define VEC_TRACE (9)
-#define VEC_LINE10 (10)
-#define VEC_LINE11 (11)
-#define VEC_RESV1 (12)
-#define VEC_COPROC (13)
-#define VEC_FORMAT (14)
-#define VEC_UNINT (15)
-#define VEC_SPUR (24)
-#define VEC_INT1 (25)
-#define VEC_INT2 (26)
-#define VEC_INT3 (27)
-#define VEC_INT4 (28)
-#define VEC_INT5 (29)
-#define VEC_INT6 (30)
-#define VEC_INT7 (31)
-#define VEC_SYS (32)
-#define VEC_TRAP1 (33)
-#define VEC_TRAP2 (34)
-#define VEC_TRAP3 (35)
-#define VEC_TRAP4 (36)
-#define VEC_TRAP5 (37)
-#define VEC_TRAP6 (38)
-#define VEC_TRAP7 (39)
-#define VEC_TRAP8 (40)
-#define VEC_TRAP9 (41)
-#define VEC_TRAP10 (42)
-#define VEC_TRAP11 (43)
-#define VEC_TRAP12 (44)
-#define VEC_TRAP13 (45)
-#define VEC_TRAP14 (46)
-#define VEC_TRAP15 (47)
-#define VEC_FPBRUC (48)
-#define VEC_FPIR (49)
-#define VEC_FPDIVZ (50)
-#define VEC_FPUNDER (51)
-#define VEC_FPOE (52)
-#define VEC_FPOVER (53)
-#define VEC_FPNAN (54)
-#define VEC_FPUNSUP (55)
-#define VEC_UNIMPEA (60)
-#define VEC_UNIMPII (61)
-#define VEC_USER (64)
-
-#define VECOFF(vec) ((vec)<<2)
-
-#ifndef __ASSEMBLY__
-
-/* Status register bits */
-#define PS_T (0x8000)
-#define PS_S (0x2000)
-#define PS_M (0x1000)
-#define PS_C (0x0001)
-
-/* bits for 68020/68030 special status word */
-
-#define FC (0x8000)
-#define FB (0x4000)
-#define RC (0x2000)
-#define RB (0x1000)
-#define DF (0x0100)
-#define RM (0x0080)
-#define RW (0x0040)
-#define SZ (0x0030)
-#define DFC (0x0007)
-
-/* bits for 68030 MMU status register (mmusr,psr) */
-
-#define MMU_B (0x8000) /* bus error */
-#define MMU_L (0x4000) /* limit violation */
-#define MMU_S (0x2000) /* supervisor violation */
-#define MMU_WP (0x0800) /* write-protected */
-#define MMU_I (0x0400) /* invalid descriptor */
-#define MMU_M (0x0200) /* ATC entry modified */
-#define MMU_T (0x0040) /* transparent translation */
-#define MMU_NUM (0x0007) /* number of levels traversed */
-
-
-/* bits for 68040 special status word */
-#define CP_040 (0x8000)
-#define CU_040 (0x4000)
-#define CT_040 (0x2000)
-#define CM_040 (0x1000)
-#define MA_040 (0x0800)
-#define ATC_040 (0x0400)
-#define LK_040 (0x0200)
-#define RW_040 (0x0100)
-#define SIZ_040 (0x0060)
-#define TT_040 (0x0018)
-#define TM_040 (0x0007)
-
-/* bits for 68040 write back status word */
-#define WBV_040 (0x80)
-#define WBSIZ_040 (0x60)
-#define WBBYT_040 (0x20)
-#define WBWRD_040 (0x40)
-#define WBLNG_040 (0x00)
-#define WBTT_040 (0x18)
-#define WBTM_040 (0x07)
-
-/* bus access size codes */
-#define BA_SIZE_BYTE (0x20)
-#define BA_SIZE_WORD (0x40)
-#define BA_SIZE_LONG (0x00)
-#define BA_SIZE_LINE (0x60)
-
-/* bus access transfer type codes */
-#define BA_TT_MOVE16 (0x08)
-
-/* structure for stack frames */
-
-struct frame {
- struct pt_regs ptregs;
- union {
- struct {
- unsigned long iaddr; /* instruction address */
- } fmt2;
- struct {
- unsigned long effaddr; /* effective address */
- } fmt3;
- struct {
- unsigned long effaddr; /* effective address */
- unsigned long pc; /* pc of faulted instr */
- } fmt4;
- struct {
- unsigned long effaddr; /* effective address */
- unsigned short ssw; /* special status word */
- unsigned short wb3s; /* write back 3 status */
- unsigned short wb2s; /* write back 2 status */
- unsigned short wb1s; /* write back 1 status */
- unsigned long faddr; /* fault address */
- unsigned long wb3a; /* write back 3 address */
- unsigned long wb3d; /* write back 3 data */
- unsigned long wb2a; /* write back 2 address */
- unsigned long wb2d; /* write back 2 data */
- unsigned long wb1a; /* write back 1 address */
- unsigned long wb1dpd0; /* write back 1 data/push data 0*/
- unsigned long pd1; /* push data 1*/
- unsigned long pd2; /* push data 2*/
- unsigned long pd3; /* push data 3*/
- } fmt7;
- struct {
- unsigned long iaddr; /* instruction address */
- unsigned short int1[4]; /* internal registers */
- } fmt9;
- struct {
- unsigned short int1;
- unsigned short ssw; /* special status word */
- unsigned short isc; /* instruction stage c */
- unsigned short isb; /* instruction stage b */
- unsigned long daddr; /* data cycle fault address */
- unsigned short int2[2];
- unsigned long dobuf; /* data cycle output buffer */
- unsigned short int3[2];
- } fmta;
- struct {
- unsigned short int1;
- unsigned short ssw; /* special status word */
- unsigned short isc; /* instruction stage c */
- unsigned short isb; /* instruction stage b */
- unsigned long daddr; /* data cycle fault address */
- unsigned short int2[2];
- unsigned long dobuf; /* data cycle output buffer */
- unsigned short int3[4];
- unsigned long baddr; /* stage B address */
- unsigned short int4[2];
- unsigned long dibuf; /* data cycle input buffer */
- unsigned short int5[3];
- unsigned ver : 4; /* stack frame version # */
- unsigned int6:12;
- unsigned short int7[18];
- } fmtb;
- } un;
-};
-
-#endif /* __ASSEMBLY__ */
-#endif
+extern void system_call(void);
+extern void interrupt_entry(void);
+extern void trace_break(void);
+
+#define JMP_OP 0x5a000000
+#define JSR_OP 0x5e000000
+#define VECTOR(address) ((JMP_OP)|((unsigned long)address))
+#define REDIRECT(address) ((JSR_OP)|((unsigned long)address))
+
+#define TRAP0_VEC 8
+#define TRAP1_VEC 9
+#define TRAP2_VEC 10
+#define TRAP3_VEC 11
#endif /* _H8300_TRAPS_H */
diff -Nru linux-2.6.0-test2/include/asm-h8300/types.h linux-2.6.0-test2-h8300/include/asm-h8300/types.h
--- linux-2.6.0-test2/include/asm-h8300/types.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/types.h 2003-07-19 22:32:18.000000000 +0900
@@ -1,6 +1,8 @@
#ifndef _H8300_TYPES_H
#define _H8300_TYPES_H
+#if !defined(__ASSEMBLY__)
+
/*
* This file is never included by application software unless
* explicitly requested (e.g., via linux/types.h) in which case the
@@ -53,6 +55,11 @@
typedef u32 dma_addr_t;
+#define HAVE_SECTOR_T
+typedef u64 sector_t;
+
#endif /* __KERNEL__ */
+#endif /* __ASSEMBLY__ */
+
#endif /* _H8300_TYPES_H */
diff -Nru linux-2.6.0-test2/include/asm-h8300/uaccess.h linux-2.6.0-test2-h8300/include/asm-h8300/uaccess.h
--- linux-2.6.0-test2/include/asm-h8300/uaccess.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/uaccess.h 2003-07-14 15:17:52.000000000 +0900
@@ -14,16 +14,17 @@
#define VERIFY_WRITE 1
/* We let the MMU do all checking */
-extern inline int access_ok(int type, const void * addr, unsigned long size)
+#define access_ok(type, addr, size) __access_ok((unsigned long)addr,size)
+static inline int __access_ok(unsigned long addr, unsigned long size)
{
#define RANGE_CHECK_OK(addr, size, lower, upper) \
(((addr) >= (lower)) && (((addr) + (size)) < (upper)))
extern unsigned long _ramend;
- return(RANGE_CHECK_OK((unsigned long) addr, size, 0L, (unsigned long)&_ramend));
+ return(RANGE_CHECK_OK(addr, size, 0L, (unsigned long)&_ramend));
}
-extern inline int verify_area(int type, const void * addr, unsigned long size)
+static inline int verify_area(int type, const void *addr, unsigned long size)
{
return access_ok(type,addr,size)?0:-EFAULT;
}
diff -Nru linux-2.6.0-test2/include/asm-h8300/unistd.h linux-2.6.0-test2-h8300/include/asm-h8300/unistd.h
--- linux-2.6.0-test2/include/asm-h8300/unistd.h 2003-07-14 15:01:26.000000000 +0900
+++ linux-2.6.0-test2-h8300/include/asm-h8300/unistd.h 2003-07-14 15:17:52.000000000 +0900
@@ -405,8 +405,39 @@
"g" ((long)b), \
"g" ((long)c), \
"g" ((long)d), \
- "g" ((long)e) \
- : "cc", "er1", "er2", "er3", "er4"); \
+ "m" ((long)e) \
+ : "cc", "er1", "er2", "er3", "er4", "er5"); \
+ if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
+ errno = -__res; \
+ __res = -1; \
+ } \
+ return (type)__res; \
+}
+
+#define _syscall6(type, name, atype, a, btype, b, ctype, c, dtype, d, \
+ etype, e, ftype, f) \
+type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \
+{ \
+ register long __res __asm__("er0"); \
+ __asm__ __volatile__ ("mov.l er6,@-sp\n\t" \
+ "mov.l %7, er6\n\t" \
+ "mov.l %6, er5\n\t" \
+ "mov.l %5, er4\n\t" \
+ "mov.l %4, er3\n\t" \
+ "mov.l %3, er2\n\t" \
+ "mov.l %2, er1\n\t" \
+ "mov.l %1, er0\n\t" \
+ "trapa #0\n\t" \
+ "mov.l @sp+,er6" \
+ : "=r" (__res) \
+ : "ir" (__NR_##name), \
+ "g" ((long)a), \
+ "g" ((long)b), \
+ "g" ((long)c), \
+ "g" ((long)d), \
+ "m" ((long)e), \
+ "m" ((long)e) \
+ : "cc", "er1", "er2", "er3", "er4", "er5"); \
if ((unsigned long)(__res) >= (unsigned long)(-125)) { \
errno = -__res; \
__res = -1; \
reply other threads:[~2003-07-28 14:14 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2oezeag50.wl%ysato@users.sourceforge.jp \
--to=ysato@users.sourceforge.jp \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.