diff options
Diffstat (limited to 'toolchain/kernel-headers/linux-libc-headers-2.6.11-nios2nommu.patch.conditional')
| -rw-r--r-- | toolchain/kernel-headers/linux-libc-headers-2.6.11-nios2nommu.patch.conditional | 13527 | 
1 files changed, 0 insertions, 13527 deletions
diff --git a/toolchain/kernel-headers/linux-libc-headers-2.6.11-nios2nommu.patch.conditional b/toolchain/kernel-headers/linux-libc-headers-2.6.11-nios2nommu.patch.conditional deleted file mode 100644 index b8c3fff8f..000000000 --- a/toolchain/kernel-headers/linux-libc-headers-2.6.11-nios2nommu.patch.conditional +++ /dev/null @@ -1,13527 +0,0 @@ ---- linux/include/asm-generic/4level-fixup.h -+++ linux/include/asm-generic/4level-fixup.h -@@ -0,0 +1,34 @@ -+#ifndef _4LEVEL_FIXUP_H -+#define _4LEVEL_FIXUP_H -+ -+#define __ARCH_HAS_4LEVEL_HACK -+ -+#define PUD_SIZE			PGDIR_SIZE -+#define PUD_MASK			PGDIR_MASK -+#define PTRS_PER_PUD			1 -+ -+#define pud_t				pgd_t -+ -+#define pmd_alloc(mm, pud, address)			\ -+({	pmd_t *ret;					\ -+	if (pgd_none(*pud))				\ -+ 		ret = __pmd_alloc(mm, pud, address);	\ -+ 	else						\ -+		ret = pmd_offset(pud, address);		\ -+ 	ret;						\ -+}) -+ -+#define pud_alloc(mm, pgd, address)	(pgd) -+#define pud_offset(pgd, start)		(pgd) -+#define pud_none(pud)			0 -+#define pud_bad(pud)			0 -+#define pud_present(pud)		1 -+#define pud_ERROR(pud)			do { } while (0) -+#define pud_clear(pud)			pgd_clear(pud) -+ -+#undef pud_free_tlb -+#define pud_free_tlb(tlb, x)            do { } while (0) -+#define pud_free(x)			do { } while (0) -+#define __pud_free_tlb(tlb, x)		do { } while (0) -+ -+#endif ---- linux/include/asm-generic/bitops.h -+++ linux/include/asm-generic/bitops.h -@@ -0,0 +1,81 @@ -+#ifndef _ASM_GENERIC_BITOPS_H_ -+#define _ASM_GENERIC_BITOPS_H_ -+ -+/* -+ * For the benefit of those who are trying to port Linux to another -+ * architecture, here are some C-language equivalents.  You should -+ * recode these in the native assembly language, if at all possible. -+ * To guarantee atomicity, these routines call cli() and sti() to -+ * disable interrupts while they operate.  (You have to provide inline -+ * routines to cli() and sti().) -+ * -+ * Also note, these routines assume that you have 32 bit longs. -+ * You will have to change this if you are trying to port Linux to the -+ * Alpha architecture or to a Cray.  :-) -+ *  -+ * C language equivalents written by Theodore Ts'o, 9/26/92 -+ */ -+ -+extern __inline__ int set_bit(int nr,long * addr) -+{ -+	int	mask, retval; -+ -+	addr += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	cli(); -+	retval = (mask & *addr) != 0; -+	*addr |= mask; -+	sti(); -+	return retval; -+} -+ -+extern __inline__ int clear_bit(int nr, long * addr) -+{ -+	int	mask, retval; -+ -+	addr += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	cli(); -+	retval = (mask & *addr) != 0; -+	*addr &= ~mask; -+	sti(); -+	return retval; -+} -+ -+extern __inline__ int test_bit(int nr, const unsigned long * addr) -+{ -+	int	mask; -+ -+	addr += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	return ((mask & *addr) != 0); -+} -+ -+/* -+ * fls: find last bit set. -+ */ -+ -+#define fls(x) generic_fls(x) -+ -+#ifdef __KERNEL__ -+ -+/* -+ * ffs: find first bit set. This is defined the same way as -+ * the libc and compiler builtin ffs routines, therefore -+ * differs in spirit from the above ffz (man ffs). -+ */ -+ -+#define ffs(x) generic_ffs(x) -+ -+/* -+ * hweightN: returns the hamming weight (i.e. the number -+ * of bits set) of a N-bit word -+ */ -+ -+#define hweight32(x) generic_hweight32(x) -+#define hweight16(x) generic_hweight16(x) -+#define hweight8(x) generic_hweight8(x) -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _ASM_GENERIC_BITOPS_H */ ---- linux/include/asm-generic/bug.h -+++ linux/include/asm-generic/bug.h -@@ -0,0 +1,34 @@ -+#ifndef _ASM_GENERIC_BUG_H -+#define _ASM_GENERIC_BUG_H -+ -+#include <linux/compiler.h> -+// #include <linux/config.h> -+ -+#ifndef HAVE_ARCH_BUG -+#define BUG() do { \ -+	printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ -+	panic("BUG!"); \ -+} while (0) -+#endif -+ -+#ifndef HAVE_ARCH_PAGE_BUG -+#define PAGE_BUG(page) do { \ -+	printk("page BUG for page at %p\n", page); \ -+	BUG(); \ -+} while (0) -+#endif -+ -+#ifndef HAVE_ARCH_BUG_ON -+#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0) -+#endif -+ -+#ifndef HAVE_ARCH_WARN_ON -+#define WARN_ON(condition) do { \ -+	if (unlikely((condition)!=0)) { \ -+		printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \ -+		dump_stack(); \ -+	} \ -+} while (0) -+#endif -+ -+#endif ---- linux/include/asm-generic/cpumask_arith.h -+++ linux/include/asm-generic/cpumask_arith.h -@@ -0,0 +1,49 @@ -+#ifndef __ASM_GENERIC_CPUMASK_ARITH_H -+#define __ASM_GENERIC_CPUMASK_ARITH_H -+ -+/* -+ * Arithmetic type -based cpu bitmaps. A single unsigned long is used -+ * to contain the whole cpu bitmap. -+ */ -+ -+#define cpu_set(cpu, map)		set_bit(cpu, &(map)) -+#define cpu_clear(cpu, map)		clear_bit(cpu, &(map)) -+#define cpu_isset(cpu, map)		test_bit(cpu, &(map)) -+#define cpu_test_and_set(cpu, map)	test_and_set_bit(cpu, &(map)) -+ -+#define cpus_and(dst,src1,src2)		do { dst = (src1) & (src2); } while (0) -+#define cpus_or(dst,src1,src2)		do { dst = (src1) | (src2); } while (0) -+#define cpus_clear(map)			do { map = 0; } while (0) -+#define cpus_complement(map)		do { map = ~(map); } while (0) -+#define cpus_equal(map1, map2)		((map1) == (map2)) -+#define cpus_empty(map)			((map) == 0) -+#define cpus_addr(map)			(&(map)) -+ -+#if BITS_PER_LONG == 32 -+#define cpus_weight(map)		hweight32(map) -+#elif BITS_PER_LONG == 64 -+#define cpus_weight(map)		hweight64(map) -+#endif -+ -+#define cpus_shift_right(dst, src, n)	do { dst = (src) >> (n); } while (0) -+#define cpus_shift_left(dst, src, n)	do { dst = (src) << (n); } while (0) -+ -+#define any_online_cpu(map)			\ -+({						\ -+	cpumask_t __tmp__;			\ -+	cpus_and(__tmp__, map, cpu_online_map);	\ -+	__tmp__ ? first_cpu(__tmp__) : NR_CPUS;	\ -+}) -+ -+#define CPU_MASK_ALL	(~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS)) -+#define CPU_MASK_NONE	((cpumask_t)0) -+ -+/* only ever use this for things that are _never_ used on large boxen */ -+#define cpus_coerce(map)		((unsigned long)(map)) -+#define cpus_promote(map)		({ map; }) -+#define cpumask_of_cpu(cpu)		({ ((cpumask_t)1) << (cpu); }) -+ -+#define first_cpu(map)			__ffs(map) -+#define next_cpu(cpu, map)		find_next_bit(&(map), NR_CPUS, cpu + 1) -+ -+#endif /* __ASM_GENERIC_CPUMASK_ARITH_H */ ---- linux/include/asm-generic/cpumask_array.h -+++ linux/include/asm-generic/cpumask_array.h -@@ -0,0 +1,54 @@ -+#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H -+#define __ASM_GENERIC_CPUMASK_ARRAY_H -+ -+/* -+ * Array-based cpu bitmaps. An array of unsigned longs is used to contain -+ * the bitmap, and then contained in a structure so it may be passed by -+ * value. -+ */ -+ -+#define CPU_ARRAY_SIZE		BITS_TO_LONGS(NR_CPUS) -+ -+#define cpu_set(cpu, map)		set_bit(cpu, (map).mask) -+#define cpu_clear(cpu, map)		clear_bit(cpu, (map).mask) -+#define cpu_isset(cpu, map)		test_bit(cpu, (map).mask) -+#define cpu_test_and_set(cpu, map)	test_and_set_bit(cpu, (map).mask) -+ -+#define cpus_and(dst,src1,src2)	bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS) -+#define cpus_or(dst,src1,src2)	bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS) -+#define cpus_clear(map)		bitmap_clear((map).mask, NR_CPUS) -+#define cpus_complement(map)	bitmap_complement((map).mask, NR_CPUS) -+#define cpus_equal(map1, map2)	bitmap_equal((map1).mask, (map2).mask, NR_CPUS) -+#define cpus_empty(map)		bitmap_empty(map.mask, NR_CPUS) -+#define cpus_addr(map)		((map).mask) -+#define cpus_weight(map)		bitmap_weight((map).mask, NR_CPUS) -+#define cpus_shift_right(d, s, n)	bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS) -+#define cpus_shift_left(d, s, n)	bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS) -+#define first_cpu(map)		find_first_bit((map).mask, NR_CPUS) -+#define next_cpu(cpu, map)	find_next_bit((map).mask, NR_CPUS, cpu + 1) -+ -+/* only ever use this for things that are _never_ used on large boxen */ -+#define cpus_coerce(map)	((map).mask[0]) -+#define cpus_promote(map)	({ cpumask_t __cpu_mask = CPU_MASK_NONE;\ -+					__cpu_mask.mask[0] = map;	\ -+					__cpu_mask;			\ -+				}) -+#define cpumask_of_cpu(cpu)	({ cpumask_t __cpu_mask = CPU_MASK_NONE;\ -+					cpu_set(cpu, __cpu_mask);	\ -+					__cpu_mask;			\ -+				}) -+#define any_online_cpu(map)			\ -+({						\ -+	cpumask_t __tmp__;			\ -+	cpus_and(__tmp__, map, cpu_online_map);	\ -+	find_first_bit(__tmp__.mask, NR_CPUS);	\ -+}) -+ -+ -+/* -+ * um, these need to be usable as static initializers -+ */ -+#define CPU_MASK_ALL	{ {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} } -+#define CPU_MASK_NONE	{ {[0 ... CPU_ARRAY_SIZE-1] =  0UL} } -+ -+#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */ ---- linux/include/asm-generic/cpumask_const_reference.h -+++ linux/include/asm-generic/cpumask_const_reference.h -@@ -0,0 +1,29 @@ -+#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H -+#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H -+ -+struct cpumask_ref { -+	const cpumask_t *val; -+}; -+ -+typedef const struct cpumask_ref cpumask_const_t; -+ -+#define mk_cpumask_const(map)		((cpumask_const_t){ &(map) }) -+#define cpu_isset_const(cpu, map)	cpu_isset(cpu, *(map).val) -+ -+#define cpus_and_const(dst,src1,src2)	cpus_and(dst,*(src1).val,*(src2).val) -+#define cpus_or_const(dst,src1,src2)	cpus_or(dst,*(src1).val,*(src2).val) -+ -+#define cpus_equal_const(map1, map2)	cpus_equal(*(map1).val, *(map2).val) -+ -+#define cpus_copy_const(map1, map2)	bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS) -+ -+#define cpus_empty_const(map)		cpus_empty(*(map).val) -+#define cpus_weight_const(map)		cpus_weight(*(map).val) -+#define first_cpu_const(map)		first_cpu(*(map).val) -+#define next_cpu_const(cpu, map)	next_cpu(cpu, *(map).val) -+ -+/* only ever use this for things that are _never_ used on large boxen */ -+#define cpus_coerce_const(map)		cpus_coerce(*(map).val) -+#define any_online_cpu_const(map)	any_online_cpu(*(map).val) -+ -+#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */ ---- linux/include/asm-generic/cpumask_const_value.h -+++ linux/include/asm-generic/cpumask_const_value.h -@@ -0,0 +1,21 @@ -+#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H -+#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H -+ -+typedef const cpumask_t cpumask_const_t; -+ -+#define mk_cpumask_const(map)		(map) -+#define cpu_isset_const(cpu, map)	cpu_isset(cpu, map) -+#define cpus_and_const(dst,src1,src2)	cpus_and(dst, src1, src2) -+#define cpus_or_const(dst,src1,src2)	cpus_or(dst, src1, src2) -+#define cpus_equal_const(map1, map2)	cpus_equal(map1, map2) -+#define cpus_empty_const(map)		cpus_empty(map) -+#define cpus_copy_const(map1, map2)	do { map1 = (cpumask_t)map2; } while (0) -+#define cpus_weight_const(map)		cpus_weight(map) -+#define first_cpu_const(map)		first_cpu(map) -+#define next_cpu_const(cpu, map)	next_cpu(cpu, map) -+ -+/* only ever use this for things that are _never_ used on large boxen */ -+#define cpus_coerce_const(map)		cpus_coerce(map) -+#define any_online_cpu_const(map)	any_online_cpu(map) -+ -+#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */ ---- linux/include/asm-generic/cpumask.h -+++ linux/include/asm-generic/cpumask.h -@@ -0,0 +1,40 @@ -+#ifndef __ASM_GENERIC_CPUMASK_H -+#define __ASM_GENERIC_CPUMASK_H -+ -+// #include <linux/config.h> -+#include <linux/kernel.h> -+#include <linux/threads.h> -+#include <linux/types.h> -+#include <linux/bitmap.h> -+ -+#if NR_CPUS > BITS_PER_LONG && NR_CPUS != 1 -+#define CPU_ARRAY_SIZE		BITS_TO_LONGS(NR_CPUS) -+ -+struct cpumask -+{ -+	unsigned long mask[CPU_ARRAY_SIZE]; -+}; -+ -+typedef struct cpumask cpumask_t; -+ -+#else -+typedef unsigned long cpumask_t; -+#endif -+ -+#ifdef CONFIG_SMP -+#if NR_CPUS > BITS_PER_LONG -+#include <asm-generic/cpumask_array.h> -+#else -+#include <asm-generic/cpumask_arith.h> -+#endif -+#else -+#include <asm-generic/cpumask_up.h> -+#endif -+ -+#if NR_CPUS <= 4*BITS_PER_LONG -+#include <asm-generic/cpumask_const_value.h> -+#else -+#include <asm-generic/cpumask_const_reference.h> -+#endif -+ -+#endif /* __ASM_GENERIC_CPUMASK_H */ ---- linux/include/asm-generic/cpumask_up.h -+++ linux/include/asm-generic/cpumask_up.h -@@ -0,0 +1,59 @@ -+#ifndef __ASM_GENERIC_CPUMASK_UP_H -+#define __ASM_GENERIC_CPUMASK_UP_H -+ -+#define cpus_coerce(map)	(map) -+ -+#define cpu_set(cpu, map)		do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0) -+#define cpu_clear(cpu, map)		do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0) -+#define cpu_isset(cpu, map)		((void)(cpu), cpus_coerce(map) != 0UL) -+#define cpu_test_and_set(cpu, map)	((void)(cpu), test_and_set_bit(0, &(map))) -+ -+#define cpus_and(dst, src1, src2)					\ -+	do {								\ -+		if (cpus_coerce(src1) && cpus_coerce(src2))		\ -+			cpus_coerce(dst) = 1UL;				\ -+		else							\ -+			cpus_coerce(dst) = 0UL;				\ -+	} while (0) -+ -+#define cpus_or(dst, src1, src2)					\ -+	do {								\ -+		if (cpus_coerce(src1) || cpus_coerce(src2))		\ -+			cpus_coerce(dst) = 1UL;				\ -+		else							\ -+			cpus_coerce(dst) = 0UL;				\ -+	} while (0) -+ -+#define cpus_clear(map)			do { cpus_coerce(map) = 0UL; } while (0) -+ -+#define cpus_complement(map)						\ -+	do {								\ -+		cpus_coerce(map) = !cpus_coerce(map);			\ -+	} while (0) -+ -+#define cpus_equal(map1, map2)		(cpus_coerce(map1) == cpus_coerce(map2)) -+#define cpus_empty(map)			(cpus_coerce(map) == 0UL) -+#define cpus_addr(map)			(&(map)) -+#define cpus_weight(map)		(cpus_coerce(map) ? 1UL : 0UL) -+#define cpus_shift_right(d, s, n)	do { cpus_coerce(d) = 0UL; } while (0) -+#define cpus_shift_left(d, s, n)	do { cpus_coerce(d) = 0UL; } while (0) -+#define first_cpu(map)			(cpus_coerce(map) ? 0 : 1) -+#define next_cpu(cpu, map)		1 -+ -+/* only ever use this for things that are _never_ used on large boxen */ -+#define cpus_promote(map)						\ -+	({								\ -+		cpumask_t __tmp__;					\ -+		cpus_coerce(__tmp__) = map;				\ -+		__tmp__;						\ -+	}) -+#define cpumask_of_cpu(cpu)		((void)(cpu), cpus_promote(1)) -+#define any_online_cpu(map)		(cpus_coerce(map) ? 0 : 1) -+ -+/* -+ * um, these need to be usable as static initializers -+ */ -+#define CPU_MASK_ALL	1UL -+#define CPU_MASK_NONE	0UL -+ -+#endif /* __ASM_GENERIC_CPUMASK_UP_H */ ---- linux/include/asm-generic/cputime.h -+++ linux/include/asm-generic/cputime.h -@@ -0,0 +1,64 @@ -+#ifndef _ASM_GENERIC_CPUTIME_H -+#define _ASM_GENERIC_CPUTIME_H -+ -+#include <linux/time.h> -+#include <linux/jiffies.h> -+ -+typedef unsigned long cputime_t; -+ -+#define cputime_zero			(0UL) -+#define cputime_max			((~0UL >> 1) - 1) -+#define cputime_add(__a, __b)		((__a) +  (__b)) -+#define cputime_sub(__a, __b)		((__a) -  (__b)) -+#define cputime_eq(__a, __b)		((__a) == (__b)) -+#define cputime_gt(__a, __b)		((__a) >  (__b)) -+#define cputime_ge(__a, __b)		((__a) >= (__b)) -+#define cputime_lt(__a, __b)		((__a) <  (__b)) -+#define cputime_le(__a, __b)		((__a) <= (__b)) -+#define cputime_to_jiffies(__ct)	(__ct) -+#define jiffies_to_cputime(__hz)	(__hz) -+ -+typedef u64 cputime64_t; -+ -+#define cputime64_zero (0ULL) -+#define cputime64_add(__a, __b)		((__a) + (__b)) -+#define cputime64_to_jiffies64(__ct)	(__ct) -+#define cputime_to_cputime64(__ct)	((u64) __ct) -+ -+ -+/* -+ * Convert cputime to milliseconds and back. -+ */ -+#define cputime_to_msecs(__ct)		jiffies_to_msecs(__ct) -+#define msecs_to_cputime(__msecs)	msecs_to_jiffies(__msecs) -+ -+/* -+ * Convert cputime to seconds and back. -+ */ -+#define cputime_to_secs(jif)		((jif) / HZ) -+#define secs_to_cputime(sec)		((sec) * HZ) -+ -+/* -+ * Convert cputime to timespec and back. -+ */ -+#define timespec_to_cputime(__val)	timespec_to_jiffies(__val) -+#define cputime_to_timespec(__ct,__val)	jiffies_to_timespec(__ct,__val) -+ -+/* -+ * Convert cputime to timeval and back. -+ */ -+#define timeval_to_cputime(__val)	timeval_to_jiffies(__val) -+#define cputime_to_timeval(__ct,__val)	jiffies_to_timeval(__ct,__val) -+ -+/* -+ * Convert cputime to clock and back. -+ */ -+#define cputime_to_clock_t(__ct)	jiffies_to_clock_t(__ct) -+#define clock_t_to_cputime(__x)		clock_t_to_jiffies(__x) -+ -+/* -+ * Convert cputime64 to clock. -+ */ -+#define cputime64_to_clock_t(__ct)	jiffies_64_to_clock_t(__ct) -+ -+#endif ---- linux/include/asm-generic/div64.h -+++ linux/include/asm-generic/div64.h -@@ -0,0 +1,58 @@ -+#ifndef _ASM_GENERIC_DIV64_H -+#define _ASM_GENERIC_DIV64_H -+/* -+ * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com> -+ * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h -+ * -+ * The semantics of do_div() are: -+ * -+ * uint32_t do_div(uint64_t *n, uint32_t base) -+ * { -+ * 	uint32_t remainder = *n % base; -+ * 	*n = *n / base; -+ * 	return remainder; -+ * } -+ * -+ * NOTE: macro parameter n is evaluated multiple times, -+ *       beware of side effects! -+ */ -+ -+#include <linux/types.h> -+#include <linux/compiler.h> -+ -+#if BITS_PER_LONG == 64 -+ -+# define do_div(n,base) ({					\ -+	uint32_t __base = (base);				\ -+	uint32_t __rem;						\ -+	__rem = ((uint64_t)(n)) % __base;			\ -+	(n) = ((uint64_t)(n)) / __base;				\ -+	__rem;							\ -+ }) -+ -+#elif BITS_PER_LONG == 32 -+ -+extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); -+ -+/* The unnecessary pointer compare is there -+ * to check for type safety (n must be 64bit) -+ */ -+# define do_div(n,base) ({				\ -+	uint32_t __base = (base);			\ -+	uint32_t __rem;					\ -+	(void)(((typeof((n)) *)0) == ((uint64_t *)0));	\ -+	if (likely(((n) >> 32) == 0)) {			\ -+		__rem = (uint32_t)(n) % __base;		\ -+		(n) = (uint32_t)(n) / __base;		\ -+	} else 						\ -+		__rem = __div64_32(&(n), __base);	\ -+	__rem;						\ -+ }) -+ -+#else /* BITS_PER_LONG == ?? */ -+ -+# error do_div() does not yet support the C64 -+ -+#endif /* BITS_PER_LONG */ -+ -+#endif /* _ASM_GENERIC_DIV64_H */ ---- linux/include/asm-generic/dma-mapping-broken.h -+++ linux/include/asm-generic/dma-mapping-broken.h -@@ -0,0 +1,22 @@ -+#ifndef _ASM_GENERIC_DMA_MAPPING_H -+#define _ASM_GENERIC_DMA_MAPPING_H -+ -+/* This is used for archs that do not support DMA */ -+ -+ -+static inline void * -+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, -+		   int flag) -+{ -+	BUG(); -+	return NULL; -+} -+ -+static inline void -+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, -+		    dma_addr_t dma_handle) -+{ -+	BUG(); -+} -+ -+#endif /* _ASM_GENERIC_DMA_MAPPING_H */ ---- linux/include/asm-generic/dma-mapping.h -+++ linux/include/asm-generic/dma-mapping.h -@@ -0,0 +1,309 @@ -+/* Copyright (C) 2002 by James.Bottomley@HansenPartnership.com  -+ * -+ * Implements the generic device dma API via the existing pci_ one -+ * for unconverted architectures -+ */ -+ -+#ifndef _ASM_GENERIC_DMA_MAPPING_H -+#define _ASM_GENERIC_DMA_MAPPING_H -+ -+// #include <linux/config.h> -+ -+#ifdef CONFIG_PCI -+ -+/* we implement the API below in terms of the existing PCI one, -+ * so include it */ -+#include <linux/pci.h> -+/* need struct page definitions */ -+#include <linux/mm.h> -+ -+static inline int -+dma_supported(struct device *dev, u64 mask) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_dma_supported(to_pci_dev(dev), mask); -+} -+ -+static inline int -+dma_set_mask(struct device *dev, u64 dma_mask) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_set_dma_mask(to_pci_dev(dev), dma_mask); -+} -+ -+static inline void * -+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, -+		   int flag) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle); -+} -+ -+static inline void -+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, -+		    dma_addr_t dma_handle) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle); -+} -+ -+static inline dma_addr_t -+dma_map_single(struct device *dev, void *cpu_addr, size_t size, -+	       enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction); -+} -+ -+static inline void -+dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, -+		 enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction); -+} -+ -+static inline dma_addr_t -+dma_map_page(struct device *dev, struct page *page, -+	     unsigned long offset, size_t size, -+	     enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction); -+} -+ -+static inline void -+dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, -+	       enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction); -+} -+ -+static inline int -+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, -+	   enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction); -+} -+ -+static inline void -+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, -+	     enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction); -+} -+ -+static inline void -+dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, -+			enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_dma_sync_single_for_cpu(to_pci_dev(dev), dma_handle, -+				    size, (int)direction); -+} -+ -+static inline void -+dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, -+			   enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_dma_sync_single_for_device(to_pci_dev(dev), dma_handle, -+				       size, (int)direction); -+} -+ -+static inline void -+dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, -+		    enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_dma_sync_sg_for_cpu(to_pci_dev(dev), sg, nelems, (int)direction); -+} -+ -+static inline void -+dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, -+		       enum dma_data_direction direction) -+{ -+	BUG_ON(dev->bus != &pci_bus_type); -+ -+	pci_dma_sync_sg_for_device(to_pci_dev(dev), sg, nelems, (int)direction); -+} -+ -+static inline int -+dma_mapping_error(dma_addr_t dma_addr) -+{ -+	return pci_dma_mapping_error(dma_addr); -+} -+ -+ -+#else -+ -+static inline int -+dma_supported(struct device *dev, u64 mask) -+{ -+	return 0; -+} -+ -+static inline int -+dma_set_mask(struct device *dev, u64 dma_mask) -+{ -+	BUG(); -+	return 0; -+} -+ -+static inline void * -+dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, -+		   int flag) -+{ -+	BUG(); -+	return NULL; -+} -+ -+static inline void -+dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, -+		    dma_addr_t dma_handle) -+{ -+	BUG(); -+} -+ -+static inline dma_addr_t -+dma_map_single(struct device *dev, void *cpu_addr, size_t size, -+	       enum dma_data_direction direction) -+{ -+	BUG(); -+	return 0; -+} -+ -+static inline void -+dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, -+		 enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline dma_addr_t -+dma_map_page(struct device *dev, struct page *page, -+	     unsigned long offset, size_t size, -+	     enum dma_data_direction direction) -+{ -+	BUG(); -+	return 0; -+} -+ -+static inline void -+dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, -+	       enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline int -+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, -+	   enum dma_data_direction direction) -+{ -+	BUG(); -+	return 0; -+} -+ -+static inline void -+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, -+	     enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline void -+dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, -+			enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline void -+dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, -+			   enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline void -+dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, -+		    enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline void -+dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems, -+		       enum dma_data_direction direction) -+{ -+	BUG(); -+} -+ -+static inline int -+dma_error(dma_addr_t dma_addr) -+{ -+	return 0; -+} -+ -+#endif -+ -+/* Now for the API extensions over the pci_ one */ -+ -+#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) -+#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) -+#define dma_is_consistent(d)	(1) -+ -+static inline int -+dma_get_cache_alignment(void) -+{ -+	/* no easy way to get cache size on all processors, so return -+	 * the maximum possible, to be safe */ -+	return (1 << L1_CACHE_SHIFT_MAX); -+} -+ -+static inline void -+dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle, -+			      unsigned long offset, size_t size, -+			      enum dma_data_direction direction) -+{ -+	/* just sync everything, that's all the pci API can do */ -+	dma_sync_single_for_cpu(dev, dma_handle, offset+size, direction); -+} -+ -+static inline void -+dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle, -+				 unsigned long offset, size_t size, -+				 enum dma_data_direction direction) -+{ -+	/* just sync everything, that's all the pci API can do */ -+	dma_sync_single_for_device(dev, dma_handle, offset+size, direction); -+} -+ -+static inline void -+dma_cache_sync(void *vaddr, size_t size, -+	       enum dma_data_direction direction) -+{ -+	/* could define this in terms of the dma_cache ... operations, -+	 * but if you get this on a platform, you should convert the platform -+	 * to using the generic device DMA API */ -+	BUG(); -+} -+ -+#endif -+ ---- linux/include/asm-generic/errno-base.h -+++ linux/include/asm-generic/errno-base.h -@@ -0,0 +1,39 @@ -+#ifndef _ASM_GENERIC_ERRNO_BASE_H -+#define _ASM_GENERIC_ERRNO_BASE_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	/* Argument 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 */ -+ -+#endif ---- linux/include/asm-generic/errno.h -+++ linux/include/asm-generic/errno.h -@@ -0,0 +1,105 @@ -+#ifndef _ASM_GENERIC_ERRNO_H -+#define _ASM_GENERIC_ERRNO_H -+ -+#include <asm-generic/errno-base.h> -+ -+#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 */ -+#define	ECANCELED	125	/* Operation Canceled */ -+#define	ENOKEY		126	/* Required key not available */ -+#define	EKEYEXPIRED	127	/* Key has expired */ -+#define	EKEYREVOKED	128	/* Key has been revoked */ -+#define	EKEYREJECTED	129	/* Key was rejected by service */ -+ -+#endif ---- linux/include/asm-generic/hdreg.h -+++ linux/include/asm-generic/hdreg.h -@@ -0,0 +1,8 @@ -+#warning <asm/hdreg.h> is obsolete, please do not use it -+ -+#ifndef __ASM_GENERIC_HDREG_H -+#define __ASM_GENERIC_HDREG_H -+ -+typedef unsigned long ide_ioreg_t; -+ -+#endif /* __ASM_GENERIC_HDREG_H */ ---- linux/include/asm-generic/ide_iops.h -+++ linux/include/asm-generic/ide_iops.h -@@ -0,0 +1,38 @@ -+/* Generic I/O and MEMIO string operations.  */ -+ -+#define __ide_insw	insw -+#define __ide_insl	insl -+#define __ide_outsw	outsw -+#define __ide_outsl	outsl -+ -+static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count) -+{ -+	while (count--) { -+		*(u16 *)addr = readw(port); -+		addr += 2; -+	} -+} -+ -+static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count) -+{ -+	while (count--) { -+		*(u32 *)addr = readl(port); -+		addr += 4; -+	} -+} -+ -+static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count) -+{ -+	while (count--) { -+		writew(*(u16 *)addr, port); -+		addr += 2; -+	} -+} -+ -+static __inline__ void __ide_mm_outsl(void __iomem * port, void *addr, u32 count) -+{ -+	while (count--) { -+		writel(*(u32 *)addr, port); -+		addr += 4; -+	} -+} ---- linux/include/asm-generic/iomap.h -+++ linux/include/asm-generic/iomap.h -@@ -0,0 +1,63 @@ -+#ifndef __GENERIC_IO_H -+#define __GENERIC_IO_H -+ -+#include <linux/linkage.h> -+ -+/* -+ * These are the "generic" interfaces for doing new-style -+ * memory-mapped or PIO accesses. Architectures may do -+ * their own arch-optimized versions, these just act as -+ * wrappers around the old-style IO register access functions: -+ * read[bwl]/write[bwl]/in[bwl]/out[bwl] -+ * -+ * Don't include this directly, include it from <asm/io.h>. -+ */ -+ -+/* -+ * Read/write from/to an (offsettable) iomem cookie. It might be a PIO -+ * access or a MMIO access, these functions don't care. The info is -+ * encoded in the hardware mapping set up by the mapping functions -+ * (or the cookie itself, depending on implementation and hw). -+ * -+ * The generic routines just encode the PIO/MMIO as part of the -+ * cookie, and coldly assume that the MMIO IO mappings are not -+ * in the low address range. Architectures for which this is not -+ * true can't use this generic implementation. -+ */ -+extern unsigned int fastcall ioread8(void __iomem *); -+extern unsigned int fastcall ioread16(void __iomem *); -+extern unsigned int fastcall ioread32(void __iomem *); -+ -+extern void fastcall iowrite8(u8, void __iomem *); -+extern void fastcall iowrite16(u16, void __iomem *); -+extern void fastcall iowrite32(u32, void __iomem *); -+ -+/* -+ * "string" versions of the above. Note that they -+ * use native byte ordering for the accesses (on -+ * the assumption that IO and memory agree on a -+ * byte order, and CPU byteorder is irrelevant). -+ * -+ * They do _not_ update the port address. If you -+ * want MMIO that copies stuff laid out in MMIO -+ * memory across multiple ports, use "memcpy_toio()" -+ * and friends. -+ */ -+extern void fastcall ioread8_rep(void __iomem *port, void *buf, unsigned long count); -+extern void fastcall ioread16_rep(void __iomem *port, void *buf, unsigned long count); -+extern void fastcall ioread32_rep(void __iomem *port, void *buf, unsigned long count); -+ -+extern void fastcall iowrite8_rep(void __iomem *port, const void *buf, unsigned long count); -+extern void fastcall iowrite16_rep(void __iomem *port, const void *buf, unsigned long count); -+extern void fastcall iowrite32_rep(void __iomem *port, const void *buf, unsigned long count); -+ -+/* Create a virtual mapping cookie for an IO port range */ -+extern void __iomem *ioport_map(unsigned long port, unsigned int nr); -+extern void ioport_unmap(void __iomem *); -+ -+/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ -+struct pci_dev; -+extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); -+extern void pci_iounmap(struct pci_dev *dev, void __iomem *); -+ -+#endif ---- linux/include/asm-generic/local.h -+++ linux/include/asm-generic/local.h -@@ -0,0 +1,118 @@ -+#ifndef _ASM_GENERIC_LOCAL_H -+#define _ASM_GENERIC_LOCAL_H -+ -+// #include <linux/config.h> -+#include <linux/percpu.h> -+#include <linux/hardirq.h> -+#include <asm/types.h> -+ -+/* An unsigned long type for operations which are atomic for a single -+ * CPU.  Usually used in combination with per-cpu variables. */ -+ -+#if BITS_PER_LONG == 32 -+/* Implement in terms of atomics. */ -+ -+/* Don't use typedef: don't want them to be mixed with atomic_t's. */ -+typedef struct -+{ -+	atomic_t a; -+} local_t; -+ -+#define LOCAL_INIT(i)	{ ATOMIC_INIT(i) } -+ -+#define local_read(l)	((unsigned long)atomic_read(&(l)->a)) -+#define local_set(l,i)	atomic_set((&(l)->a),(i)) -+#define local_inc(l)	atomic_inc(&(l)->a) -+#define local_dec(l)	atomic_dec(&(l)->a) -+#define local_add(i,l)	atomic_add((i),(&(l)->a)) -+#define local_sub(i,l)	atomic_sub((i),(&(l)->a)) -+ -+/* Non-atomic variants, ie. preemption disabled and won't be touched -+ * in interrupt, etc.  Some archs can optimize this case well. */ -+#define __local_inc(l)		local_set((l), local_read(l) + 1) -+#define __local_dec(l)		local_set((l), local_read(l) - 1) -+#define __local_add(i,l)	local_set((l), local_read(l) + (i)) -+#define __local_sub(i,l)	local_set((l), local_read(l) - (i)) -+ -+#else /* ... can't use atomics. */ -+/* Implement in terms of three variables. -+   Another option would be to use local_irq_save/restore. */ -+ -+typedef struct -+{ -+	/* 0 = in hardirq, 1 = in softirq, 2 = usermode. */ -+	unsigned long v[3]; -+} local_t; -+ -+#define _LOCAL_VAR(l)	((l)->v[!in_interrupt() + !in_irq()]) -+ -+#define LOCAL_INIT(i)	{ { (i), 0, 0 } } -+ -+static inline unsigned long local_read(local_t *l) -+{ -+	return l->v[0] + l->v[1] + l->v[2]; -+} -+ -+static inline void local_set(local_t *l, unsigned long v) -+{ -+	l->v[0] = v; -+	l->v[1] = l->v[2] = 0; -+} -+ -+static inline void local_inc(local_t *l) -+{ -+	preempt_disable(); -+	_LOCAL_VAR(l)++; -+	preempt_enable(); -+} -+ -+static inline void local_dec(local_t *l) -+{ -+	preempt_disable(); -+	_LOCAL_VAR(l)--; -+	preempt_enable(); -+} -+ -+static inline void local_add(unsigned long v, local_t *l) -+{ -+	preempt_disable(); -+	_LOCAL_VAR(l) += v; -+	preempt_enable(); -+} -+ -+static inline void local_sub(unsigned long v, local_t *l) -+{ -+	preempt_disable(); -+	_LOCAL_VAR(l) -= v; -+	preempt_enable(); -+} -+ -+/* Non-atomic variants, ie. preemption disabled and won't be touched -+ * in interrupt, etc.  Some archs can optimize this case well. */ -+#define __local_inc(l)		((l)->v[0]++) -+#define __local_dec(l)		((l)->v[0]--) -+#define __local_add(i,l)	((l)->v[0] += (i)) -+#define __local_sub(i,l)	((l)->v[0] -= (i)) -+ -+#endif /* Non-atomic implementation */ -+ -+/* Use these for per-cpu local_t variables: on some archs they are -+ * much more efficient than these naive implementations.  Note they take -+ * a variable (eg. mystruct.foo), not an address. -+ */ -+#define cpu_local_read(v)	local_read(&__get_cpu_var(v)) -+#define cpu_local_set(v, i)	local_set(&__get_cpu_var(v), (i)) -+#define cpu_local_inc(v)	local_inc(&__get_cpu_var(v)) -+#define cpu_local_dec(v)	local_dec(&__get_cpu_var(v)) -+#define cpu_local_add(i, v)	local_add((i), &__get_cpu_var(v)) -+#define cpu_local_sub(i, v)	local_sub((i), &__get_cpu_var(v)) -+ -+/* Non-atomic increments, ie. preemption disabled and won't be touched -+ * in interrupt, etc.  Some archs can optimize this case well. -+ */ -+#define __cpu_local_inc(v)	__local_inc(&__get_cpu_var(v)) -+#define __cpu_local_dec(v)	__local_dec(&__get_cpu_var(v)) -+#define __cpu_local_add(i, v)	__local_add((i), &__get_cpu_var(v)) -+#define __cpu_local_sub(i, v)	__local_sub((i), &__get_cpu_var(v)) -+ -+#endif /* _ASM_GENERIC_LOCAL_H */ ---- linux/include/asm-generic/pci-dma-compat.h -+++ linux/include/asm-generic/pci-dma-compat.h -@@ -0,0 +1,107 @@ -+/* include this file if the platform implements the dma_ DMA Mapping API -+ * and wants to provide the pci_ DMA Mapping API in terms of it */ -+ -+#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H -+#define _ASM_GENERIC_PCI_DMA_COMPAT_H -+ -+#include <linux/dma-mapping.h> -+ -+/* note pci_set_dma_mask isn't here, since it's a public function -+ * exported from drivers/pci, use dma_supported instead */ -+ -+static inline int -+pci_dma_supported(struct pci_dev *hwdev, u64 mask) -+{ -+	return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask); -+} -+ -+static inline void * -+pci_alloc_consistent(struct pci_dev *hwdev, size_t size, -+		     dma_addr_t *dma_handle) -+{ -+	return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC); -+} -+ -+static inline void -+pci_free_consistent(struct pci_dev *hwdev, size_t size, -+		    void *vaddr, dma_addr_t dma_handle) -+{ -+	dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle); -+} -+ -+static inline dma_addr_t -+pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) -+{ -+	return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, -+		 size_t size, int direction) -+{ -+	dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction); -+} -+ -+static inline dma_addr_t -+pci_map_page(struct pci_dev *hwdev, struct page *page, -+	     unsigned long offset, size_t size, int direction) -+{ -+	return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address, -+	       size_t size, int direction) -+{ -+	dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction); -+} -+ -+static inline int -+pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, -+	   int nents, int direction) -+{ -+	return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, -+	     int nents, int direction) -+{ -+	dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle, -+		    size_t size, int direction) -+{ -+	dma_sync_single_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle, -+		    size_t size, int direction) -+{ -+	dma_sync_single_for_device(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg, -+		int nelems, int direction) -+{ -+	dma_sync_sg_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction); -+} -+ -+static inline void -+pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg, -+		int nelems, int direction) -+{ -+	dma_sync_sg_for_device(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction); -+} -+ -+static inline int -+pci_dma_mapping_error(dma_addr_t dma_addr) -+{ -+	return dma_mapping_error(dma_addr); -+} -+ -+#endif ---- linux/include/asm-generic/pci.h -+++ linux/include/asm-generic/pci.h -@@ -0,0 +1,34 @@ -+/* -+ * linux/include/asm-generic/pci.h -+ * -+ *  Copyright (C) 2003 Russell King -+ */ -+#ifndef _ASM_GENERIC_PCI_H -+#define _ASM_GENERIC_PCI_H -+ -+/** -+ * pcibios_resource_to_bus - convert resource to PCI bus address -+ * @dev: device which owns this resource -+ * @region: converted bus-centric region (start,end) -+ * @res: resource to convert -+ * -+ * Convert a resource to a PCI device bus address or bus window. -+ */ -+static inline void -+pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, -+			 struct resource *res) -+{ -+	region->start = res->start; -+	region->end = res->end; -+} -+ -+#define pcibios_scan_all_fns(a, b)	0 -+ -+#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ -+static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) -+{ -+	return channel ? 15 : 14; -+} -+#endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */ -+ -+#endif ---- linux/include/asm-generic/percpu.h -+++ linux/include/asm-generic/percpu.h -@@ -0,0 +1,42 @@ -+#ifndef _ASM_GENERIC_PERCPU_H_ -+#define _ASM_GENERIC_PERCPU_H_ -+#include <linux/compiler.h> -+ -+#define __GENERIC_PER_CPU -+#ifdef CONFIG_SMP -+ -+extern unsigned long __per_cpu_offset[NR_CPUS]; -+ -+/* Separate out the type, so (int[3], foo) works. */ -+#define DEFINE_PER_CPU(type, name) \ -+    __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name -+ -+/* var is in discarded region: offset to particular copy we want */ -+#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu])) -+#define __get_cpu_var(var) per_cpu(var, smp_processor_id()) -+ -+/* A macro to avoid #include hell... */ -+#define percpu_modcopy(pcpudst, src, size)			\ -+do {								\ -+	unsigned int __i;					\ -+	for (__i = 0; __i < NR_CPUS; __i++)			\ -+		if (cpu_possible(__i))				\ -+			memcpy((pcpudst)+__per_cpu_offset[__i],	\ -+			       (src), (size));			\ -+} while (0) -+#else /* ! SMP */ -+ -+#define DEFINE_PER_CPU(type, name) \ -+    __typeof__(type) per_cpu__##name -+ -+#define per_cpu(var, cpu)			(*((void)cpu, &per_cpu__##var)) -+#define __get_cpu_var(var)			per_cpu__##var -+ -+#endif	/* SMP */ -+ -+#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name -+ -+#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) -+#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) -+ -+#endif /* _ASM_GENERIC_PERCPU_H_ */ ---- linux/include/asm-generic/pgtable.h -+++ linux/include/asm-generic/pgtable.h -@@ -0,0 +1,137 @@ -+#ifndef _ASM_GENERIC_PGTABLE_H -+#define _ASM_GENERIC_PGTABLE_H -+ -+#ifndef __HAVE_ARCH_PTEP_ESTABLISH -+/* -+ * Establish a new mapping: -+ *  - flush the old one -+ *  - update the page tables -+ *  - inform the TLB about the new one -+ * -+ * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock. -+ * -+ * Note: the old pte is known to not be writable, so we don't need to -+ * worry about dirty bits etc getting lost. -+ */ -+#ifndef __HAVE_ARCH_SET_PTE_ATOMIC -+#define ptep_establish(__vma, __address, __ptep, __entry)		\ -+do {				  					\ -+	set_pte(__ptep, __entry);					\ -+	flush_tlb_page(__vma, __address);				\ -+} while (0) -+#else /* __HAVE_ARCH_SET_PTE_ATOMIC */ -+#define ptep_establish(__vma, __address, __ptep, __entry)		\ -+do {				  					\ -+	set_pte_atomic(__ptep, __entry);				\ -+	flush_tlb_page(__vma, __address);				\ -+} while (0) -+#endif /* __HAVE_ARCH_SET_PTE_ATOMIC */ -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS -+/* -+ * Largely same as above, but only sets the access flags (dirty, -+ * accessed, and writable). Furthermore, we know it always gets set -+ * to a "more permissive" setting, which allows most architectures -+ * to optimize this. -+ */ -+#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \ -+do {				  					  \ -+	set_pte(__ptep, __entry);					  \ -+	flush_tlb_page(__vma, __address);				  \ -+} while (0) -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG -+static inline int ptep_test_and_clear_young(pte_t *ptep) -+{ -+	pte_t pte = *ptep; -+	if (!pte_young(pte)) -+		return 0; -+	set_pte(ptep, pte_mkold(pte)); -+	return 1; -+} -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH -+#define ptep_clear_flush_young(__vma, __address, __ptep)		\ -+({									\ -+	int __young = ptep_test_and_clear_young(__ptep);		\ -+	if (__young)							\ -+		flush_tlb_page(__vma, __address);			\ -+	__young;							\ -+}) -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY -+static inline int ptep_test_and_clear_dirty(pte_t *ptep) -+{ -+	pte_t pte = *ptep; -+	if (!pte_dirty(pte)) -+		return 0; -+	set_pte(ptep, pte_mkclean(pte)); -+	return 1; -+} -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_CLEAR_DIRTY_FLUSH -+#define ptep_clear_flush_dirty(__vma, __address, __ptep)		\ -+({									\ -+	int __dirty = ptep_test_and_clear_dirty(__ptep);		\ -+	if (__dirty)							\ -+		flush_tlb_page(__vma, __address);			\ -+	__dirty;							\ -+}) -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR -+static inline pte_t ptep_get_and_clear(pte_t *ptep) -+{ -+	pte_t pte = *ptep; -+	pte_clear(ptep); -+	return pte; -+} -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_CLEAR_FLUSH -+#define ptep_clear_flush(__vma, __address, __ptep)			\ -+({									\ -+	pte_t __pte = ptep_get_and_clear(__ptep);			\ -+	flush_tlb_page(__vma, __address);				\ -+	__pte;								\ -+}) -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_SET_WRPROTECT -+static inline void ptep_set_wrprotect(pte_t *ptep) -+{ -+	pte_t old_pte = *ptep; -+	set_pte(ptep, pte_wrprotect(old_pte)); -+} -+#endif -+ -+#ifndef __HAVE_ARCH_PTEP_MKDIRTY -+static inline void ptep_mkdirty(pte_t *ptep) -+{ -+	pte_t old_pte = *ptep; -+	set_pte(ptep, pte_mkdirty(old_pte)); -+} -+#endif -+ -+#ifndef __HAVE_ARCH_PTE_SAME -+#define pte_same(A,B)	(pte_val(A) == pte_val(B)) -+#endif -+ -+#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY -+#define page_test_and_clear_dirty(page) (0) -+#endif -+ -+#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_YOUNG -+#define page_test_and_clear_young(page) (0) -+#endif -+ -+#ifndef __HAVE_ARCH_PGD_OFFSET_GATE -+#define pgd_offset_gate(mm, addr)	pgd_offset(mm, addr) -+#endif -+ -+#endif /* _ASM_GENERIC_PGTABLE_H */ ---- linux/include/asm-generic/pgtable-nopmd.h -+++ linux/include/asm-generic/pgtable-nopmd.h -@@ -0,0 +1,60 @@ -+#ifndef _PGTABLE_NOPMD_H -+#define _PGTABLE_NOPMD_H -+ -+#ifndef __ASSEMBLY__ -+ -+#include <asm-generic/pgtable-nopud.h> -+ -+/* -+ * Having the pmd type consist of a pud gets the size right, and allows -+ * us to conceptually access the pud entry that this pmd is folded into -+ * without casting. -+ */ -+typedef struct { pud_t pud; } pmd_t; -+ -+#define PMD_SHIFT	PUD_SHIFT -+#define PTRS_PER_PMD	1 -+#define PMD_SIZE  	(1UL << PMD_SHIFT) -+#define PMD_MASK  	(~(PMD_SIZE-1)) -+ -+/* -+ * The "pud_xxx()" functions here are trivial for a folded two-level -+ * setup: the pmd is never bad, and a pmd always exists (as it's folded -+ * into the pud entry) -+ */ -+static inline int pud_none(pud_t pud)		{ return 0; } -+static inline int pud_bad(pud_t pud)		{ return 0; } -+static inline int pud_present(pud_t pud)	{ return 1; } -+static inline void pud_clear(pud_t *pud)	{ } -+#define pmd_ERROR(pmd)				(pud_ERROR((pmd).pud)) -+ -+#define pud_populate(mm, pmd, pte)		do { } while (0) -+ -+/* -+ * (pmds are folded into puds so this doesn't get actually called, -+ * but the define is needed for a generic inline function.) -+ */ -+#define set_pud(pudptr, pudval)			set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval }) -+ -+static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address) -+{ -+	return (pmd_t *)pud; -+} -+ -+#define pmd_val(x)				(pud_val((x).pud)) -+#define __pmd(x)				((pmd_t) { __pud(x) } ) -+ -+#define pud_page(pud)				(pmd_page((pmd_t){ pud })) -+#define pud_page_kernel(pud)			(pmd_page_kernel((pmd_t){ pud })) -+ -+/* -+ * allocating and freeing a pmd is trivial: the 1-entry pmd is -+ * inside the pud, so has no extra memory associated with it. -+ */ -+#define pmd_alloc_one(mm, address)		NULL -+#define pmd_free(x)				do { } while (0) -+#define __pmd_free_tlb(tlb, x)			do { } while (0) -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif /* _PGTABLE_NOPMD_H */ ---- linux/include/asm-generic/pgtable-nopud.h -+++ linux/include/asm-generic/pgtable-nopud.h -@@ -0,0 +1,56 @@ -+#ifndef _PGTABLE_NOPUD_H -+#define _PGTABLE_NOPUD_H -+ -+#ifndef __ASSEMBLY__ -+ -+/* -+ * Having the pud type consist of a pgd gets the size right, and allows -+ * us to conceptually access the pgd entry that this pud is folded into -+ * without casting. -+ */ -+typedef struct { pgd_t pgd; } pud_t; -+ -+#define PUD_SHIFT	PGDIR_SHIFT -+#define PTRS_PER_PUD	1 -+#define PUD_SIZE  	(1UL << PUD_SHIFT) -+#define PUD_MASK  	(~(PUD_SIZE-1)) -+ -+/* -+ * The "pgd_xxx()" functions here are trivial for a folded two-level -+ * setup: the pud is never bad, and a pud always exists (as it's folded -+ * into the pgd entry) -+ */ -+static inline int pgd_none(pgd_t pgd)		{ return 0; } -+static inline int pgd_bad(pgd_t pgd)		{ return 0; } -+static inline int pgd_present(pgd_t pgd)	{ return 1; } -+static inline void pgd_clear(pgd_t *pgd)	{ } -+#define pud_ERROR(pud)				(pgd_ERROR((pud).pgd)) -+ -+#define pgd_populate(mm, pgd, pud)		do { } while (0) -+/* -+ * (puds are folded into pgds so this doesn't get actually called, -+ * but the define is needed for a generic inline function.) -+ */ -+#define set_pgd(pgdptr, pgdval)			set_pud((pud_t *)(pgdptr), (pud_t) { pgdval }) -+ -+static inline pud_t * pud_offset(pgd_t * pgd, unsigned long address) -+{ -+	return (pud_t *)pgd; -+} -+ -+#define pud_val(x)				(pgd_val((x).pgd)) -+#define __pud(x)				((pud_t) { __pgd(x) } ) -+ -+#define pgd_page(pgd)				(pud_page((pud_t){ pgd })) -+#define pgd_page_kernel(pgd)			(pud_page_kernel((pud_t){ pgd })) -+ -+/* -+ * allocating and freeing a pud is trivial: the 1-entry pud is -+ * inside the pgd, so has no extra memory associated with it. -+ */ -+#define pud_alloc_one(mm, address)		NULL -+#define pud_free(x)				do { } while (0) -+#define __pud_free_tlb(tlb, x)			do { } while (0) -+ -+#endif /* __ASSEMBLY__ */ -+#endif /* _PGTABLE_NOPUD_H */ ---- linux/include/asm-generic/resource.h -+++ linux/include/asm-generic/resource.h -@@ -0,0 +1,60 @@ -+#ifndef _ASM_GENERIC_RESOURCE_H -+#define _ASM_GENERIC_RESOURCE_H -+ -+/* -+ * Resource limits -+ */ -+ -+/* Allow arch to control resource order */ -+#ifndef __ARCH_RLIMIT_ORDER -+#define RLIMIT_CPU		0	/* CPU time in ms */ -+#define RLIMIT_FSIZE		1	/* Maximum filesize */ -+#define RLIMIT_DATA		2	/* max data size */ -+#define RLIMIT_STACK		3	/* max stack size */ -+#define RLIMIT_CORE		4	/* max core file size */ -+#define RLIMIT_RSS		5	/* max resident set size */ -+#define RLIMIT_NPROC		6	/* max number of processes */ -+#define RLIMIT_NOFILE		7	/* max number of open files */ -+#define RLIMIT_MEMLOCK		8	/* max locked-in-memory address space */ -+#define RLIMIT_AS		9	/* address space limit */ -+#define RLIMIT_LOCKS		10	/* maximum file locks held */ -+#define RLIMIT_SIGPENDING	11	/* max number of pending signals */ -+#define RLIMIT_MSGQUEUE		12	/* maximum bytes in POSIX mqueues */ -+ -+#define RLIM_NLIMITS		13 -+#endif -+ -+/* -+ * SuS says limits have to be unsigned. -+ * Which makes a ton more sense anyway. -+ */ -+#ifndef RLIM_INFINITY -+#define RLIM_INFINITY	(~0UL) -+#endif -+ -+#ifndef _STK_LIM_MAX -+#define _STK_LIM_MAX	RLIM_INFINITY -+#endif -+ -+#ifdef __KERNEL__ -+ -+#define INIT_RLIMITS							\ -+{									\ -+	[RLIMIT_CPU]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_FSIZE]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_DATA]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_STACK]		= {      _STK_LIM, _STK_LIM_MAX  },	\ -+	[RLIMIT_CORE]		= {             0, RLIM_INFINITY },	\ -+	[RLIMIT_RSS]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_NPROC]		= {             0,             0 },	\ -+	[RLIMIT_NOFILE]		= {      INR_OPEN,     INR_OPEN  },	\ -+	[RLIMIT_MEMLOCK]	= {   MLOCK_LIMIT,   MLOCK_LIMIT },	\ -+	[RLIMIT_AS]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_LOCKS]		= { RLIM_INFINITY, RLIM_INFINITY },	\ -+	[RLIMIT_SIGPENDING]	= { MAX_SIGPENDING, MAX_SIGPENDING },	\ -+	[RLIMIT_MSGQUEUE]	= { MQ_BYTES_MAX, MQ_BYTES_MAX },	\ -+} -+ -+#endif	/* __KERNEL__ */ -+ -+#endif ---- linux/include/asm-generic/rmap.h -+++ linux/include/asm-generic/rmap.h -@@ -0,0 +1,90 @@ -+#ifndef _GENERIC_RMAP_H -+#define _GENERIC_RMAP_H -+/* -+ * linux/include/asm-generic/rmap.h -+ * -+ * Architecture dependent parts of the reverse mapping code, -+ * this version should work for most architectures with a -+ * 'normal' page table layout. -+ * -+ * We use the struct page of the page table page to find out -+ * the process and full address of a page table entry: -+ * - page->mapping points to the process' mm_struct -+ * - page->index has the high bits of the address -+ * - the lower bits of the address are calculated from the -+ *   offset of the page table entry within the page table page -+ * -+ * For CONFIG_HIGHPTE, we need to represent the address of a pte in a -+ * scalar pte_addr_t.  The pfn of the pte's page is shifted left by PAGE_SIZE -+ * bits and is then ORed with the byte offset of the pte within its page. -+ * -+ * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits.  20 for the pfn, 12 for -+ * the offset. -+ * -+ * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits.  52 for the pfn, 12 for -+ * the offset. -+ */ -+#include <linux/mm.h> -+ -+static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address) -+{ -+#ifdef BROKEN_PPC_PTE_ALLOC_ONE -+	/* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */ -+	extern int mem_init_done; -+ -+	if (!mem_init_done) -+		return; -+#endif -+	page->mapping = (void *)mm; -+	page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1); -+	inc_page_state(nr_page_table_pages); -+} -+ -+static inline void pgtable_remove_rmap(struct page * page) -+{ -+	page->mapping = NULL; -+	page->index = 0; -+	dec_page_state(nr_page_table_pages); -+} -+ -+static inline struct mm_struct * ptep_to_mm(pte_t * ptep) -+{ -+	struct page * page = kmap_atomic_to_page(ptep); -+	return (struct mm_struct *) page->mapping; -+} -+ -+static inline unsigned long ptep_to_address(pte_t * ptep) -+{ -+	struct page * page = kmap_atomic_to_page(ptep); -+	unsigned long low_bits; -+	low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE; -+	return page->index + low_bits; -+} -+ -+#ifdef CONFIG_HIGHPTE -+static inline pte_addr_t ptep_to_paddr(pte_t *ptep) -+{ -+	pte_addr_t paddr; -+	paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT; -+	return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK); -+} -+#else -+static inline pte_addr_t ptep_to_paddr(pte_t *ptep) -+{ -+	return (pte_addr_t)ptep; -+} -+#endif -+ -+#ifndef CONFIG_HIGHPTE -+static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr) -+{ -+	return (pte_t *)pte_paddr; -+} -+ -+static inline void rmap_ptep_unmap(pte_t *pte) -+{ -+	return; -+} -+#endif -+ -+#endif /* _GENERIC_RMAP_H */ ---- linux/include/asm-generic/rtc.h -+++ linux/include/asm-generic/rtc.h -@@ -0,0 +1,213 @@ -+/*  -+ * inclue/asm-generic/rtc.h -+ * -+ * Author: Tom Rini <trini@mvista.com> -+ * -+ * Based on: -+ * drivers/char/rtc.c -+ * -+ * Please read the COPYING file for all license details. -+ */ -+ -+#ifndef __ASM_RTC_H__ -+#define __ASM_RTC_H__ -+ -+#ifdef __KERNEL__ -+ -+#include <linux/mc146818rtc.h> -+#include <linux/rtc.h> -+#include <linux/bcd.h> -+ -+#define RTC_PIE 0x40		/* periodic interrupt enable */ -+#define RTC_AIE 0x20		/* alarm interrupt enable */ -+#define RTC_UIE 0x10		/* update-finished interrupt enable */ -+ -+/* some dummy definitions */ -+#define RTC_BATT_BAD 0x100	/* battery bad */ -+#define RTC_SQWE 0x08		/* enable square-wave output */ -+#define RTC_DM_BINARY 0x04	/* all time/date values are BCD if clear */ -+#define RTC_24H 0x02		/* 24 hour mode - else hours bit 7 means pm */ -+#define RTC_DST_EN 0x01	        /* auto switch DST - works f. USA only */ -+ -+/* -+ * Returns true if a clock update is in progress -+ */ -+static inline unsigned char rtc_is_updating(void) -+{ -+	unsigned char uip; -+ -+	spin_lock_irq(&rtc_lock); -+	uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP); -+	spin_unlock_irq(&rtc_lock); -+	return uip; -+} -+ -+static inline unsigned int get_rtc_time(struct rtc_time *time) -+{ -+	unsigned long uip_watchdog = jiffies; -+	unsigned char ctrl; -+#ifdef CONFIG_MACH_DECSTATION -+	unsigned int real_year; -+#endif -+ -+	/* -+	 * read RTC once any update in progress is done. The update -+	 * can take just over 2ms. We wait 10 to 20ms. There is no need to -+	 * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP. -+	 * If you need to know *exactly* when a second has started, enable -+	 * periodic update complete interrupts, (via ioctl) and then  -+	 * immediately read /dev/rtc which will block until you get the IRQ. -+	 * Once the read clears, read the RTC time (again via ioctl). Easy. -+	 */ -+ -+	if (rtc_is_updating() != 0) -+		while (jiffies - uip_watchdog < 2*HZ/100) { -+			barrier(); -+			cpu_relax(); -+		} -+ -+	/* -+	 * Only the values that we read from the RTC are set. We leave -+	 * tm_wday, tm_yday and tm_isdst untouched. Even though the -+	 * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated -+	 * by the RTC when initially set to a non-zero value. -+	 */ -+	spin_lock_irq(&rtc_lock); -+	time->tm_sec = CMOS_READ(RTC_SECONDS); -+	time->tm_min = CMOS_READ(RTC_MINUTES); -+	time->tm_hour = CMOS_READ(RTC_HOURS); -+	time->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH); -+	time->tm_mon = CMOS_READ(RTC_MONTH); -+	time->tm_year = CMOS_READ(RTC_YEAR); -+#ifdef CONFIG_MACH_DECSTATION -+	real_year = CMOS_READ(RTC_DEC_YEAR); -+#endif -+	ctrl = CMOS_READ(RTC_CONTROL); -+	spin_unlock_irq(&rtc_lock); -+ -+	if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) -+	{ -+		BCD_TO_BIN(time->tm_sec); -+		BCD_TO_BIN(time->tm_min); -+		BCD_TO_BIN(time->tm_hour); -+		BCD_TO_BIN(time->tm_mday); -+		BCD_TO_BIN(time->tm_mon); -+		BCD_TO_BIN(time->tm_year); -+	} -+ -+#ifdef CONFIG_MACH_DECSTATION -+	time->tm_year += real_year - 72; -+#endif -+ -+	/* -+	 * Account for differences between how the RTC uses the values -+	 * and how they are defined in a struct rtc_time; -+	 */ -+	if (time->tm_year <= 69) -+		time->tm_year += 100; -+ -+	time->tm_mon--; -+ -+	return RTC_24H; -+} -+ -+/* Set the current date and time in the real time clock. */ -+static inline int set_rtc_time(struct rtc_time *time) -+{ -+	unsigned char mon, day, hrs, min, sec; -+	unsigned char save_control, save_freq_select; -+	unsigned int yrs; -+#ifdef CONFIG_MACH_DECSTATION -+	unsigned int real_yrs, leap_yr; -+#endif -+ -+	yrs = time->tm_year; -+	mon = time->tm_mon + 1;   /* tm_mon starts at zero */ -+	day = time->tm_mday; -+	hrs = time->tm_hour; -+	min = time->tm_min; -+	sec = time->tm_sec; -+ -+	if (yrs > 255)	/* They are unsigned */ -+		return -EINVAL; -+ -+	spin_lock_irq(&rtc_lock); -+#ifdef CONFIG_MACH_DECSTATION -+	real_yrs = yrs; -+	leap_yr = ((!((yrs + 1900) % 4) && ((yrs + 1900) % 100)) || -+			!((yrs + 1900) % 400)); -+	yrs = 72; -+ -+	/* -+	 * We want to keep the year set to 73 until March -+	 * for non-leap years, so that Feb, 29th is handled -+	 * correctly. -+	 */ -+	if (!leap_yr && mon < 3) { -+		real_yrs--; -+		yrs = 73; -+	} -+#endif -+	/* These limits and adjustments are independent of -+	 * whether the chip is in binary mode or not. -+	 */ -+	if (yrs > 169) { -+		spin_unlock_irq(&rtc_lock); -+		return -EINVAL; -+	} -+ -+	if (yrs >= 100) -+		yrs -= 100; -+ -+	if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) -+	    || RTC_ALWAYS_BCD) { -+		BIN_TO_BCD(sec); -+		BIN_TO_BCD(min); -+		BIN_TO_BCD(hrs); -+		BIN_TO_BCD(day); -+		BIN_TO_BCD(mon); -+		BIN_TO_BCD(yrs); -+	} -+ -+	save_control = CMOS_READ(RTC_CONTROL); -+	CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL); -+	save_freq_select = CMOS_READ(RTC_FREQ_SELECT); -+	CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); -+ -+#ifdef CONFIG_MACH_DECSTATION -+	CMOS_WRITE(real_yrs, RTC_DEC_YEAR); -+#endif -+	CMOS_WRITE(yrs, RTC_YEAR); -+	CMOS_WRITE(mon, RTC_MONTH); -+	CMOS_WRITE(day, RTC_DAY_OF_MONTH); -+	CMOS_WRITE(hrs, RTC_HOURS); -+	CMOS_WRITE(min, RTC_MINUTES); -+	CMOS_WRITE(sec, RTC_SECONDS); -+ -+	CMOS_WRITE(save_control, RTC_CONTROL); -+	CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); -+ -+	spin_unlock_irq(&rtc_lock); -+ -+	return 0; -+} -+ -+static inline unsigned int get_rtc_ss(void) -+{ -+	struct rtc_time h; -+ -+	get_rtc_time(&h); -+	return h.tm_sec; -+} -+ -+static inline int get_rtc_pll(struct rtc_pll_info *pll) -+{ -+	return -EINVAL; -+} -+static inline int set_rtc_pll(struct rtc_pll_info *pll) -+{ -+	return -EINVAL; -+} -+ -+#endif /* __KERNEL__ */ -+#endif /* __ASM_RTC_H__ */ ---- linux/include/asm-generic/sections.h -+++ linux/include/asm-generic/sections.h -@@ -0,0 +1,13 @@ -+#ifndef _ASM_GENERIC_SECTIONS_H_ -+#define _ASM_GENERIC_SECTIONS_H_ -+ -+/* References to section boundaries */ -+ -+extern char _text[], _stext[], _etext[]; -+extern char _data[], _sdata[], _edata[]; -+extern char __bss_start[], __bss_stop[]; -+extern char __init_begin[], __init_end[]; -+extern char _sinittext[], _einittext[]; -+extern char _end[]; -+ -+#endif /* _ASM_GENERIC_SECTIONS_H_ */ ---- linux/include/asm-generic/siginfo.h -+++ linux/include/asm-generic/siginfo.h -@@ -0,0 +1,288 @@ -+#ifndef _ASM_GENERIC_SIGINFO_H -+#define _ASM_GENERIC_SIGINFO_H -+ -+#include <linux/compiler.h> -+#include <linux/types.h> -+#include <linux/resource.h> -+ -+typedef union sigval { -+	int sival_int; -+	void __user *sival_ptr; -+} sigval_t; -+ -+/* -+ * This is the size (including padding) of the part of the -+ * struct siginfo that is before the union. -+ */ -+#ifndef __ARCH_SI_PREAMBLE_SIZE -+#define __ARCH_SI_PREAMBLE_SIZE	(3 * sizeof(int)) -+#endif -+ -+#define SI_MAX_SIZE	128 -+#ifndef SI_PAD_SIZE -+#define SI_PAD_SIZE	((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int)) -+#endif -+ -+#ifndef __ARCH_SI_UID_T -+#define __ARCH_SI_UID_T	uid_t -+#endif -+ -+/* -+ * The default "si_band" type is "long", as specified by POSIX. -+ * However, some architectures want to override this to "int" -+ * for historical compatibility reasons, so we allow that. -+ */ -+#ifndef __ARCH_SI_BAND_T -+#define __ARCH_SI_BAND_T long -+#endif -+ -+#ifndef HAVE_ARCH_SIGINFO_T -+ -+typedef struct siginfo { -+	int si_signo; -+	int si_errno; -+	int si_code; -+ -+	union { -+		int _pad[SI_PAD_SIZE]; -+ -+		/* kill() */ -+		struct { -+			pid_t _pid;		/* sender's pid */ -+			__ARCH_SI_UID_T _uid;	/* sender's uid */ -+		} _kill; -+ -+		/* POSIX.1b timers */ -+		struct { -+			timer_t _tid;		/* timer id */ -+			int _overrun;		/* overrun count */ -+			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)]; -+			sigval_t _sigval;	/* same as below */ -+			int _sys_private;       /* not to be passed to user */ -+		} _timer; -+ -+		/* POSIX.1b signals */ -+		struct { -+			pid_t _pid;		/* sender's pid */ -+			__ARCH_SI_UID_T _uid;	/* sender's uid */ -+			sigval_t _sigval; -+		} _rt; -+ -+		/* SIGCHLD */ -+		struct { -+			pid_t _pid;		/* which child */ -+			__ARCH_SI_UID_T _uid;	/* sender's uid */ -+			int _status;		/* exit code */ -+			clock_t _utime; -+			clock_t _stime; -+		} _sigchld; -+ -+		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ -+		struct { -+			void __user *_addr; /* faulting insn/memory ref. */ -+#ifdef __ARCH_SI_TRAPNO -+			int _trapno;	/* TRAP # which caused the signal */ -+#endif -+		} _sigfault; -+ -+		/* SIGPOLL */ -+		struct { -+			__ARCH_SI_BAND_T _band;	/* POLL_IN, POLL_OUT, POLL_MSG */ -+			int _fd; -+		} _sigpoll; -+	} _sifields; -+} siginfo_t; -+ -+#endif -+ -+/* -+ * How these fields are to be accessed. -+ */ -+#define si_pid		_sifields._kill._pid -+#define si_uid		_sifields._kill._uid -+#define si_tid		_sifields._timer._tid -+#define si_overrun	_sifields._timer._overrun -+#define si_sys_private  _sifields._timer._sys_private -+#define si_status	_sifields._sigchld._status -+#define si_utime	_sifields._sigchld._utime -+#define si_stime	_sifields._sigchld._stime -+#define si_value	_sifields._rt._sigval -+#define si_int		_sifields._rt._sigval.sival_int -+#define si_ptr		_sifields._rt._sigval.sival_ptr -+#define si_addr		_sifields._sigfault._addr -+#ifdef __ARCH_SI_TRAPNO -+#define si_trapno	_sifields._sigfault._trapno -+#endif -+#define si_band		_sifields._sigpoll._band -+#define si_fd		_sifields._sigpoll._fd -+ -+#ifdef __KERNEL__ -+#define __SI_MASK	0xffff0000u -+#define __SI_KILL	(0 << 16) -+#define __SI_TIMER	(1 << 16) -+#define __SI_POLL	(2 << 16) -+#define __SI_FAULT	(3 << 16) -+#define __SI_CHLD	(4 << 16) -+#define __SI_RT		(5 << 16) -+#define __SI_MESGQ	(6 << 16) -+#define __SI_CODE(T,N)	((T) | ((N) & 0xffff)) -+#else -+#define __SI_KILL	0 -+#define __SI_TIMER	0 -+#define __SI_POLL	0 -+#define __SI_FAULT	0 -+#define __SI_CHLD	0 -+#define __SI_RT		0 -+#define __SI_MESGQ	0 -+#define __SI_CODE(T,N)	(N) -+#endif -+ -+/* -+ * si_code values -+ * Digital reserves positive values for kernel-generated signals. -+ */ -+#define SI_USER		0		/* sent by kill, sigsend, raise */ -+#define SI_KERNEL	0x80		/* sent by the kernel from somewhere */ -+#define SI_QUEUE	-1		/* sent by sigqueue */ -+#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */ -+#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */ -+#define SI_ASYNCIO	-4		/* sent by AIO completion */ -+#define SI_SIGIO	-5		/* sent by queued SIGIO */ -+#define SI_TKILL	-6		/* sent by tkill system call */ -+#define SI_DETHREAD	-7		/* sent by execve() killing subsidiary threads */ -+ -+#define SI_FROMUSER(siptr)	((siptr)->si_code <= 0) -+#define SI_FROMKERNEL(siptr)	((siptr)->si_code > 0) -+ -+/* -+ * SIGILL si_codes -+ */ -+#define ILL_ILLOPC	(__SI_FAULT|1)	/* illegal opcode */ -+#define ILL_ILLOPN	(__SI_FAULT|2)	/* illegal operand */ -+#define ILL_ILLADR	(__SI_FAULT|3)	/* illegal addressing mode */ -+#define ILL_ILLTRP	(__SI_FAULT|4)	/* illegal trap */ -+#define ILL_PRVOPC	(__SI_FAULT|5)	/* privileged opcode */ -+#define ILL_PRVREG	(__SI_FAULT|6)	/* privileged register */ -+#define ILL_COPROC	(__SI_FAULT|7)	/* coprocessor error */ -+#define ILL_BADSTK	(__SI_FAULT|8)	/* internal stack error */ -+#define NSIGILL		8 -+ -+/* -+ * SIGFPE si_codes -+ */ -+#define FPE_INTDIV	(__SI_FAULT|1)	/* integer divide by zero */ -+#define FPE_INTOVF	(__SI_FAULT|2)	/* integer overflow */ -+#define FPE_FLTDIV	(__SI_FAULT|3)	/* floating point divide by zero */ -+#define FPE_FLTOVF	(__SI_FAULT|4)	/* floating point overflow */ -+#define FPE_FLTUND	(__SI_FAULT|5)	/* floating point underflow */ -+#define FPE_FLTRES	(__SI_FAULT|6)	/* floating point inexact result */ -+#define FPE_FLTINV	(__SI_FAULT|7)	/* floating point invalid operation */ -+#define FPE_FLTSUB	(__SI_FAULT|8)	/* subscript out of range */ -+#define NSIGFPE		8 -+ -+/* -+ * SIGSEGV si_codes -+ */ -+#define SEGV_MAPERR	(__SI_FAULT|1)	/* address not mapped to object */ -+#define SEGV_ACCERR	(__SI_FAULT|2)	/* invalid permissions for mapped object */ -+#define NSIGSEGV	2 -+ -+/* -+ * SIGBUS si_codes -+ */ -+#define BUS_ADRALN	(__SI_FAULT|1)	/* invalid address alignment */ -+#define BUS_ADRERR	(__SI_FAULT|2)	/* non-existant physical address */ -+#define BUS_OBJERR	(__SI_FAULT|3)	/* object specific hardware error */ -+#define NSIGBUS		3 -+ -+/* -+ * SIGTRAP si_codes -+ */ -+#define TRAP_BRKPT	(__SI_FAULT|1)	/* process breakpoint */ -+#define TRAP_TRACE	(__SI_FAULT|2)	/* process trace trap */ -+#define NSIGTRAP	2 -+ -+/* -+ * SIGCHLD si_codes -+ */ -+#define CLD_EXITED	(__SI_CHLD|1)	/* child has exited */ -+#define CLD_KILLED	(__SI_CHLD|2)	/* child was killed */ -+#define CLD_DUMPED	(__SI_CHLD|3)	/* child terminated abnormally */ -+#define CLD_TRAPPED	(__SI_CHLD|4)	/* traced child has trapped */ -+#define CLD_STOPPED	(__SI_CHLD|5)	/* child has stopped */ -+#define CLD_CONTINUED	(__SI_CHLD|6)	/* stopped child has continued */ -+#define NSIGCHLD	6 -+ -+/* -+ * SIGPOLL si_codes -+ */ -+#define POLL_IN		(__SI_POLL|1)	/* data input available */ -+#define POLL_OUT	(__SI_POLL|2)	/* output buffers available */ -+#define POLL_MSG	(__SI_POLL|3)	/* input message available */ -+#define POLL_ERR	(__SI_POLL|4)	/* i/o error */ -+#define POLL_PRI	(__SI_POLL|5)	/* high priority input available */ -+#define POLL_HUP	(__SI_POLL|6)	/* device disconnected */ -+#define NSIGPOLL	6 -+ -+/* -+ * sigevent definitions -+ *  -+ * It seems likely that SIGEV_THREAD will have to be handled from  -+ * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the -+ * thread manager then catches and does the appropriate nonsense. -+ * However, everything is written out here so as to not get lost. -+ */ -+#define SIGEV_SIGNAL	0	/* notify via signal */ -+#define SIGEV_NONE	1	/* other notification: meaningless */ -+#define SIGEV_THREAD	2	/* deliver via thread creation */ -+#define SIGEV_THREAD_ID 4	/* deliver to thread */ -+ -+#define SIGEV_MAX_SIZE	64 -+#ifndef SIGEV_PAD_SIZE -+#define SIGEV_PAD_SIZE	((SIGEV_MAX_SIZE/sizeof(int)) - 3) -+#endif -+ -+typedef struct sigevent { -+	sigval_t sigev_value; -+	int sigev_signo; -+	int sigev_notify; -+	union { -+		int _pad[SIGEV_PAD_SIZE]; -+		 int _tid; -+ -+		struct { -+			void (*_function)(sigval_t); -+			void *_attribute;	/* really pthread_attr_t */ -+		} _sigev_thread; -+	} _sigev_un; -+} sigevent_t; -+ -+#define sigev_notify_function	_sigev_un._sigev_thread._function -+#define sigev_notify_attributes	_sigev_un._sigev_thread._attribute -+#define sigev_notify_thread_id	 _sigev_un._tid -+ -+#ifdef __KERNEL__ -+ -+struct siginfo; -+void do_schedule_next_timer(struct siginfo *info); -+ -+#ifndef HAVE_ARCH_COPY_SIGINFO -+ -+#include <linux/string.h> -+ -+static inline void copy_siginfo(struct siginfo *to, struct siginfo *from) -+{ -+	if (from->si_code < 0) -+		memcpy(to, from, sizeof(*to)); -+	else -+		/* _sigchld is currently the largest know union member */ -+		memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld)); -+} -+ -+#endif -+ -+extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from); -+ -+#endif /* __KERNEL__ */ -+ -+#endif ---- linux/include/asm-generic/statfs.h -+++ linux/include/asm-generic/statfs.h -@@ -0,0 +1,51 @@ -+#ifndef _GENERIC_STATFS_H -+#define _GENERIC_STATFS_H -+ -+#ifndef __KERNEL_STRICT_NAMES -+# include <linux/types.h> -+typedef __kernel_fsid_t	fsid_t; -+#endif -+ -+struct statfs { -+	__u32 f_type; -+	__u32 f_bsize; -+	__u32 f_blocks; -+	__u32 f_bfree; -+	__u32 f_bavail; -+	__u32 f_files; -+	__u32 f_ffree; -+	__kernel_fsid_t f_fsid; -+	__u32 f_namelen; -+	__u32 f_frsize; -+	__u32 f_spare[5]; -+}; -+ -+struct statfs64 { -+	__u32 f_type; -+	__u32 f_bsize; -+	__u64 f_blocks; -+	__u64 f_bfree; -+	__u64 f_bavail; -+	__u64 f_files; -+	__u64 f_ffree; -+	__kernel_fsid_t f_fsid; -+	__u32 f_namelen; -+	__u32 f_frsize; -+	__u32 f_spare[5]; -+}; -+ -+struct compat_statfs64 { -+	__u32 f_type; -+	__u32 f_bsize; -+	__u64 f_blocks; -+	__u64 f_bfree; -+	__u64 f_bavail; -+	__u64 f_files; -+	__u64 f_ffree; -+	__kernel_fsid_t f_fsid; -+	__u32 f_namelen; -+	__u32 f_frsize; -+	__u32 f_spare[5]; -+}; -+ -+#endif ---- linux/include/asm-generic/termios.h -+++ linux/include/asm-generic/termios.h -@@ -0,0 +1,69 @@ -+/* termios.h: generic termios/termio user copying/translation -+ */ -+ -+#ifndef _ASM_GENERIC_TERMIOS_H -+#define _ASM_GENERIC_TERMIOS_H -+ -+#include <asm/uaccess.h> -+ -+#ifndef __ARCH_TERMIO_GETPUT -+ -+/* -+ * Translate a "termio" structure into a "termios". Ugh. -+ */ -+static inline int user_termio_to_kernel_termios(struct termios *termios, -+						struct termio __user *termio) -+{ -+	unsigned short tmp; -+ -+	if (get_user(tmp, &termio->c_iflag) < 0) -+		goto fault; -+	termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp; -+ -+	if (get_user(tmp, &termio->c_oflag) < 0) -+		goto fault; -+	termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp; -+ -+	if (get_user(tmp, &termio->c_cflag) < 0) -+		goto fault; -+	termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp; -+ -+	if (get_user(tmp, &termio->c_lflag) < 0) -+		goto fault; -+	termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp; -+ -+	if (get_user(termios->c_line, &termio->c_line) < 0) -+		goto fault; -+ -+	if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0) -+		goto fault; -+ -+	return 0; -+ -+ fault: -+	return -EFAULT; -+} -+ -+/* -+ * Translate a "termios" structure into a "termio". Ugh. -+ */ -+static inline int kernel_termios_to_user_termio(struct termio __user *termio, -+						struct termios *termios) -+{ -+	if (put_user(termios->c_iflag, &termio->c_iflag) < 0 || -+	    put_user(termios->c_oflag, &termio->c_oflag) < 0 || -+	    put_user(termios->c_cflag, &termio->c_cflag) < 0 || -+	    put_user(termios->c_lflag, &termio->c_lflag) < 0 || -+	    put_user(termios->c_line,  &termio->c_line) < 0 || -+	    copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0) -+		return -EFAULT; -+ -+	return 0; -+} -+ -+#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) -+#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) -+ -+#endif	/* __ARCH_TERMIO_GETPUT */ -+ -+#endif /* _ASM_GENERIC_TERMIOS_H */ ---- linux/include/asm-generic/tlb.h -+++ linux/include/asm-generic/tlb.h -@@ -0,0 +1,160 @@ -+/* asm-generic/tlb.h -+ * -+ *	Generic TLB shootdown code -+ * -+ * Copyright 2001 Red Hat, Inc. -+ * Based on code from mm/memory.c Copyright Linus Torvalds and others. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * as published by the Free Software Foundation; either version -+ * 2 of the License, or (at your option) any later version. -+ */ -+#ifndef _ASM_GENERIC__TLB_H -+#define _ASM_GENERIC__TLB_H -+ -+// #include <linux/config.h> -+#include <linux/swap.h> -+#include <asm/pgalloc.h> -+#include <asm/tlbflush.h> -+ -+/* -+ * For UP we don't need to worry about TLB flush -+ * and page free order so much.. -+ */ -+#ifdef CONFIG_SMP -+  #define FREE_PTE_NR	506 -+  #define tlb_fast_mode(tlb) ((tlb)->nr == ~0U) -+#else -+  #define FREE_PTE_NR	1 -+  #define tlb_fast_mode(tlb) 1 -+#endif -+ -+/* struct mmu_gather is an opaque type used by the mm code for passing around -+ * any data needed by arch specific code for tlb_remove_page.  This structure -+ * can be per-CPU or per-MM as the page table lock is held for the duration of -+ * TLB shootdown. -+ */ -+struct mmu_gather { -+	struct mm_struct	*mm; -+	unsigned int		nr;	/* set to ~0U means fast mode */ -+	unsigned int		need_flush;/* Really unmapped some ptes? */ -+	unsigned int		fullmm; /* non-zero means full mm flush */ -+	unsigned long		freed; -+	struct page *		pages[FREE_PTE_NR]; -+}; -+ -+/* Users of the generic TLB shootdown code must declare this storage space. */ -+DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); -+ -+/* tlb_gather_mmu -+ *	Return a pointer to an initialized struct mmu_gather. -+ */ -+static inline struct mmu_gather * -+tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) -+{ -+	struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id()); -+ -+	tlb->mm = mm; -+ -+	/* Use fast mode if only one CPU is online */ -+	tlb->nr = num_online_cpus() > 1 ? 0U : ~0U; -+ -+	tlb->fullmm = full_mm_flush; -+	tlb->freed = 0; -+ -+	return tlb; -+} -+ -+static inline void -+tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) -+{ -+	if (!tlb->need_flush) -+		return; -+	tlb->need_flush = 0; -+	tlb_flush(tlb); -+	if (!tlb_fast_mode(tlb)) { -+		free_pages_and_swap_cache(tlb->pages, tlb->nr); -+		tlb->nr = 0; -+	} -+} -+ -+/* tlb_finish_mmu -+ *	Called at the end of the shootdown operation to free up any resources -+ *	that were required.  The page table lock is still held at this point. -+ */ -+static inline void -+tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) -+{ -+	int freed = tlb->freed; -+	struct mm_struct *mm = tlb->mm; -+	int rss = mm->rss; -+ -+	if (rss < freed) -+		freed = rss; -+	mm->rss = rss - freed; -+	tlb_flush_mmu(tlb, start, end); -+ -+	/* keep the page table cache within bounds */ -+	check_pgt_cache(); -+} -+ -+static inline unsigned int -+tlb_is_full_mm(struct mmu_gather *tlb) -+{ -+	return tlb->fullmm; -+} -+ -+/* tlb_remove_page -+ *	Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while -+ *	handling the additional races in SMP caused by other CPUs caching valid -+ *	mappings in their TLBs. -+ */ -+static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) -+{ -+	tlb->need_flush = 1; -+	if (tlb_fast_mode(tlb)) { -+		free_page_and_swap_cache(page); -+		return; -+	} -+	tlb->pages[tlb->nr++] = page; -+	if (tlb->nr >= FREE_PTE_NR) -+		tlb_flush_mmu(tlb, 0, 0); -+} -+ -+/** -+ * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation. -+ * -+ * Record the fact that pte's were really umapped in ->need_flush, so we can -+ * later optimise away the tlb invalidate.   This helps when userspace is -+ * unmapping already-unmapped pages, which happens quite a lot. -+ */ -+#define tlb_remove_tlb_entry(tlb, ptep, address)		\ -+	do {							\ -+		tlb->need_flush = 1;				\ -+		__tlb_remove_tlb_entry(tlb, ptep, address);	\ -+	} while (0) -+ -+#define pte_free_tlb(tlb, ptep)					\ -+	do {							\ -+		tlb->need_flush = 1;				\ -+		__pte_free_tlb(tlb, ptep);			\ -+	} while (0) -+ -+#ifndef __ARCH_HAS_4LEVEL_HACK -+#define pud_free_tlb(tlb, pudp)					\ -+	do {							\ -+		tlb->need_flush = 1;				\ -+		__pud_free_tlb(tlb, pudp);			\ -+	} while (0) -+#endif -+ -+#define pmd_free_tlb(tlb, pmdp)					\ -+	do {							\ -+		tlb->need_flush = 1;				\ -+		__pmd_free_tlb(tlb, pmdp);			\ -+	} while (0) -+ -+#define tlb_migrate_finish(mm) do {} while (0) -+ -+#endif /* _ASM_GENERIC__TLB_H */ ---- linux/include/asm-generic/topology.h -+++ linux/include/asm-generic/topology.h -@@ -0,0 +1,48 @@ -+/* -+ * linux/include/asm-generic/topology.h -+ * -+ * Written by: Matthew Dobson, IBM Corporation -+ * -+ * Copyright (C) 2002, IBM Corp. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ * Send feedback to <colpatch@us.ibm.com> -+ */ -+#ifndef _ASM_GENERIC_TOPOLOGY_H -+#define _ASM_GENERIC_TOPOLOGY_H -+ -+/* Other architectures wishing to use this simple topology API should fill -+   in the below functions as appropriate in their own <asm/topology.h> file. */ -+#ifndef cpu_to_node -+#define cpu_to_node(cpu)	(0) -+#endif -+#ifndef parent_node -+#define parent_node(node)	(0) -+#endif -+#ifndef node_to_cpumask -+#define node_to_cpumask(node)	(cpu_online_map) -+#endif -+#ifndef node_to_first_cpu -+#define node_to_first_cpu(node)	(0) -+#endif -+#ifndef pcibus_to_cpumask -+#define pcibus_to_cpumask(bus)	(cpu_online_map) -+#endif -+ -+#endif /* _ASM_GENERIC_TOPOLOGY_H */ ---- linux/include/asm-generic/uaccess.h -+++ linux/include/asm-generic/uaccess.h -@@ -0,0 +1,26 @@ -+#ifndef _ASM_GENERIC_UACCESS_H_ -+#define _ASM_GENERIC_UACCESS_H_ -+ -+/* -+ * This macro should be used instead of __get_user() when accessing -+ * values at locations that are not known to be aligned. -+ */ -+#define __get_user_unaligned(x, ptr)					\ -+({									\ -+	__typeof__ (*(ptr)) __x;					\ -+	__copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0;	\ -+	(x) = __x;							\ -+}) -+ -+ -+/* -+ * This macro should be used instead of __put_user() when accessing -+ * values at locations that are not known to be aligned. -+ */ -+#define __put_user_unaligned(x, ptr)					\ -+({									\ -+	__typeof__ (*(ptr)) __x = (x);					\ -+	__copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0;	\ -+}) -+ -+#endif /* _ASM_GENERIC_UACCESS_H */ ---- linux/include/asm-generic/unaligned.h -+++ linux/include/asm-generic/unaligned.h -@@ -0,0 +1,20 @@ -+#ifndef _ASM_GENERIC_UNALIGNED_H_ -+#define _ASM_GENERIC_UNALIGNED_H_ -+ -+/* -+ * For the benefit of those who are trying to port Linux to another -+ * architecture, here are some C-language equivalents.  -+ */ -+ -+#include <asm/string.h> -+ -+ -+#define get_unaligned(ptr) \ -+  ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; }) -+ -+#define put_unaligned(val, ptr)				\ -+  ({ __typeof__(*(ptr)) __tmp = (val);			\ -+     memcpy((ptr), &__tmp, sizeof(*(ptr)));		\ -+     (void)0; }) -+ -+#endif /* _ASM_GENERIC_UNALIGNED_H */ ---- linux/include/asm-generic/vmlinux.lds.h -+++ linux/include/asm-generic/vmlinux.lds.h -@@ -0,0 +1,90 @@ -+#ifndef LOAD_OFFSET -+#define LOAD_OFFSET 0 -+#endif -+ -+#ifndef VMLINUX_SYMBOL -+#define VMLINUX_SYMBOL(_sym_) _sym_ -+#endif -+ -+#define RODATA								\ -+	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\ -+		*(.rodata) *(.rodata.*)					\ -+		*(__vermagic)		/* Kernel version magic */	\ -+	}								\ -+									\ -+	.rodata1          : AT(ADDR(.rodata1) - LOAD_OFFSET) {		\ -+		*(.rodata1)						\ -+	}								\ -+									\ -+	/* PCI quirks */						\ -+	.pci_fixup        : AT(ADDR(.pci_fixup) - LOAD_OFFSET) {	\ -+		VMLINUX_SYMBOL(__start_pci_fixups_early) = .;		\ -+		*(.pci_fixup_early)					\ -+		VMLINUX_SYMBOL(__end_pci_fixups_early) = .;		\ -+		VMLINUX_SYMBOL(__start_pci_fixups_header) = .;		\ -+		*(.pci_fixup_header)					\ -+		VMLINUX_SYMBOL(__end_pci_fixups_header) = .;		\ -+		VMLINUX_SYMBOL(__start_pci_fixups_final) = .;		\ -+		*(.pci_fixup_final)					\ -+		VMLINUX_SYMBOL(__end_pci_fixups_final) = .;		\ -+		VMLINUX_SYMBOL(__start_pci_fixups_enable) = .;		\ -+		*(.pci_fixup_enable)					\ -+		VMLINUX_SYMBOL(__end_pci_fixups_enable) = .;		\ -+	}								\ -+									\ -+	/* Kernel symbol table: Normal symbols */			\ -+	__ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {		\ -+		VMLINUX_SYMBOL(__start___ksymtab) = .;			\ -+		*(__ksymtab)						\ -+		VMLINUX_SYMBOL(__stop___ksymtab) = .;			\ -+	}								\ -+									\ -+	/* Kernel symbol table: GPL-only symbols */			\ -+	__ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {	\ -+		VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;		\ -+		*(__ksymtab_gpl)					\ -+		VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;		\ -+	}								\ -+									\ -+	/* Kernel symbol table: Normal symbols */			\ -+	__kcrctab         : AT(ADDR(__kcrctab) - LOAD_OFFSET) {		\ -+		VMLINUX_SYMBOL(__start___kcrctab) = .;			\ -+		*(__kcrctab)						\ -+		VMLINUX_SYMBOL(__stop___kcrctab) = .;			\ -+	}								\ -+									\ -+	/* Kernel symbol table: GPL-only symbols */			\ -+	__kcrctab_gpl     : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) {	\ -+		VMLINUX_SYMBOL(__start___kcrctab_gpl) = .;		\ -+		*(__kcrctab_gpl)					\ -+		VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .;		\ -+	}								\ -+									\ -+	/* Kernel symbol table: strings */				\ -+        __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {	\ -+		*(__ksymtab_strings)					\ -+	}								\ -+									\ -+	/* Built-in module parameters. */				\ -+	__param : AT(ADDR(__param) - LOAD_OFFSET) {			\ -+		VMLINUX_SYMBOL(__start___param) = .;			\ -+		*(__param)						\ -+		VMLINUX_SYMBOL(__stop___param) = .;			\ -+	} -+ -+#define SECURITY_INIT							\ -+	.security_initcall.init : {					\ -+		VMLINUX_SYMBOL(__security_initcall_start) = .;		\ -+		*(.security_initcall.init) 				\ -+		VMLINUX_SYMBOL(__security_initcall_end) = .;		\ -+	} -+ -+#define SCHED_TEXT							\ -+		VMLINUX_SYMBOL(__sched_text_start) = .;			\ -+		*(.sched.text)						\ -+		VMLINUX_SYMBOL(__sched_text_end) = .; -+ -+#define LOCK_TEXT							\ -+		VMLINUX_SYMBOL(__lock_text_start) = .;			\ -+		*(.spinlock.text)					\ -+		VMLINUX_SYMBOL(__lock_text_end) = .; ---- linux/include/asm-generic/xor.h -+++ linux/include/asm-generic/xor.h -@@ -0,0 +1,718 @@ -+/* -+ * include/asm-generic/xor.h -+ * -+ * Generic optimized RAID-5 checksumming functions. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2, or (at your option) -+ * any later version. -+ * -+ * You should have received a copy of the GNU General Public License -+ * (for example /usr/src/linux/COPYING); if not, write to the Free -+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ */ -+ -+#include <asm/processor.h> -+ -+static void -+xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		p1[0] ^= p2[0]; -+		p1[1] ^= p2[1]; -+		p1[2] ^= p2[2]; -+		p1[3] ^= p2[3]; -+		p1[4] ^= p2[4]; -+		p1[5] ^= p2[5]; -+		p1[6] ^= p2[6]; -+		p1[7] ^= p2[7]; -+		p1 += 8; -+		p2 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		p1[0] ^= p2[0] ^ p3[0]; -+		p1[1] ^= p2[1] ^ p3[1]; -+		p1[2] ^= p2[2] ^ p3[2]; -+		p1[3] ^= p2[3] ^ p3[3]; -+		p1[4] ^= p2[4] ^ p3[4]; -+		p1[5] ^= p2[5] ^ p3[5]; -+		p1[6] ^= p2[6] ^ p3[6]; -+		p1[7] ^= p2[7] ^ p3[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; -+		p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; -+		p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; -+		p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; -+		p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; -+		p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; -+		p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; -+		p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4, unsigned long *p5) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; -+		p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; -+		p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; -+		p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; -+		p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; -+		p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; -+		p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; -+		p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+		p5 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		d0 ^= p4[0]; -+		d1 ^= p4[1]; -+		d2 ^= p4[2]; -+		d3 ^= p4[3]; -+		d4 ^= p4[4]; -+		d5 ^= p4[5]; -+		d6 ^= p4[6]; -+		d7 ^= p4[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4, unsigned long *p5) -+{ -+	long lines = bytes / (sizeof (long)) / 8; -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		d0 ^= p4[0]; -+		d1 ^= p4[1]; -+		d2 ^= p4[2]; -+		d3 ^= p4[3]; -+		d4 ^= p4[4]; -+		d5 ^= p4[5]; -+		d6 ^= p4[6]; -+		d7 ^= p4[7]; -+		d0 ^= p5[0]; -+		d1 ^= p5[1]; -+		d2 ^= p5[2]; -+		d3 ^= p5[3]; -+		d4 ^= p5[4]; -+		d5 ^= p5[5]; -+		d6 ^= p5[6]; -+		d7 ^= p5[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+		p5 += 8; -+	} while (--lines > 0); -+} -+ -+static void -+xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+	prefetchw(p1); -+	prefetch(p2); -+ -+	do { -+		prefetchw(p1+8); -+		prefetch(p2+8); -+ once_more: -+		p1[0] ^= p2[0]; -+		p1[1] ^= p2[1]; -+		p1[2] ^= p2[2]; -+		p1[3] ^= p2[3]; -+		p1[4] ^= p2[4]; -+		p1[5] ^= p2[5]; -+		p1[6] ^= p2[6]; -+		p1[7] ^= p2[7]; -+		p1 += 8; -+		p2 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+ -+	do { -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+ once_more: -+		p1[0] ^= p2[0] ^ p3[0]; -+		p1[1] ^= p2[1] ^ p3[1]; -+		p1[2] ^= p2[2] ^ p3[2]; -+		p1[3] ^= p2[3] ^ p3[3]; -+		p1[4] ^= p2[4] ^ p3[4]; -+		p1[5] ^= p2[5] ^ p3[5]; -+		p1[6] ^= p2[6] ^ p3[6]; -+		p1[7] ^= p2[7] ^ p3[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+	prefetch(p4); -+ -+	do { -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+		prefetch(p4+8); -+ once_more: -+		p1[0] ^= p2[0] ^ p3[0] ^ p4[0]; -+		p1[1] ^= p2[1] ^ p3[1] ^ p4[1]; -+		p1[2] ^= p2[2] ^ p3[2] ^ p4[2]; -+		p1[3] ^= p2[3] ^ p3[3] ^ p4[3]; -+		p1[4] ^= p2[4] ^ p3[4] ^ p4[4]; -+		p1[5] ^= p2[5] ^ p3[5] ^ p4[5]; -+		p1[6] ^= p2[6] ^ p3[6] ^ p4[6]; -+		p1[7] ^= p2[7] ^ p3[7] ^ p4[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4, unsigned long *p5) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+	prefetch(p4); -+	prefetch(p5); -+ -+	do { -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+		prefetch(p4+8); -+		prefetch(p5+8); -+ once_more: -+		p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0]; -+		p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1]; -+		p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2]; -+		p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3]; -+		p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4]; -+		p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5]; -+		p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6]; -+		p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7]; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+		p5 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+ -+		prefetchw(p1+8); -+		prefetch(p2+8); -+ once_more: -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+ -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+ once_more: -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+	prefetch(p4); -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+ -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+		prefetch(p4+8); -+ once_more: -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		d0 ^= p4[0]; -+		d1 ^= p4[1]; -+		d2 ^= p4[2]; -+		d3 ^= p4[3]; -+		d4 ^= p4[4]; -+		d5 ^= p4[5]; -+		d6 ^= p4[6]; -+		d7 ^= p4[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static void -+xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2, -+	    unsigned long *p3, unsigned long *p4, unsigned long *p5) -+{ -+	long lines = bytes / (sizeof (long)) / 8 - 1; -+ -+	prefetchw(p1); -+	prefetch(p2); -+	prefetch(p3); -+	prefetch(p4); -+	prefetch(p5); -+ -+	do { -+		register long d0, d1, d2, d3, d4, d5, d6, d7; -+ -+		prefetchw(p1+8); -+		prefetch(p2+8); -+		prefetch(p3+8); -+		prefetch(p4+8); -+		prefetch(p5+8); -+ once_more: -+		d0 = p1[0];	/* Pull the stuff into registers	*/ -+		d1 = p1[1];	/*  ... in bursts, if possible.		*/ -+		d2 = p1[2]; -+		d3 = p1[3]; -+		d4 = p1[4]; -+		d5 = p1[5]; -+		d6 = p1[6]; -+		d7 = p1[7]; -+		d0 ^= p2[0]; -+		d1 ^= p2[1]; -+		d2 ^= p2[2]; -+		d3 ^= p2[3]; -+		d4 ^= p2[4]; -+		d5 ^= p2[5]; -+		d6 ^= p2[6]; -+		d7 ^= p2[7]; -+		d0 ^= p3[0]; -+		d1 ^= p3[1]; -+		d2 ^= p3[2]; -+		d3 ^= p3[3]; -+		d4 ^= p3[4]; -+		d5 ^= p3[5]; -+		d6 ^= p3[6]; -+		d7 ^= p3[7]; -+		d0 ^= p4[0]; -+		d1 ^= p4[1]; -+		d2 ^= p4[2]; -+		d3 ^= p4[3]; -+		d4 ^= p4[4]; -+		d5 ^= p4[5]; -+		d6 ^= p4[6]; -+		d7 ^= p4[7]; -+		d0 ^= p5[0]; -+		d1 ^= p5[1]; -+		d2 ^= p5[2]; -+		d3 ^= p5[3]; -+		d4 ^= p5[4]; -+		d5 ^= p5[5]; -+		d6 ^= p5[6]; -+		d7 ^= p5[7]; -+		p1[0] = d0;	/* Store the result (in bursts)		*/ -+		p1[1] = d1; -+		p1[2] = d2; -+		p1[3] = d3; -+		p1[4] = d4; -+		p1[5] = d5; -+		p1[6] = d6; -+		p1[7] = d7; -+		p1 += 8; -+		p2 += 8; -+		p3 += 8; -+		p4 += 8; -+		p5 += 8; -+	} while (--lines > 0); -+	if (lines == 0) -+		goto once_more; -+} -+ -+static struct xor_block_template xor_block_8regs = { -+	.name = "8regs", -+	.do_2 = xor_8regs_2, -+	.do_3 = xor_8regs_3, -+	.do_4 = xor_8regs_4, -+	.do_5 = xor_8regs_5, -+}; -+ -+static struct xor_block_template xor_block_32regs = { -+	.name = "32regs", -+	.do_2 = xor_32regs_2, -+	.do_3 = xor_32regs_3, -+	.do_4 = xor_32regs_4, -+	.do_5 = xor_32regs_5, -+}; -+ -+static struct xor_block_template xor_block_8regs_p = { -+	.name = "8regs_prefetch", -+	.do_2 = xor_8regs_p_2, -+	.do_3 = xor_8regs_p_3, -+	.do_4 = xor_8regs_p_4, -+	.do_5 = xor_8regs_p_5, -+}; -+ -+static struct xor_block_template xor_block_32regs_p = { -+	.name = "32regs_prefetch", -+	.do_2 = xor_32regs_p_2, -+	.do_3 = xor_32regs_p_3, -+	.do_4 = xor_32regs_p_4, -+	.do_5 = xor_32regs_p_5, -+}; -+ -+#define XOR_TRY_TEMPLATES			\ -+	do {					\ -+		xor_speed(&xor_block_8regs);	\ -+		xor_speed(&xor_block_8regs_p);	\ -+		xor_speed(&xor_block_32regs);	\ -+		xor_speed(&xor_block_32regs_p);	\ -+	} while (0) ---- linux/include/asm-nios2nommu/altera_juart.h -+++ linux/include/asm-nios2nommu/altera_juart.h -@@ -0,0 +1,36 @@ -+/*------------------------------------------------------------------------ -+ * -+ *  linux/drivers/serial/altera_juart.h -+ * -+ *  Driver for Altera JTAG UART core with Avalon interface -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * History: -+ *    Jun/20/2005   DGT Microtronix Datacom NiosII -+ * -+ -----------------------------------------------------------------------*/ -+ -+#ifndef _ALTERA_JUART_H_ -+    #define _ALTERA_JUART_H_ -+ -+    /* jtag uart details needed outside of the driver itself:           */ -+    /*  by: arch/kernel/start.c - boot time error message(s)            */ -+ -+    void jtaguart_console_write -+            (       struct console  *co, -+             const  char            *s, -+                    unsigned int     count); -+ -+#endif  /* _ALTERA_JUART_H_ */ ---- linux/include/asm-nios2nommu/a.out.h -+++ linux/include/asm-nios2nommu/a.out.h -@@ -0,0 +1,85 @@ -+/* $Id: a.out.h,v 1.4 2004/03/30 19:35:04 ken-h Exp $ */ -+/* -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef __NIOS2NOMMU_A_OUT_H__ -+#define __NIOS2NOMMU_A_OUT_H__ -+ -+#define SPARC_PGSIZE    0x1000        /* Thanks to the sun4 architecture... */ -+#define SEGMENT_SIZE    SPARC_PGSIZE  /* whee... */ -+ -+struct exec { -+	unsigned char a_dynamic:1;      /* A __DYNAMIC is in this image */ -+	unsigned char a_toolversion:7; -+	unsigned char a_machtype; -+	unsigned short a_info; -+	unsigned long a_text;		/* length of text, in bytes */ -+	unsigned long a_data;		/* length of data, in bytes */ -+	unsigned long a_bss;		/* length of bss, in bytes */ -+	unsigned long a_syms;		/* length of symbol table, in bytes */ -+	unsigned long a_entry;		/* where program begins */ -+	unsigned long a_trsize; -+	unsigned long a_drsize; -+}; -+ -+#define INIT_EXEC {				\ -+	.a_dynamic	= 0,			\ -+	.a_toolversion	= 0,			\ -+	.a_machtype	= 0,			\ -+	.a_info		= 0,			\ -+	.a_text		= 0,			\ -+	.a_data		= 0,			\ -+	.a_bss		= 0,			\ -+	.a_syms		= 0,			\ -+	.a_entry	= 0,			\ -+	.a_trsize	= 0,			\ -+	.a_drsize	= 0,			\ -+} -+ -+/* Where in the file does the text information begin? */ -+#define N_TXTOFF(x)     (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec)) -+ -+/* Where do the Symbols start? */ -+#define N_SYMOFF(x)     (N_TXTOFF(x) + (x).a_text +   \ -+                         (x).a_data + (x).a_trsize +  \ -+                         (x).a_drsize) -+ -+/* Where does text segment go in memory after being loaded? */ -+#define N_TXTADDR(x)    (((N_MAGIC(x) == ZMAGIC) &&        \ -+	                 ((x).a_entry < SPARC_PGSIZE)) ?   \ -+                          0 : SPARC_PGSIZE) -+ -+/* And same for the data segment.. */ -+#define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ?         \ -+                      (N_TXTADDR(x) + (x).a_text)  \ -+                       : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) -+ -+#define N_TRSIZE(a)	((a).a_trsize) -+#define N_DRSIZE(a)	((a).a_drsize) -+#define N_SYMSIZE(a)	((a).a_syms) -+ -+#ifdef __KERNEL__ -+ -+#define STACK_TOP	TASK_SIZE -+ -+#endif -+ -+#endif /* __NIOS2NOMMU_A_OUT_H__ */ ---- linux/include/asm-nios2nommu/asm-macros.h -+++ linux/include/asm-nios2nommu/asm-macros.h -@@ -0,0 +1,331 @@ -+/* -+ * Macro used to simplify coding multi-line assembler. -+ * Some of the bit test macro can simplify down to one line -+ * depending on the mask value. -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+/* -+ * ANDs reg2 with mask and places the result in reg1. -+ * -+ * You cannnot use the same register for reg1 & reg2. -+ */ -+ -+.macro ANDI32	reg1,reg2,mask -+ .if \mask & 0xffff -+  .if \mask & 0xffff0000 -+	movhi	\reg1,%hi(\mask) -+	movui	\reg1,%lo(\mask) -+	and	\reg1,\reg1,\reg2 -+  .else -+	andi	\reg1,\reg2,%lo(\mask) -+  .endif -+ .else -+	andhi	\reg1,\reg2,%hi(\mask) -+ .endif -+.endm -+ -+/* -+ * ORs reg2 with mask and places the result in reg1. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro ORI32	reg1,reg2,mask -+ .if \mask & 0xffff -+  .if \mask & 0xffff0000 -+	orhi	\reg1,\reg2,%hi(\mask) -+	ori	\reg1,\reg2,%lo(\mask) -+  .else -+	ori	\reg1,\reg2,%lo(\mask) -+  .endif -+ .else -+	orhi	\reg1,\reg2,%hi(\mask) -+ .endif -+.endm -+ -+/* -+ * XORs reg2 with mask and places the result in reg1. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro XORI32	reg1,reg2,mask -+ .if \mask & 0xffff -+  .if \mask & 0xffff0000 -+	xorhi	\reg1,\reg2,%hi(\mask) -+	xori	\reg1,\reg1,%lo(\mask) -+  .else -+	xori	\reg1,\reg2,%lo(\mask) -+  .endif -+ .else -+	xorhi	\reg1,\reg2,%hi(\mask) -+ .endif -+.endm -+ -+/* -+ * This is a support macro for BTBZ & BTBNZ.  It checks -+ * the bit to make sure it is valid 32 value. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BT	reg1,reg2,bit -+.if \bit > 31 -+ .err  -+.else -+ .if \bit < 16 -+	andi	\reg1,\reg2,(1 << \bit) -+ .else -+	andhi	\reg1,\reg2,(1 << (\bit - 16)) -+ .endif -+.endif -+.endm -+ -+/* -+ * Tests the bit in reg2 and branches to label if the -+ * bit is zero.  The result of the bit test is stored in reg1. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTBZ	reg1,reg2,bit,label -+	BT	\reg1,\reg2,\bit -+	beq	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and branches to label if the -+ * bit is non-zero.  The result of the bit test is stored in reg1. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTBNZ	reg1,reg2,bit,label -+	BT	\reg1,\reg2,\bit -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then compliments the bit in reg2. -+ * The result of the bit test is stored in reg1. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTC	reg1,reg2,bit -+.if \bit > 31 -+ .err  -+.else -+ .if \bit < 16 -+	andi	\reg1,\reg2,(1 << \bit) -+	xori	\reg2,\reg2,(1 << \bit) -+ .else -+	andhi	\reg1,\reg2,(1 << (\bit - 16)) -+	xorhi	\reg2,\reg2,(1 << (\bit - 16)) -+ .endif -+.endif -+.endm -+ -+/* -+ * Tests the bit in reg2 and then sets the bit in reg2. -+ * The result of the bit test is stored in reg1. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTS	reg1,reg2,bit -+.if \bit > 31 -+ .err  -+.else -+ .if \bit < 16 -+	andi	\reg1,\reg2,(1 << \bit) -+	ori	\reg2,\reg2,(1 << \bit) -+ .else -+	andhi	\reg1,\reg2,(1 << (\bit - 16)) -+	orhi	\reg2,\reg2,(1 << (\bit - 16)) -+ .endif -+.endif -+.endm -+ -+/* -+ * Tests the bit in reg2 and then resets the bit in reg2. -+ * The result of the bit test is stored in reg1. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTR	reg1,reg2,bit -+.if \bit > 31 -+ .err  -+.else -+ .if \bit < 16 -+	andi	\reg1,\reg2,(1 << \bit) -+	andi	\reg2,\reg2,%lo(~(1 << \bit)) -+ .else -+	andhi	\reg1,\reg2,(1 << (\bit - 16)) -+	andhi	\reg2,\reg2,%lo(~(1 << (\bit - 16))) -+ .endif -+.endif -+.endm -+ -+/* -+ * Tests the bit in reg2 and then compliments the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTCBZ	reg1,reg2,bit,label -+	BTC	\reg1,\reg2,\bit -+	beq	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then compliments the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was non-zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTCBNZ	reg1,reg2,bit,label -+	BTC	\reg1,\reg2,\bit -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then sets the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTSBZ	reg1,reg2,bit,label -+	BTS	\reg1,\reg2,\bit -+	beq	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then sets the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was non-zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTSBNZ	reg1,reg2,bit,label -+	BTS	\reg1,\reg2,\bit -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then resets the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTRBZ	reg1,reg2,bit,label -+	BTR	\reg1,\reg2,\bit -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bit in reg2 and then resets the bit in reg2. -+ * The result of the bit test is stored in reg1.  If the  -+ * original bit was non-zero it branches to label. -+ * -+ * It is NOT safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro BTRBNZ	reg1,reg2,bit,label -+	BTR	\reg1,\reg2,\bit -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bits in mask against reg2 stores the result in reg1. -+ * If the all the bits in the mask are zero it branches to label. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro TSTBZ	reg1,reg2,mask,label -+	ANDI32	\reg1,\reg2,\mask -+	beq	\reg1,r0,\label -+.endm -+ -+/* -+ * Tests the bits in mask against reg2 stores the result in reg1. -+ * If the any of the bits in the mask are 1 it branches to label. -+ * -+ * It is safe to use the same register for reg1 & reg2. -+ */ -+ -+.macro TSTBNZ	reg1,reg2,mask,label -+	ANDI32	\reg1,\reg2,\mask -+	bne	\reg1,r0,\label -+.endm -+ -+/* -+ * Pushes reg onto the stack. -+ */ -+ -+.macro PUSH	reg -+	addi	sp,sp,-4 -+	stw	\reg,0(sp) -+.endm -+ -+/* -+ * Pops the top of the stack into reg. -+ */ -+ -+.macro POP	reg -+	ldw	\reg,0(sp) -+	addi	sp,sp,4 -+.endm -+ -+/* -+ * Clears reg -+ */ -+ -+.macro CLR	reg -+	  mov	\reg,r0 -+.endm -+ -+/* -+ * The preprocessor macro does not work for -+ * the nios2 compiler. Undefine ENTRY and define -+ * a real assembler macro. -+ */ -+#undef ENTRY -+#define ENTRY(name) ASM_ENTRY name -+ -+.macro ASM_ENTRY name -+.globl \name -+__ALIGN -+  \name: -+.endm ---- linux/include/asm-nios2nommu/atomic.h -+++ linux/include/asm-nios2nommu/atomic.h -@@ -0,0 +1,190 @@ -+//vic - add 'atomic_add/sub_return', 'atomic_add_negative' -+//vic     from v850 architecture -+ -+/* atomic.h:  -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * Copyright (C) 2001 Vic Phillips (vic@microtronix.com) -+ * -+ * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __ARCH_NIOS2NOMMU_ATOMIC__ -+#define __ARCH_NIOS2NOMMU_ATOMIC__ -+ -+#include <asm/system.h> -+ -+typedef struct { int counter; } atomic_t; -+#define ATOMIC_INIT(i)	{ (i) } -+ -+#define atomic_read(v)		((v)->counter) -+#define atomic_set(v, i)	(((v)->counter) = i) -+ -+ -+extern __inline__ void atomic_add(int i, atomic_t *v) -+{ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter += i; -+	local_irq_restore(flags); -+} -+ -+extern __inline__ int atomic_add_negative(int i, atomic_t *v) -+{ -+	unsigned long flags; -+	int result; -+ -+	local_irq_save(flags); -+	v->counter += i; -+	result = (v->counter < 0); -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ void atomic_sub(int i, atomic_t *v) -+{ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter -= i; -+	local_irq_restore(flags); -+} -+ -+extern __inline__ int atomic_sub_and_test(int i, atomic_t *v) -+{ -+	int result; -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter -= i; -+	result = (v->counter == 0); -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ void atomic_inc(atomic_t *v) -+{ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter += 1; -+	local_irq_restore(flags); -+} -+ -+extern __inline__ int atomic_inc_and_test(atomic_t *v) -+{ -+	unsigned long flags; -+	int result; -+ -+	local_irq_save(flags); -+	v->counter += 1; -+	result = (v->counter == 0); -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ void atomic_dec(atomic_t *v) -+{ -+	int i = 1;					/* the compiler optimizes better this way */ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter -= i; -+	local_irq_restore(flags); -+} -+ -+extern __inline__ int atomic_dec_and_test(atomic_t *v) -+{ -+	int result; -+	int i = 1;					/* the compiler optimizes better this way */ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter -= i; -+	result = (v->counter == 0); -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ int atomic_inc_return(atomic_t *v) -+{ -+	int result; -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	result = ++v->counter; -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ int atomic_dec_return(atomic_t *v) -+{ -+	int result; -+	int i = 1;					/* the compiler optimizes better this way */ -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	v->counter -= i; -+	result = v->counter; -+	local_irq_restore(flags); -+	return result; -+} -+ -+extern __inline__ int atomic_add_return (int i, volatile atomic_t *v) -+{ -+	int res; -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	res = v->counter + i; -+	v->counter = res; -+	local_irq_restore(flags); -+ -+	return res; -+} -+ -+static __inline__ int atomic_sub_return (int i, volatile atomic_t *v) -+{ -+	int res; -+	unsigned long flags; -+ -+	local_irq_save(flags); -+	res = v->counter - i; -+	v->counter = res; -+	local_irq_restore(flags); -+ -+	return res; -+} -+ -+#define atomic_dec_return(v) atomic_sub_return(1,(v)) -+#define atomic_inc_return(v) atomic_add_return(1,(v)) -+ -+/* Atomic operations are already serializing */ -+#define smp_mb__before_atomic_dec()	barrier() -+#define smp_mb__after_atomic_dec()	barrier() -+#define smp_mb__before_atomic_inc()	barrier() -+#define smp_mb__after_atomic_inc()	barrier() -+ -+ -+#endif /* !(__ARCH_NIOS2NOMMU_ATOMIC__) */ -+ -+ ---- linux/include/asm-nios2nommu/bitops.h -+++ linux/include/asm-nios2nommu/bitops.h -@@ -0,0 +1,472 @@ -+#ifndef _ASM_NIOS_BITOPS_H_ -+#define _ASM_NIOS_BITOPS_H_ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/bitops.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#ifdef __KERNEL__ -+// #include <linux/config.h> -+#include <linux/compiler.h> -+#include <asm/byteorder.h>	/* swab32 */ -+#include <asm/system.h> -+#endif -+ -+/* -+ * Adapted to NIOS from generic bitops.h: -+ * -+ * For the benefit of those who are trying to port Linux to another -+ * architecture, here are some C-language equivalents.  You should -+ * recode these in the native assembly language, if at all possible. -+ * To guarantee atomicity, these routines call cli() and sti() to -+ * disable interrupts while they operate.  (You have to provide inline -+ * routines to cli() and sti().) -+ * -+ * Also note, these routines assume that you have 32 bit integers. -+ * You will have to change this if you are trying to port Linux to the -+ * Alpha architecture or to a Cray.  :-) -+ * -+ * C language equivalents written by Theodore Ts'o, 9/26/92 -+ */ -+ -+/* -+ *	Generic ffs(). -+ */ -+static inline int ffs(int x) -+{ -+	int r = 1; -+ -+	if (!x) -+		return 0; -+	if (!(x & 0xffff)) { -+		x >>= 16; -+		r += 16; -+	} -+	if (!(x & 0xff)) { -+		x >>= 8; -+		r += 8; -+	} -+	if (!(x & 0xf)) { -+		x >>= 4; -+		r += 4; -+	} -+	if (!(x & 3)) { -+		x >>= 2; -+		r += 2; -+	} -+	if (!(x & 1)) { -+		x >>= 1; -+		r += 1; -+	} -+	return r; -+} -+ -+/* -+ *	Generic __ffs(). -+ */ -+static inline int __ffs(int x) -+{ -+	int r = 0; -+ -+	if (!x) -+		return 0; -+	if (!(x & 0xffff)) { -+		x >>= 16; -+		r += 16; -+	} -+	if (!(x & 0xff)) { -+		x >>= 8; -+		r += 8; -+	} -+	if (!(x & 0xf)) { -+		x >>= 4; -+		r += 4; -+	} -+	if (!(x & 3)) { -+		x >>= 2; -+		r += 2; -+	} -+	if (!(x & 1)) { -+		x >>= 1; -+		r += 1; -+	} -+	return r; -+} -+ -+/* -+ * fls: find last bit set. -+ */ -+#define fls(x) generic_fls(x) -+ -+ -+/* -+ * Every architecture must define this function. It's the fastest -+ * way of searching a 140-bit bitmap where the first 100 bits are -+ * unlikely to be set. It's guaranteed that at least one of the 140 -+ * bits is cleared. -+ */ -+static inline int sched_find_first_bit(unsigned long *b) -+{ -+	if (unlikely(b[0])) -+		return __ffs(b[0]); -+	if (unlikely(b[1])) -+		return __ffs(b[1]) + 32; -+	if (unlikely(b[2])) -+		return __ffs(b[2]) + 64; -+	if (b[3]) -+		return __ffs(b[3]) + 96; -+	return __ffs(b[4]) + 128; -+} -+ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ -+static __inline__ unsigned long ffz(unsigned long word) -+{ -+	unsigned long result = 0; -+ -+	while(word & 1) { -+		result++; -+		word >>= 1; -+	} -+	return result; -+} -+ -+ -+static __inline__ void set_bit(int nr, volatile unsigned long * addr) -+{ -+	int 	* a = (int *) addr; -+	int	mask; -+	unsigned long flags; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	local_irq_save(flags); -+	*a |= mask; -+	local_irq_restore(flags); -+} -+ -+static __inline__ void __set_bit(int nr, volatile unsigned long * addr) -+{ -+	int 	* a = (int *) addr; -+	int	mask; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	*a |= mask; -+} -+ -+/* -+ * clear_bit() doesn't provide any barrier for the compiler. -+ */ -+#define smp_mb__before_clear_bit()	barrier() -+#define smp_mb__after_clear_bit()	barrier() -+ -+static __inline__ void clear_bit(int nr, volatile unsigned long * addr) -+{ -+	int 	* a = (int *) addr; -+	int	mask; -+	unsigned long flags; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	local_irq_save(flags); -+	*a &= ~mask; -+	local_irq_restore(flags); -+} -+ -+static __inline__ void __clear_bit(int nr, volatile unsigned long * addr) -+{ -+	int 	* a = (int *) addr; -+	int	mask; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	*a &= ~mask; -+} -+ -+static __inline__ void change_bit(int nr, volatile unsigned long * addr) -+{ -+	int mask, flags; -+	unsigned long *ADDR = (unsigned long *) addr; -+ -+	ADDR += nr >> 5; -+	mask = 1 << (nr & 31); -+	local_irq_save(flags); -+	*ADDR ^= mask; -+	local_irq_restore(flags); -+} -+ -+static __inline__ void __change_bit(int nr, volatile unsigned long * addr) -+{ -+	int mask; -+	unsigned long *ADDR = (unsigned long *) addr; -+ -+	ADDR += nr >> 5; -+	mask = 1 << (nr & 31); -+	*ADDR ^= mask; -+} -+ -+static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+	unsigned long flags; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	local_irq_save(flags); -+	retval = (mask & *a) != 0; -+	*a |= mask; -+	local_irq_restore(flags); -+ -+	return retval; -+} -+ -+static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	retval = (mask & *a) != 0; -+	*a |= mask; -+	return retval; -+} -+ -+static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+	unsigned long flags; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	local_irq_save(flags); -+	retval = (mask & *a) != 0; -+	*a &= ~mask; -+	local_irq_restore(flags); -+ -+	return retval; -+} -+ -+static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	retval = (mask & *a) != 0; -+	*a &= ~mask; -+	return retval; -+} -+ -+static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+	unsigned long flags; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	local_irq_save(flags); -+	retval = (mask & *a) != 0; -+	*a ^= mask; -+	local_irq_restore(flags); -+ -+	return retval; -+} -+ -+static __inline__ int __test_and_change_bit(int nr, volatile unsigned long * addr) -+{ -+	int	mask, retval; -+	volatile unsigned int *a = (volatile unsigned int *) addr; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	retval = (mask & *a) != 0; -+	*a ^= mask; -+	return retval; -+} -+ -+/* -+ * This routine doesn't need to be atomic. -+ */ -+static __inline__ int __constant_test_bit(int nr, const volatile unsigned long * addr) -+{ -+	return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0; -+} -+ -+static __inline__ int __test_bit(int nr, const volatile unsigned long * addr) -+{ -+	int 	* a = (int *) addr; -+	int	mask; -+ -+	a += nr >> 5; -+	mask = 1 << (nr & 0x1f); -+	return ((mask & *a) != 0); -+} -+ -+#define test_bit(nr,addr) \ -+(__builtin_constant_p(nr) ? \ -+ __constant_test_bit((nr),(unsigned long *)(addr)) : \ -+ __test_bit((nr),(unsigned long *)(addr))) -+ -+ -+/* find_next_zero_bit() finds the first zero bit in a bit string of length -+ * 'size' bits, starting the search at bit 'offset'. This is largely based -+ * on Linus's ALPHA routines, which are pretty portable BTW. -+ */ -+ -+extern __inline__ unsigned long 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; -+	unsigned long tmp; -+ -+	if (offset >= size) -+		return size; -+	size -= result; -+	offset &= 31UL; -+	if (offset) { -+		tmp = *(p++); -+		tmp |= ~0UL >> (32-offset); -+		if (size < 32) -+			goto found_first; -+		if (~tmp) -+			goto found_middle; -+		size -= 32; -+		result += 32; -+	} -+	while (size & ~31UL) { -+		if (~(tmp = *(p++))) -+			goto found_middle; -+		result += 32; -+		size -= 32; -+	} -+	if (!size) -+		return result; -+	tmp = *p; -+ -+found_first: -+	tmp |= ~0UL << size; -+	if (tmp == ~0UL) -+		return result + size; -+found_middle: -+	return result + ffz(tmp); -+} -+ -+/* -+ * Find next one bit in a bitmap reasonably efficiently. -+ */ -+extern __inline__ unsigned long find_next_bit(const unsigned long *addr, -+	unsigned long size, unsigned long offset) -+{ -+	unsigned int *p = ((unsigned int *) addr) + (offset >> 5); -+	unsigned int result = offset & ~31UL; -+	unsigned int tmp; -+ -+	if (offset >= size) -+		return size; -+	size -= result; -+	offset &= 31UL; -+	if (offset) { -+		tmp = *p++; -+		tmp &= ~0UL << offset; -+		if (size < 32) -+			goto found_first; -+		if (tmp) -+			goto found_middle; -+		size -= 32; -+		result += 32; -+	} -+	while (size >= 32) { -+		if ((tmp = *p++) != 0) -+			goto found_middle; -+		result += 32; -+		size -= 32; -+	} -+	if (!size) -+		return result; -+	tmp = *p; -+ -+found_first: -+	tmp &= ~0UL >> (32 - size); -+	if (tmp == 0UL)        /* Are any bits set? */ -+		return result + size; /* Nope. */ -+found_middle: -+	return result + __ffs(tmp); -+} -+ -+/* -+ * hweightN: returns the hamming weight (i.e. the number -+ * of bits set) of a N-bit word -+ */ -+ -+#define hweight32(x) generic_hweight32(x) -+#define hweight16(x) generic_hweight16(x) -+#define hweight8(x) generic_hweight8(x) -+ -+/* Linus sez that gcc can optimize the following correctly, we'll see if this -+ * holds on the Sparc as it does for the ALPHA. -+ */ -+ -+#define find_first_zero_bit(addr, size) \ -+        find_next_zero_bit((addr), (size), 0) -+#define find_first_bit(addr, size) \ -+        find_next_bit((addr), (size), 0) -+ -+/* Now for the ext2 filesystem bit operations and helper routines. -+ * -+ * Both NIOS and ext2 are little endian, so these are the same as above. -+ */ -+ -+#define ext2_set_bit   test_and_set_bit -+#define ext2_clear_bit test_and_clear_bit -+#define ext2_test_bit  test_bit -+ -+#define ext2_set_bit_atomic(lock, nr, addr)		\ -+	({						\ -+		int ret;				\ -+		spin_lock(lock);			\ -+		ret = ext2_set_bit((nr),(unsigned long *) (addr));	\ -+		spin_unlock(lock);			\ -+		ret;					\ -+	}) -+ -+#define ext2_clear_bit_atomic(lock, nr, addr)		\ -+	({						\ -+		int ret;				\ -+		spin_lock(lock);			\ -+		ret = ext2_clear_bit((nr),(unsigned long *) (addr));	\ -+		spin_unlock(lock);			\ -+		ret;					\ -+	}) -+ -+#define ext2_find_first_zero_bit find_first_zero_bit -+#define ext2_find_next_zero_bit  find_next_zero_bit -+ -+#endif /* _ASM_NIOS_BITOPS_H */ ---- linux/include/asm-nios2nommu/bootinfo.h -+++ linux/include/asm-nios2nommu/bootinfo.h -@@ -0,0 +1,2 @@ -+ -+/* Nothing for nios2nommu */ ---- linux/include/asm-nios2nommu/bug.h -+++ linux/include/asm-nios2nommu/bug.h -@@ -0,0 +1,48 @@ -+#ifndef _NIOS2NOMMU_BUG_H -+#define _NIOS2NOMMU_BUG_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/bug.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#define BUG() do { \ -+  printk("%s(%d): kernel BUG!\n", __FILE__, __LINE__); \ -+} while (0) -+ -+#define BUG_ON(condition) do { \ -+	if (unlikely((condition)!=0)) \ -+		BUG(); \ -+} while(0) -+ -+#define PAGE_BUG(page) do { \ -+         BUG(); \ -+} while (0) -+ -+#define WARN_ON(condition) do { \ -+	if (unlikely((condition)!=0)) { \ -+		printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \ -+		dump_stack(); \ -+	} \ -+} while (0) -+ -+#endif ---- linux/include/asm-nios2nommu/bugs.h -+++ linux/include/asm-nios2nommu/bugs.h -@@ -0,0 +1,40 @@ -+#ifndef __ASM_NIOS_BUGS_H -+#define __ASM_NIOS_BUGS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/bugs.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ *  Copyright (C) 1994  Linus Torvalds -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* -+ * This is included by init/main.c to check for architecture-dependent bugs. -+ * -+ * Needs: -+ *	void check_bugs(void); -+ */ -+ -+static void check_bugs(void) -+{ -+} -+ -+#endif ---- linux/include/asm-nios2nommu/byteorder.h -+++ linux/include/asm-nios2nommu/byteorder.h -@@ -0,0 +1,38 @@ -+#ifndef __ASM_NIOS_BYTEORDER_H -+#define __ASM_NIOS_BYTEORDER_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/byteorder.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/types.h> -+ -+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__) -+#  define __BYTEORDER_HAS_U64__ -+#  define __SWAB_64_THRU_32__ -+#endif -+ -+#include <linux/byteorder/little_endian.h> -+ -+#endif -+ ---- linux/include/asm-nios2nommu/cachectl.h -+++ linux/include/asm-nios2nommu/cachectl.h -@@ -0,0 +1,36 @@ -+/* -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2NOMMU_CACHECTL_H -+#define _NIOS2NOMMU_CACHECTL_H -+ -+/* Definitions for the cacheflush system call.  */ -+ -+#define FLUSH_SCOPE_LINE    1	/* Flush a cache line */ -+#define FLUSH_SCOPE_PAGE    2	/* Flush a page */ -+#define FLUSH_SCOPE_ALL     3	/* Flush the whole cache -- superuser only */ -+ -+#define FLUSH_CACHE_DATA    1	/* Writeback and flush data cache */ -+#define FLUSH_CACHE_INSN    2	/* Flush instruction cache */ -+#define FLUSH_CACHE_BOTH    3	/* Flush both caches */ -+ -+#endif /* _NIOS2NOMMU_CACHECTL_H */ ---- linux/include/asm-nios2nommu/cacheflush.h -+++ linux/include/asm-nios2nommu/cacheflush.h -@@ -0,0 +1,59 @@ -+#ifndef _NIOS2NOMMU_CACHEFLUSH_H -+#define _NIOS2NOMMU_CACHEFLUSH_H -+ -+/* -+ * Ported from m68knommu. -+ * -+ * (C) Copyright 2003, Microtronix Datacom Ltd. -+ * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com> -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#include <linux/mm.h> -+ -+extern void cache_push (unsigned long vaddr, int len); -+extern void dcache_push (unsigned long vaddr, int len); -+extern void icache_push (unsigned long vaddr, int len); -+extern void cache_push_all (void); -+extern void cache_clear (unsigned long paddr, int len); -+ -+#define flush_cache_all()			__flush_cache_all() -+#define flush_cache_mm(mm)			do { } while (0) -+#define flush_cache_range(vma, start, end)	cache_push(start, end - start) -+#define flush_cache_page(vma, vmaddr)		do { } while (0) -+#define flush_dcache_range(start,end)		dcache_push(start, end - start) -+#define flush_dcache_page(page)			do { } while (0) -+#define flush_dcache_mmap_lock(mapping)		do { } while (0) -+#define flush_dcache_mmap_unlock(mapping)	do { } while (0) -+#define flush_icache_range(start,end)		cache_push(start, end - start) -+#define flush_icache_page(vma,pg)		do { } while (0) -+#define flush_icache_user_range(vma,pg,adr,len)	do { } while (0) -+ -+#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ -+	memcpy(dst, src, len) -+#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ -+	memcpy(dst, src, len) -+ -+ -+extern inline void __flush_cache_all(void) -+{ -+	cache_push_all(); -+} -+ -+#endif /* _NIOS2NOMMU_CACHEFLUSH_H */ ---- linux/include/asm-nios2nommu/cache.h -+++ linux/include/asm-nios2nommu/cache.h -@@ -0,0 +1,34 @@ -+/* -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef __ARCH_NIOS2NOMMU_CACHE_H -+#define __ARCH_NIOS2NOMMU_CACHE_H -+ -+#include <asm/nios.h> -+ -+/* bytes per L1 cache line */ -+#define        L1_CACHE_BYTES	nasys_icache_line_size 	/* this need to be at least 1 */ -+ -+ -+#define __cacheline_aligned -+#define ____cacheline_aligned -+ -+#endif ---- linux/include/asm-nios2nommu/ChangeLog -+++ linux/include/asm-nios2nommu/ChangeLog -@@ -0,0 +1,14 @@ -+2004-06-29  Ken Hill  <khill@microtronix.com> -+ -+	* bitops.h (find_next_zero_bit): Fix problem with with masking for found_first -+	handling. The masking of the upper bits for size < 32 bits would set all -+	the bits to 1. Removing any zero's there may have been. -+ -+2004-06-02  Ken Hill  <khill@microtronix.com> -+ -+	* processor.h (TASK_SIZE): Change na_sdram_end to nasys_program_mem_end to remove -+	dependancy on quartus memory component name. -+ -+	* page.h (PAGE_OFFSET): Change na_sdram to nasys_program_mem to remove -+	dependancy on quartus memory component name. -+ ---- linux/include/asm-nios2nommu/checksum.h -+++ linux/include/asm-nios2nommu/checksum.h -@@ -0,0 +1,320 @@ -+#ifndef __NIOS2_CHECKSUM_H -+#define __NIOS2_CHECKSUM_H -+ -+/*  checksum.h:  IP/UDP/TCP checksum routines on the NIOS. -+ * -+ *  Copyright(C) 1995 Linus Torvalds -+ *  Copyright(C) 1995 Miguel de Icaza -+ *  Copyright(C) 1996 David S. Miller -+ *  Copyright(C) 2001 Ken Hill -+ *  Copyright(C) 2004 Microtronix Datacom Ltd. -+ * -+ * derived from: -+ *	Alpha checksum c-code -+ *      ix86 inline assembly -+ *      Spar nommu -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+/* -+ * computes the checksum of the TCP/UDP pseudo-header -+ * returns a 16-bit checksum, already complemented -+ */ -+ -+extern inline unsigned short csum_tcpudp_magic(unsigned long saddr, -+					       unsigned long daddr, -+					       unsigned short len, -+					       unsigned short proto, -+					       unsigned int sum) -+{ -+    barrier(); -+	__asm__ __volatile__( -+"		add	%0, %3, %0\n" -+"		bgeu	%0, %3, 1f\n" -+"		addi	%0, %0, 1\n" -+"1:		add	%0, %4, %0\n" -+"		bgeu	%0, %4, 1f\n" -+"		addi	%0, %0, 1\n" -+"1:		add	%0, %5, %0\n" -+"		bgeu	%0, %5, 1f\n" -+"		addi	%0, %0, 1\n" -+"1:\n" -+/* -+		We need the carry from the addition of 16-bit -+		significant addition, so we zap out the low bits -+		in one half, zap out the high bits in another, -+		shift them both up to the top 16-bits of a word -+		and do the carry producing addition, finally -+		shift the result back down to the low 16-bits. -+ -+		Actually, we can further optimize away two shifts -+		because we know the low bits of the original -+		value will be added to zero-only bits so cannot -+		affect the addition result nor the final carry -+		bit. -+*/ -+"		slli	%1,%0, 16\n"		/* Need a copy to fold with */ -+						/* Bring the LOW 16 bits up */ -+"		add	%0, %1, %0\n"		/* add and set carry, neat eh? */ -+"		cmpltu	r15, %0, %1\n"		/* get remaining carry bit */ -+"		srli	%0, %0, 16\n"		/* shift back down the result */ -+"		add	%0, %0, r15\n" -+"		nor	%0, %0, %0\n"		/* negate */ -+	        : "=&r" (sum), "=&r" (saddr) -+		: "0" (sum), "1" (saddr), "r" (ntohl(len+proto)), "r" (daddr) -+		: "r15"); -+		return ((unsigned short) sum);  -+    barrier(); -+} -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+  extern inline unsigned short from32to16(unsigned long x) -+  { -+    barrier(); -+	__asm__ __volatile__( -+		"add	%0, %1, %0\n" -+		"cmpltu	r15, %0, %1\n" -+		"srli	%0, %0, 16\n" -+		"add	%0, %0, r15\n" -+		: "=r" (x) -+		: "r" (x << 16), "0" (x) -+		: "r15"); -+	return x; -+    barrier(); -+  } -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+extern inline unsigned long do_csum(const unsigned char * buff, int len) -+{ -+ int odd, count; -+ unsigned long result = 0; -+ -+    barrier(); -+ if (len <= 0) -+ 	goto out; -+ odd = 1 & (unsigned long) buff; -+ if (odd) { -+////result = *buff;                     // dgt: Big    endian -+ 	result = *buff << 8;                // dgt: Little endian -+ -+ 	len--; -+ 	buff++; -+ } -+ count = len >> 1;		/* nr of 16-bit words.. */ -+ if (count) { -+ 	if (2 & (unsigned long) buff) { -+ 		result += *(unsigned short *) buff; -+ 		count--; -+ 		len -= 2; -+ 		buff += 2; -+ 	} -+ 	count >>= 1;		/* nr of 32-bit words.. */ -+ 	if (count) { -+ 	        unsigned long carry = 0; -+ 		do { -+ 			unsigned long w = *(unsigned long *) buff; -+ 			count--; -+ 			buff += 4; -+ 			result += carry; -+ 			result += w; -+ 			carry = (w > result); -+ 		} while (count); -+ 		result += carry; -+ 		result = (result & 0xffff) + (result >> 16); -+ 	} -+ 	if (len & 2) { -+ 		result += *(unsigned short *) buff; -+ 		buff += 2; -+ 	} -+ } -+ if (len & 1) -+ 	result += *buff;  /* This is little machine, byte is right */ -+ result = from32to16(result); -+ if (odd) -+ 	result = ((result >> 8) & 0xff) | ((result & 0xff) << 8); -+out: -+	return result; -+    barrier(); -+  } -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+/* ihl is always 5 or greater, almost always is 5, iph is always word -+ * aligned but can fail to be dword aligned very often. -+ */ -+ -+  extern inline unsigned short ip_fast_csum(const unsigned char *iph, unsigned int ihl) -+  { -+	unsigned int sum; -+ -+    barrier(); -+	__asm__ __volatile__( -+"		andi	r8, %1, 2\n"	/* Remember original alignment */ -+"		ldw	%0, (%1)\n"	/* 16 or 32 bit boundary */ -+"		beq	r8, r0, 1f\n"	/* Aligned on 32 bit boundary, go */ -+"		srli	%0, %0, 16\n"	/* Get correct 16 bits */ -+"		addi	%2, %2, -1\n"	/* Take off for 4 bytes, pickup last 2 at end */ -+"		addi	%1, %1, 2\n"	/* Adjust pointer to 32 bit boundary */ -+"		br	2f\n" -+"1:\n" -+"		addi	%2, %2, -1\n" -+"		addi	%1, %1, 4\n"	/* Bump ptr a long word */ -+"2:\n" -+"		ldw     r9, (%1)\n" -+"1:\n" -+"		add     %0, r9, %0\n" -+"		bgeu	%0, r9, 2f\n" -+"		addi	%0, %0, 1\n" -+"2:\n" -+"		addi	%1, %1, 4\n" -+"		addi	%2, %2, -1\n" -+"		ldw     r9, (%1)\n" -+"		bne	%2, r0, 1b\n" -+"		beq	r8, r0, 1f\n"	/* 32 bit boundary time to leave */ -+"		srli	r9, r9, 16\n"	/* 16 bit boundary, get correct 16 bits */ -+"		add     %0, r9, %0\n" -+"		bgeu	%0, r9, 1f\n" -+"		addi	%0, %0, 1\n" -+"1:\n" -+"		slli	%2, %0, 16\n" -+"		add     %0, %2, %0\n" -+"		cmpltu	r8, %0, %2\n" -+"		srli	%0, %0, 16\n" -+"		add	%0, %0, r8\n" -+"		nor     %0, %0, %0\n" -+		: "=&r" (sum), "=&r" (iph), "=&r" (ihl) -+		: "1" (iph), "2" (ihl) -+		: "r8", "r9"); -+	return sum; -+    barrier(); -+  } -+ -+/*these 2 functions are now in checksum.c */ -+unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum); -+unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum); -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+/* -+ * the same as csum_partial_copy, but copies from user space. -+ * -+ * here even more important to align src and dst on a 32-bit (or even -+ * better 64-bit) boundary -+ */ -+extern inline unsigned int -+csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *csum_err) -+{ -+    barrier(); -+	if (csum_err) *csum_err = 0; -+	memcpy(dst, src, len); -+	return csum_partial(dst, len, sum); -+    barrier(); -+} -+ -+#define csum_partial_copy_nocheck(src, dst, len, sum)	\ -+	csum_partial_copy ((src), (dst), (len), (sum)) -+ -+ -+/* -+ * this routine is used for miscellaneous IP-like checksums, mainly -+ * in icmp.c -+ */ -+ -+extern inline unsigned short ip_compute_csum(unsigned char * buff, int len) -+{ -+    barrier(); -+ return ~from32to16(do_csum(buff,len)); -+    barrier(); -+} -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+#define csum_partial_copy_fromuser(s, d, l, w)  \ -+                     csum_partial_copy((char *) (s), (d), (l), (w)) -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+/* -+ *	Fold a partial checksum without adding pseudo headers -+ */ -+extern __inline__ unsigned int csum_fold(unsigned int sum) -+{ -+    barrier(); -+	__asm__ __volatile__( -+		"add	%0, %1, %0\n" -+		"cmpltu	r8, %0, %1\n" -+		"srli	%0, %0, 16\n" -+		"add	%0, %0, r8\n" -+		"nor	%0, %0, %0\n" -+		: "=r" (sum) -+		: "r" (sum << 16), "0" (sum) -+		: "r8");  -+	return sum; -+    barrier(); -+} -+ -+ -+/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -+ -+ -+extern __inline__ unsigned long csum_tcpudp_nofold(unsigned long saddr, -+						   unsigned long daddr, -+						   unsigned short len, -+						   unsigned short proto, -+						   unsigned int sum) -+{ -+    barrier(); -+	__asm__ __volatile__( -+		"add	%0, %1, %0\n" -+		"cmpltu	r8, %0, %1\n" -+		"add	%0, %0, r8\n"	/* add carry */ -+		"add	%0, %2, %0\n" -+		"cmpltu	r8, %0, %2\n" -+		"add	%0, %0, r8\n"	/* add carry */ -+		"add	%0, %3, %0\n" -+		"cmpltu	r8, %0, %3\n" -+		"add	%0, %0, r8\n"	/* add carry */ -+		: "=r" (sum), "=r" (saddr) -+		: "r" (daddr), "r" ( (ntohs(len)<<16) + (proto*256) ), -+		  "0" (sum), -+		  "1" (saddr) -+		: "r8"); -+ -+	return sum; -+    barrier(); -+} -+ -+ -+#endif /* (__NIOS2_CHECKSUM_H) */ ---- linux/include/asm-nios2nommu/cprefix.h -+++ linux/include/asm-nios2nommu/cprefix.h -@@ -0,0 +1,38 @@ -+/* cprefix.h:  This file is included by assembly source which needs -+ *             to know what the c-label prefixes are. The newer versions -+ *	       of cpp that come with gcc predefine such things to help -+ *	       us out. The reason this stuff is needed is to make -+ *	       solaris compiles of the kernel work. -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef __NIOS2_CPREFIX_H -+#define __NIOS2_CPREFIX_H -+ -+#define C_LABEL_PREFIX -+ -+#define CONCAT(a, b) CONCAT2(a, b) -+#define CONCAT2(a, b) a##b -+ -+#define C_LABEL(name) CONCAT(C_LABEL_PREFIX, name) -+ -+#endif /* !(__NIOS2_CPREFIX_H) */ ---- linux/include/asm-nios2nommu/cpumask.h -+++ linux/include/asm-nios2nommu/cpumask.h -@@ -0,0 +1,28 @@ -+/* -+ * All rights reserved.           -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _ASM_NIOS2NOMMU_CPUMASK_H -+#define _ASM_NIOS2NOMMU_CPUMASK_H -+ -+#include <asm-generic/cpumask.h> -+ -+#endif /* _ASM_NIOS2NOMMU_CPUMASK_H */ ---- linux/include/asm-nios2nommu/cputime.h -+++ linux/include/asm-nios2nommu/cputime.h -@@ -0,0 +1,31 @@ -+/* -+ *	cputime.h -+ *	(C) Copyright 2004, Microtronix Datacom Ltd. -+ * -+ * Taken from m68knommu -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2NOMMU_CPUTIME_H -+#define __NIOS2NOMMU_CPUTIME_H -+ -+#include <asm-generic/cputime.h> -+ -+#endif /* __NIOS@NOMMU_CPUTIME_H */ ---- linux/include/asm-nios2nommu/current.h -+++ linux/include/asm-nios2nommu/current.h -@@ -0,0 +1,39 @@ -+#ifndef _NIOS2NOMMU_CURRENT_H -+#define _NIOS2NOMMU_CURRENT_H -+/* -+ *	current.h -+ *	(C) Copyright 2000, Lineo, David McCullough <davidm@uclinux.org> -+ *	(C) Copyright 2002, Greg Ungerer (gerg@snapgear.com) -+ *	(C) Copyright 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#include <linux/thread_info.h> -+ -+struct task_struct; -+ -+static inline struct task_struct *get_current(void) -+{ -+	return(current_thread_info()->task); -+} -+ -+#define	current	get_current() -+ -+#endif /* _NIOS2NOMMU_CURRENT_H */ ---- linux/include/asm-nios2nommu/delay.h -+++ linux/include/asm-nios2nommu/delay.h -@@ -0,0 +1,96 @@ -+#ifndef _NIOS_DELAY_H -+#define _NIOS_DELAY_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/delay.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004      dgt     NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/param.h> -+ -+extern __inline__ void __delay(unsigned long loops) -+{ -+	int dummy; -+ -+	__asm__ __volatile__( -+        "1:  \n\t" -+        "    beq    %0,zero,2f\n\t" -+        "    addi   %0, %0, -1\n\t"  -+        "    br     1b\n\t"  -+        "2:  \n\t"  -+ -+        :  "=r" (dummy)                     /* Need output for optimizer */ -+ -+        :  "0" (loops)                      /* %0  Input                */ -+        ); -+} -+ -+/* -+ * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so -+ * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32. -+ * -+ * The mul instruction gives us loops = (a * b) / 2^32. -+ * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226 -+ * because this lets us support a wide range of HZ and -+ * loops_per_jiffy values without either a or b overflowing 2^32. -+ * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and -+ * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280 -+ * (which corresponds to ~3800 bogomips at HZ = 100). -+ *  -- paulus -+ */ -+#define __MAX_UDELAY	(226050910UL/HZ)	/* maximum udelay argument */ -+#define __MAX_NDELAY	(4294967295UL/HZ)	/* maximum ndelay argument */ -+ -+extern unsigned long loops_per_jiffy; -+ -+extern __inline__ void __udelay(unsigned int x) -+{ -+	unsigned int loops; -+ -+	__asm__("mulxuu %0,%1,%2" : "=r" (loops) : -+		"r" (x), "r" (loops_per_jiffy * 226)); -+	__delay(loops); -+} -+ -+extern __inline__ void __ndelay(unsigned int x) -+{ -+	unsigned int loops; -+ -+	__asm__("mulxuu %0,%1,%2" : "=r" (loops) : -+		"r" (x), "r" (loops_per_jiffy * 5)); -+	__delay(loops); -+} -+ -+extern void __bad_udelay(void);		/* deliberately undefined */ -+extern void __bad_ndelay(void);		/* deliberately undefined */ -+ -+#define udelay(n) (__builtin_constant_p(n)? \ -+	((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \ -+	__udelay((n) * (19 * HZ))) -+ -+#define ndelay(n) (__builtin_constant_p(n)? \ -+	((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \ -+	__ndelay((n) * HZ)) -+ -+#define muldiv(a, b, c)    (((a)*(b))/(c)) -+ -+#endif /* defined(_NIOS_DELAY_H) */ ---- linux/include/asm-nios2nommu/div64.h -+++ linux/include/asm-nios2nommu/div64.h -@@ -0,0 +1,31 @@ -+#ifndef __ASMNIOS_DIV64_H -+#define __ASMNIOS_DIV64_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/div64.h -+ * -+ * Derived from m68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm-generic/div64.h> -+ -+#endif -+ ---- linux/include/asm-nios2nommu/dma.h -+++ linux/include/asm-nios2nommu/dma.h -@@ -0,0 +1,57 @@ -+/* $Id: dma.h,v 1.6 2005/04/07 21:00:26 wentao Exp $ -+ * -+ * Copyright 2004 (C) Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _ASM_NIOS2_DMA_H -+#define _ASM_NIOS2_DMA_H -+ -+#include <linux/kernel.h> -+#include <asm/asm-offsets.h> -+ -+#define MAX_DMA_ADDRESS	(LINUX_SDRAM_END) -+ -+int request_dma(unsigned int, const char *); -+void free_dma(unsigned int); -+void enable_dma(unsigned int dmanr); -+void disable_dma(unsigned int dmanr); -+void set_dma_count(unsigned int dmanr, unsigned int count); -+int get_dma_residue(unsigned int dmanr); -+void nios2_set_dma_data_width(unsigned int dmanr, unsigned int width); -+ -+void nios2_set_dma_handler(unsigned int dmanr, int (*handler)(void*, int), void* user); -+int nios2_request_dma(const char *); -+ -+void nios2_set_dma_mode(unsigned int dmanr, unsigned int mode); -+void nios2_set_dma_rcon(unsigned int dmanr, unsigned int set); -+void nios2_set_dma_wcon(unsigned int dmanr, unsigned int set); -+void nios2_set_dma_raddr(unsigned int dmanr, unsigned int a); -+void nios2_set_dma_waddr(unsigned int dmanr, unsigned int a); -+ -+static inline unsigned long claim_dma_lock(void) -+{ -+} -+ -+static inline void release_dma_lock(unsigned long flags) -+{ -+} -+ -+#endif /* !(_ASM_NIOS2_DMA_H) */ ---- linux/include/asm-nios2nommu/dma-mapping.h -+++ linux/include/asm-nios2nommu/dma-mapping.h -@@ -0,0 +1,133 @@ -+/* -+ *  include/asm-nios2nommu/dma-mapping.h -+ * -+ *  This file exists so that #include <dma-mapping.h> doesn't break anything. -+ */ -+ -+#ifndef _ASM_DMA_MAPPING_H -+#define _ASM_DMA_MAPPING_H -+ -+#include <asm/scatterlist.h> -+#include <linux/mm.h> -+#include <asm/io.h> -+#include <asm/cacheflush.h> -+ -+static inline void *dma_alloc_coherent(struct device *dev, size_t size, -+			 dma_addr_t *dma_handle, int flag) -+{ -+	BUG(); -+	return 0; -+} -+ -+static inline void dma_free_coherent(struct device *dev, size_t size, -+		       void *vaddr, dma_addr_t dma_handle) -+{ -+	BUG(); -+} -+ -+/** -+ * dma_map_single - map a single buffer for streaming DMA -+ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -+ * @cpu_addr: CPU direct mapped address of buffer -+ * @size: size of buffer to map -+ * @dir: DMA transfer direction -+ * -+ * Ensure that any data held in the cache is appropriately discarded -+ * or written back. -+ * -+ * The device owns this memory once this call has completed.  The CPU -+ * can regain ownership by calling dma_unmap_single() or -+ * dma_sync_single_for_cpu(). -+ */ -+static inline dma_addr_t -+dma_map_single(struct device *dev, void *cpu_addr, size_t size, -+	       enum dma_data_direction dir) -+{ -+	cache_push ((unsigned long)cpu_addr, size); -+	return virt_to_bus((unsigned long)cpu_addr); -+} -+ -+/** -+ * dma_unmap_single - unmap a single buffer previously mapped -+ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -+ * @handle: DMA address of buffer -+ * @size: size of buffer to map -+ * @dir: DMA transfer direction -+ * -+ * Unmap a single streaming mode DMA translation.  The handle and size -+ * must match what was provided in the previous dma_map_single() call. -+ * All other usages are undefined. -+ * -+ * After this call, reads by the CPU to the buffer are guaranteed to see -+ * whatever the device wrote there. -+ */ -+static inline void -+dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size, -+		 enum dma_data_direction dir) -+{ -+	cache_clear((unsigned long)bus_to_virt(handle), size); -+} -+ -+/** -+ * dma_map_sg - map a set of SG buffers for streaming mode DMA -+ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -+ * @sg: list of buffers -+ * @nents: number of buffers to map -+ * @dir: DMA transfer direction -+ * -+ * Map a set of buffers described by scatterlist in streaming -+ * mode for DMA.  This is the scatter-gather version of the -+ * above dma_map_single interface.  Here the scatter gather list -+ * elements are each tagged with the appropriate dma address -+ * and length.  They are obtained via sg_dma_{address,length}(SG). -+ * -+ * NOTE: An implementation may be able to use a smaller number of -+ *       DMA address/length pairs than there are SG table elements. -+ *       (for example via virtual mapping capabilities) -+ *       The routine returns the number of addr/length pairs actually -+ *       used, at most nents. -+ * -+ * Device ownership issues as mentioned above for dma_map_single are -+ * the same here. -+ */ -+static inline int -+dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, -+	   enum dma_data_direction dir) -+{ -+	int i; -+ -+	for (i = 0; i < nents; i++, sg++) { -+		char *virt; -+ -+		sg->dma_address = page_to_bus(sg->page) + sg->offset; -+		virt = page_address(sg->page) + sg->offset; -+		cache_push ((unsigned long)virt, sg->length); -+	} -+ -+	return nents; -+} -+ -+/** -+ * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg -+ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -+ * @sg: list of buffers -+ * @nents: number of buffers to map -+ * @dir: DMA transfer direction -+ * -+ * Unmap a set of streaming mode DMA translations. -+ * Again, CPU read rules concerning calls here are the same as for -+ * dma_unmap_single() above. -+ */ -+static inline void -+dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, -+	     enum dma_data_direction dir) -+{ -+	int i; -+ -+	for (i = 0; i < nents; i++, sg++) { -+		char *virt; -+		virt = page_address(sg->page) + sg->offset; -+		cache_clear ((unsigned long)virt, sg->length); -+	} -+} -+#endif /* _ASM_DMA_MAPPING_H */ ---- linux/include/asm-nios2nommu/elf.h -+++ linux/include/asm-nios2nommu/elf.h -@@ -0,0 +1,141 @@ -+#ifndef __NIOS2_ELF_H -+#define __NIOS2_ELF_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/elf.h -+ * -+ * Nio2 ELF relocation types -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * Mar/18/2004		xwt		NiosII relocation types added -+ * -+ ---------------------------------------------------------------------*/ -+ -+// #include <linux/config.h> -+#include <asm/ptrace.h> -+#include <asm/user.h> -+ -+#define R_NIOS2_NONE			0 -+#define R_NIOS2_S16				1 -+#define R_NIOS2_U16				2 -+#define R_NIOS2_PCREL16			3 -+#define R_NIOS2_CALL26			4 -+#define R_NIOS2_IMM5			5 -+#define R_NIOS2_CACHE_OPX 		6 -+#define R_NIOS2_IMM6			7 -+#define R_NIOS2_IMM8			8 -+#define R_NIOS2_HI16			9 -+#define R_NIOS2_LO16			10 -+#define R_NIOS2_HIADJ16 		11 -+#define R_NIOS2_BFD_RELOC_32	12 -+#define R_NIOS2_BFD_RELOC_16	13 -+#define R_NIOS2_BFD_RELOC_8 	14 -+#define R_NIOS2_GPREL			15 -+#define R_NIOS2_GNU_VTINHERIT 	16 -+#define R_NIOS2_GNU_VTENTRY  	17 -+#define R_NIOS2_UJMP			18 -+#define R_NIOS2_CJMP			19 -+#define R_NIOS2_CALLR			20 -+#define R_NIOS2_ALIGN			21 -+/* Keep this the last entry.  */ -+#define R_NIOS2_NUM				22 -+ -+typedef unsigned long elf_greg_t; -+ -+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) -+typedef elf_greg_t elf_gregset_t[ELF_NGREG]; -+ -+typedef unsigned long elf_fpregset_t; -+ -+/* -+ * This is used to ensure we don't load something for the wrong architecture. -+ */ -+#define elf_check_arch(x) \ -+	((x)->e_machine == EM_ALTERA_NIOS2) -+ -+/* -+ * These are used to set parameters in the core dumps. -+ */ -+#define ELF_CLASS	ELFCLASS32 -+#define ELF_DATA	ELFDATA2LSB -+#define ELF_ARCH	EM_ALTERA_NIOS2 -+ -+#define ELF_PLAT_INIT(_r, load_addr)	_r->a1 = 0 -+ -+#define USE_ELF_CORE_DUMP -+#define ELF_EXEC_PAGESIZE	4096 -+ -+/* This is the location that an ET_DYN program is loaded if exec'ed.  Typical -+   use of this is to invoke "./ld.so someprog" to test out a new version of -+   the loader.  We need to make sure that it is out of the way of the program -+   that it will "exec", and that there is sufficient room for the brk.  */ -+ -+#define ELF_ET_DYN_BASE         0xD0000000UL -+ -+/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is -+   now struct_user_regs, they are different) */ -+ -+#define ELF_CORE_COPY_REGS(pr_reg, regs)				\ -+	/* Bleech. */							\ -+	pr_reg[0] = regs->r1;						\ -+	pr_reg[1] = regs->r2;						\ -+	pr_reg[2] = regs->r3;						\ -+	pr_reg[3] = regs->r4;						\ -+	pr_reg[4] = regs->r5;						\ -+	pr_reg[5] = regs->r6;						\ -+	pr_reg[6] = regs->r7;						\ -+	pr_reg[7] = regs->r8;						\ -+	pr_reg[8] = regs->r9;						\ -+	pr_reg[9] = regs->r10;						\ -+	pr_reg[10] = regs->r11;						\ -+	pr_reg[11] = regs->r12;						\ -+	pr_reg[12] = regs->r13;						\ -+	pr_reg[13] = regs->r14;						\ -+	pr_reg[14] = regs->r15;						\ -+	pr_reg[23] = regs->sp;						\ -+	pr_reg[26] = regs->estatus;					\ -+	{								\ -+	  struct switch_stack *sw = ((struct switch_stack *)regs) - 1;	\ -+	  pr_reg[15] = sw->r16;						\ -+	  pr_reg[16] = sw->r17;						\ -+	  pr_reg[17] = sw->r18;						\ -+	  pr_reg[18] = sw->r19;						\ -+	  pr_reg[19] = sw->r20;						\ -+	  pr_reg[20] = sw->r21;						\ -+	  pr_reg[21] = sw->r22;						\ -+	  pr_reg[22] = sw->r23;						\ -+	  pr_reg[24] = sw->fp;						\ -+	  pr_reg[25] = sw->gp;						\ -+	} -+ -+/* This yields a mask that user programs can use to figure out what -+   instruction set this cpu supports.  */ -+ -+#define ELF_HWCAP	(0) -+ -+/* This yields a string that ld.so will use to load implementation -+   specific libraries for optimization.  This is more specific in -+   intent than poking at uname or /proc/cpuinfo.  */ -+ -+#define ELF_PLATFORM  (NULL) -+ -+#ifdef __KERNEL__ -+#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) -+#endif -+ -+#endif ---- linux/include/asm-nios2nommu/entry.h -+++ linux/include/asm-nios2nommu/entry.h -@@ -0,0 +1,188 @@ -+/* -+ * Hacked from m68knommu port. -+ * -+ *  Copyright(C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2NOMMU_ENTRY_H -+#define __NIOS2NOMMU_ENTRY_H -+ -+#ifdef __ASSEMBLY__ -+ -+// #include <linux/config.h> -+#include <asm/setup.h> -+#include <asm/page.h> -+#include <asm/asm-offsets.h> -+ -+/* -+ * Stack layout in 'ret_from_exception': -+ * -+ * This allows access to the syscall arguments in registers r4-r8 -+ * -+ *	 0(sp) - r8 -+ *	 4(sp) - r9 -+ *	 8(sp) - r10 -+ *	 C(sp) - r11 -+ *	10(sp) - r12 -+ *	14(sp) - r13 -+ *	18(sp) - r14 -+ *	1C(sp) - r15 -+ *	20(sp) - r1 -+ *	24(sp) - r2 -+ *	28(sp) - r3 -+ *	2C(sp) - r4 -+ *	30(sp) - r5 -+ *	34(sp) - r6 -+ *	38(sp) - r7 -+ *	3C(sp) - orig_r2 -+ *	40(sp) - ra -+ *	44(sp) - fp -+ *	48(sp) - sp -+ *	4C(sp) - gp -+ *	50(sp) - estatus -+ *	54(sp) - status_extension -+ *	58(sp) - ea -+ * -+ */ -+ -+/* process bits for task_struct.flags */ -+PF_TRACESYS_OFF = 3 -+PF_TRACESYS_BIT = 5 -+PF_PTRACED_OFF = 3 -+PF_PTRACED_BIT = 4 -+PF_DTRACE_OFF = 1 -+PF_DTRACE_BIT = 5 -+ -+LENOSYS = 38 -+ -+/* -+ * This defines the normal kernel pt-regs layout. -+ * -+ */ -+ -+/* -+ * Standard Nios2 interrupt entry and exit macros. -+ * Must be called with interrupts disabled. -+ */ -+.macro SAVE_ALL -+	movia	r24,status_extension	// Read status extension -+	ldw	r24,0(r24) -+	andi	r24,r24,PS_S_ASM -+	bne	r24,r0,1f		// In supervisor mode, already on kernel stack -+	movia	r24,_current_thread	// Switch to current kernel stack -+	ldw	r24,0(r24)		//  using the thread_info -+	addi	r24,r24,THREAD_SIZE_ASM-PT_REGS_SIZE -+	stw	sp,PT_SP(r24)		// Save user stack before changing -+	mov	sp,r24 -+	br	2f -+ -+1:	mov	r24,sp -+	addi	sp,sp,-PT_REGS_SIZE	// Backup the kernel stack pointer -+	stw	r24,PT_SP(sp) -+2:	stw	r1,PT_R1(sp) -+	stw	r2,PT_R2(sp) -+	stw	r3,PT_R3(sp) -+	stw	r4,PT_R4(sp) -+	stw	r5,PT_R5(sp) -+	stw	r6,PT_R6(sp) -+	stw	r7,PT_R7(sp) -+	stw	r8,PT_R8(sp) -+	stw	r9,PT_R9(sp) -+	stw	r10,PT_R10(sp) -+	stw	r11,PT_R11(sp) -+	stw	r12,PT_R12(sp) -+	stw	r13,PT_R13(sp) -+	stw	r14,PT_R14(sp) -+	stw	r15,PT_R15(sp) -+	stw	r2,PT_ORIG_R2(sp) -+	stw	ra,PT_RA(sp) -+	stw	fp,PT_FP(sp) -+	stw	gp,PT_GP(sp) -+	rdctl	r24,estatus -+	stw	r24,PT_ESTATUS(sp) -+	movia	r24,status_extension	// Read status extension -+	ldw	r1,0(r24) -+	stw	r1,PT_STATUS_EXTENSION(sp)	// Store user/supervisor status -+	ORI32	r1,r1,PS_S_ASM			// Set supervisor mode -+	stw	r1,0(r24) -+	stw	ea,PT_EA(sp) -+.endm -+ -+.macro RESTORE_ALL -+	ldw	r1,PT_STATUS_EXTENSION(sp)	// Restore user/supervisor status -+	movia	r24,status_extension -+	stw	r1,0(r24) -+	ldw	r1,PT_R1(sp)		// Restore registers -+	ldw	r2,PT_R2(sp) -+	ldw	r3,PT_R3(sp) -+	ldw	r4,PT_R4(sp) -+	ldw	r5,PT_R5(sp) -+	ldw	r6,PT_R6(sp) -+	ldw	r7,PT_R7(sp) -+	ldw	r8,PT_R8(sp) -+	ldw	r9,PT_R9(sp) -+	ldw	r10,PT_R10(sp) -+	ldw	r11,PT_R11(sp) -+	ldw	r12,PT_R12(sp) -+	ldw	r13,PT_R13(sp) -+	ldw	r14,PT_R14(sp) -+	ldw	r15,PT_R15(sp) -+	ldw	ra,PT_RA(sp) -+	ldw	fp,PT_FP(sp) -+	ldw	gp,PT_GP(sp) -+	ldw	r24,PT_ESTATUS(sp) -+	wrctl	estatus,r24 -+	ldw	ea,PT_EA(sp) -+	ldw	sp,PT_SP(sp)		// Restore sp last -+.endm -+ -+.macro	SAVE_SWITCH_STACK -+	addi	sp,sp,-SWITCH_STACK_SIZE -+	stw	r16,SW_R16(sp) -+	stw	r17,SW_R17(sp) -+	stw	r18,SW_R18(sp) -+	stw	r19,SW_R19(sp) -+	stw	r20,SW_R20(sp) -+	stw	r21,SW_R21(sp) -+	stw	r22,SW_R22(sp) -+	stw	r23,SW_R23(sp) -+	stw	fp,SW_FP(sp) -+	stw	gp,SW_GP(sp) -+	stw	ra,SW_RA(sp) -+.endm -+ -+.macro	RESTORE_SWITCH_STACK -+	ldw	r16,SW_R16(sp) -+	ldw	r17,SW_R17(sp) -+	ldw	r18,SW_R18(sp) -+	ldw	r19,SW_R19(sp) -+	ldw	r20,SW_R20(sp) -+	ldw	r21,SW_R21(sp) -+	ldw	r22,SW_R22(sp) -+	ldw	r23,SW_R23(sp) -+	ldw	fp,SW_FP(sp) -+	ldw	gp,SW_GP(sp) -+	ldw	ra,SW_RA(sp) -+	addi	sp,sp,SWITCH_STACK_SIZE -+.endm -+ -+#endif /* __ASSEMBLY__ */ -+#endif /* __NIOS2NOMMU_ENTRY_H */ ---- linux/include/asm-nios2nommu/errno.h -+++ linux/include/asm-nios2nommu/errno.h -@@ -0,0 +1,6 @@ -+#ifndef _NIOS2NOMMU_ERRNO_H -+#define _NIOS2NOMMU_ERRNO_H -+ -+#include <asm-generic/errno.h> -+ -+#endif /* _NIOS2NOMMU_ERRNO_H */ ---- linux/include/asm-nios2nommu/fcntl.h -+++ linux/include/asm-nios2nommu/fcntl.h -@@ -0,0 +1,110 @@ -+/* -+ * This file came from the m68k port. -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef _NIOS2_FCNTL_H -+#define _NIOS2_FCNTL_H -+ -+/* open/fcntl - O_SYNC is only implemented on blocks devices and on files -+   located on an ext2 file system */ -+#define O_ACCMODE	  0003 -+#define O_RDONLY	    00 -+#define O_WRONLY	    01 -+#define O_RDWR		    02 -+#define O_CREAT		  0100	/* not fcntl */ -+#define O_EXCL		  0200	/* not fcntl */ -+#define O_NOCTTY	  0400	/* not fcntl */ -+#define O_TRUNC		 01000	/* not fcntl */ -+#define O_APPEND	 02000 -+#define O_NONBLOCK	 04000 -+#define O_NDELAY	O_NONBLOCK -+#define O_SYNC		010000 -+#define FASYNC		020000	/* fcntl, for BSD compatibility */ -+#define O_DIRECTORY	040000	/* must be a directory */ -+#define O_NOFOLLOW	0100000	/* don't follow links */ -+#define O_DIRECT	0200000	/* direct disk access hint - currently ignored */ -+#define O_LARGEFILE	0400000 -+#define O_NOATIME	01000000 -+ -+#define F_DUPFD		0	/* dup */ -+#define F_GETFD		1	/* get close_on_exec */ -+#define F_SETFD		2	/* set/clear close_on_exec */ -+#define F_GETFL		3	/* get file->f_flags */ -+#define F_SETFL		4	/* set file->f_flags */ -+#define F_GETLK		5 -+#define F_SETLK		6 -+#define F_SETLKW	7 -+ -+#define F_SETOWN	8	/*  for sockets. */ -+#define F_GETOWN	9	/*  for sockets. */ -+#define F_SETSIG	10	/*  for sockets. */ -+#define F_GETSIG	11	/*  for sockets. */ -+ -+#define F_GETLK64	12	/*  using 'struct flock64' */ -+#define F_SETLK64	13 -+#define F_SETLKW64	14 -+ -+/* for F_[GET|SET]FL */ -+#define FD_CLOEXEC	1	/* actually anything with low bit set goes */ -+ -+/* for posix fcntl() and lockf() */ -+#define F_RDLCK		0 -+#define F_WRLCK		1 -+#define F_UNLCK		2 -+ -+/* for old implementation of bsd flock () */ -+#define F_EXLCK		4	/* or 3 */ -+#define F_SHLCK		8	/* or 4 */ -+ -+/* for leases */ -+#define F_INPROGRESS	16 -+ -+/* operations for bsd flock(), also used by the kernel implementation */ -+#define LOCK_SH		1	/* shared lock */ -+#define LOCK_EX		2	/* exclusive lock */ -+#define LOCK_NB		4	/* or'd with one of the above to prevent -+				   blocking */ -+#define LOCK_UN		8	/* remove lock */ -+ -+#define LOCK_MAND	32	/* This is a mandatory flock */ -+#define LOCK_READ	64	/* ... Which allows concurrent read operations */ -+#define LOCK_WRITE	128	/* ... Which allows concurrent write operations */ -+#define LOCK_RW		192	/* ... Which allows concurrent read & write ops */ -+ -+struct flock { -+	short l_type; -+	short l_whence; -+	off_t l_start; -+	off_t l_len; -+	pid_t l_pid; -+}; -+ -+struct flock64 { -+	short  l_type; -+	short  l_whence; -+	loff_t l_start; -+	loff_t l_len; -+	pid_t  l_pid; -+}; -+ -+#define F_LINUX_SPECIFIC_BASE	1024 -+#endif /* _NIOS2_FCNTL_H */ ---- linux/include/asm-nios2nommu/flat.h -+++ linux/include/asm-nios2nommu/flat.h -@@ -0,0 +1,126 @@ -+/* -+ * include/asm-nios2nommu/flat.h -- uClinux bFLT relocations -+ * -+ *  Copyright (C) 2004,05  Microtronix Datacom Ltd -+ * -+ * 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 for more details. -+ * -+ * Written by Wentao Xu <wentao@microtronix.com> -+ */ -+ -+#ifndef __NIOS2_FLAT_H__ -+#define __NIOS2_FLAT_H__ -+ -+#define	flat_reloc_valid(reloc, size)	((reloc) <= (size + 0x8000)) -+ -+/* The stack is 64-bit aligned for Nios II, so (sp - 1) shall -+ * be 64-bit aligned, where -1 is for argc -+ */ -+#define	flat_stack_align(sp)		(sp = (unsigned long *)(((unsigned long)sp - 1) & (-8))) -+ -+/* The uClibc port for Nios II expects the argc is followed by argv and envp */ -+#define	flat_argvp_envp_on_stack()	1 -+ -+#define	flat_old_ram_flag(flags)	(flags) -+ -+/* We store the type of relocation in the top 4 bits of the `relval.' */ -+ -+/* Convert a relocation entry into an address.  */ -+static inline unsigned long -+flat_get_relocate_addr (unsigned long relval) -+{ -+	return relval & 0x0fffffff; /* Mask out top 4-bits */ -+} -+ -+#define FLAT_NIOS2_RELOC_TYPE(relval) ((relval) >> 28) -+ -+#define FLAT_NIOS2_R_32			0 /* Normal 32-bit reloc */ -+#define FLAT_NIOS2_R_HI_LO		1 /* High 16-bits + low 16-bits field */ -+#define FLAT_NIOS2_R_HIADJ_LO	2 /* High 16-bits adjust + low 16-bits field */ -+#define FLAT_NIOS2_R_CALL26		4 /* Call imm26 */ -+ -+/* Extract the address to be relocated from the symbol reference at rp; -+ * relval is the raw relocation-table entry from which RP is derived. -+ * rp shall always be 32-bit aligned -+ */ -+static inline unsigned long flat_get_addr_from_rp (unsigned long *rp, -+						   unsigned long relval, -+						   unsigned long flags) -+{ -+	switch (FLAT_NIOS2_RELOC_TYPE(relval)) -+	{ -+	case FLAT_NIOS2_R_32: -+		/* Simple 32-bit address. The loader expect it in bigger endian */ -+		return htonl(*rp); -+ -+	case FLAT_NIOS2_R_HI_LO: -+		/* get the two 16-bit immediate value from instructions, then -+		 * construct a 32-bit value. Again the loader expect bigger endian -+		 */ -+		return htonl ((((rp[0] >> 6) & 0xFFFF) << 16 ) |  -+					  ((rp[1] >> 6) & 0xFFFF)); -+ -+	case FLAT_NIOS2_R_HIADJ_LO: -+		{ -+		/* get the two 16-bit immediate value from instructions, then -+		 * construct a 32-bit value. Again the loader expect bigger endian -+		 */ -+		 unsigned int low, high; -+		 high = (rp[0] >> 6) & 0xFFFF; -+		 low  = (rp[1] >> 6) & 0xFFFF; -+		  -+		 if ((low >> 15) & 1) high--; -+		  -+		 return htonl ((high << 16 ) | low ); -+		} -+	case FLAT_NIOS2_R_CALL26: -+		/* the 26-bit immediate value is actually 28-bit */ -+		return htonl(((*rp) >> 6) << 2); -+ -+	default: -+		return ~0;	/* bogus value */ -+	} -+} -+ -+/* Insert the address addr into the symbol reference at rp; -+ * relval is the raw relocation-table entry from which rp is derived. -+ * rp shall always be 32-bit aligned -+ */ -+static inline void flat_put_addr_at_rp (unsigned long *rp, unsigned long addr, -+					unsigned long relval) -+{ -+	unsigned long exist_val; -+	switch (FLAT_NIOS2_RELOC_TYPE (relval)) { -+	case FLAT_NIOS2_R_32: -+		/* Simple 32-bit address.  */ -+		*rp = addr; -+		break; -+ -+	case FLAT_NIOS2_R_HI_LO: -+		exist_val = rp[0]; -+		rp[0] = ((((exist_val >> 22) << 16) | (addr >> 16)) << 6) | (exist_val & 0x3F); -+		exist_val = rp[1]; -+		rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F); -+		break; -+ -+	case FLAT_NIOS2_R_HIADJ_LO: -+		{ -+		unsigned int high = (addr >> 16); -+		if ((addr >> 15) & 1)  -+			high = (high + 1) & 0xFFFF; -+		exist_val = rp[0]; -+		rp[0] = ((((exist_val >> 22) << 16) | high) << 6) | (exist_val & 0x3F); -+		exist_val = rp[1]; -+		rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F); -+		break; -+		} -+	case FLAT_NIOS2_R_CALL26: -+		/* the opcode of CALL is 0, so just store the value */ -+		*rp = ((addr >> 2) << 6); -+		break; -+	} -+} -+ -+#endif /* __NIOS2_FLAT_H__ */ ---- linux/include/asm-nios2nommu/hardirq.h -+++ linux/include/asm-nios2nommu/hardirq.h -@@ -0,0 +1,53 @@ -+/* -+ * Ported from m68knommu -+ * -+ * Copyright (C) 2003, Microtronix Datacom Ltd. -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef __NIOS2_HARDIRQ_H -+#define __NIOS2_HARDIRQ_H -+ -+// #include <linux/config.h> -+#include <linux/cache.h> -+#include <linux/threads.h> -+ -+typedef struct { -+	unsigned int __softirq_pending; -+} ____cacheline_aligned irq_cpustat_t; -+ -+#include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */ -+ -+#define HARDIRQ_BITS	8 -+ -+/* -+ * The hardirq mask has to be large enough to have -+ * space for potentially all IRQ sources in the system -+ * nesting on a single CPU: -+ */ -+#if (1 << HARDIRQ_BITS) < NR_IRQS -+# error HARDIRQ_BITS is too low! -+#endif -+ -+#ifdef CONFIG_SMP -+# error nios2nommu SMP is not available -+#endif /* CONFIG_SMP */ -+ -+#endif /* __NIOS2_HARDIRQ_H */ ---- linux/include/asm-nios2nommu/hdreg.h -+++ linux/include/asm-nios2nommu/hdreg.h -@@ -0,0 +1,30 @@ -+/* -+ *  Copyright (C) 1994-1996  Linus Torvalds & authors -+ *  Copyright (C) 2002  Wentau Xu (www.microtronix.com) -+ *  copyright (C) 2004  Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2_HDREG_H -+#define __NIOS2_HDREG_H -+ -+typedef unsigned long ide_ioreg_t; -+ -+#endif /* __NIOS2_HDREG_H */ ---- linux/include/asm-nios2nommu/hw_irq.h -+++ linux/include/asm-nios2nommu/hw_irq.h -@@ -0,0 +1,16 @@ -+#ifndef _ASM_HW_IRQ_H -+#define _ASM_HW_IRQ_H -+ -+/* -+ *	linux/include/asm/hw_irq.h -+ * -+ *	(C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar -+ * -+ *	moved some of the old arch/i386/kernel/irq.h to here. VY -+ * -+ *	IRQ/IPI changes taken from work by Thomas Radke -+ *	<tomsoft@informatik.tu-chemnitz.de> -+ */ -+ -+ -+#endif /* _ASM_HW_IRQ_H */ ---- linux/include/asm-nios2nommu/ide.h -+++ linux/include/asm-nios2nommu/ide.h -@@ -0,0 +1,47 @@ -+/* -+ *  linux/include/asm-niosnommu2/ide.h -+ * -+ *  Copyright (C) 1994-1996  Linus Torvalds & authors -+ *  Copyright (C) 2004	     Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __ASMNIOS2_IDE_H -+#define __ASMNIOS2_IDE_H -+ -+#ifdef __KERNEL__ -+#undef MAX_HWIFS		/* we're going to force it */ -+ -+#ifndef MAX_HWIFS -+#define MAX_HWIFS	1 -+#endif -+ -+#define IDE_ARCH_OBSOLETE_INIT -+#define IDE_ARCH_OBSOLETE_DEFAULTS -+#define ide_default_io_base(i)		((unsigned long)na_ide_ide) -+#define ide_default_irq(b)			(na_ide_ide_irq) -+#define ide_init_default_irq(base)	ide_default_irq(base) -+#define ide_default_io_ctl(base)	((base) + (0xE*4)) -+ -+#include <asm-generic/ide_iops.h> -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* __ASMNIOS2_IDE_H */ ---- linux/include/asm-nios2nommu/init.h -+++ linux/include/asm-nios2nommu/init.h -@@ -0,0 +1,22 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#error "<asm/init.h> should never be used - use <linux/init.h> instead" ---- linux/include/asm-nios2nommu/ioctl.h -+++ linux/include/asm-nios2nommu/ioctl.h -@@ -0,0 +1,100 @@ -+/* $Id: ioctl.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $ -+ * -+ * linux/ioctl.h for Linux by H.H. Bergman. -+ * -+ * Copyright (C) 2004,  Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2_IOCTL_H -+#define _NIOS2_IOCTL_H -+ -+/* ioctl command encoding: 32 bits total, command in lower 16 bits, -+ * size of the parameter structure in the lower 14 bits of the -+ * upper 16 bits. -+ * Encoding the size of the parameter structure in the ioctl request -+ * is useful for catching programs compiled with old versions -+ * and to avoid overwriting user space outside the user buffer area. -+ * The highest 2 bits are reserved for indicating the ``access mode''. -+ * NOTE: This limits the max parameter size to 16kB -1 ! -+ */ -+ -+/* -+ * I don't really have any idea about what this should look like, so -+ * for the time being, this is heavily based on the PC definitions. -+ */ -+ -+/* -+ * The following is for compatibility across the various Linux -+ * platforms.  The i386 ioctl numbering scheme doesn't really enforce -+ * a type field.  De facto, however, the top 8 bits of the lower 16 -+ * bits are indeed used as a type field, so we might just as well make -+ * this explicit here.  Please be sure to use the decoding macros -+ * below from now on. -+ */ -+#define _IOC_NRBITS	8 -+#define _IOC_TYPEBITS	8 -+#define _IOC_SIZEBITS	14 -+#define _IOC_DIRBITS	2 -+ -+#define _IOC_NRMASK	((1 << _IOC_NRBITS)-1) -+#define _IOC_TYPEMASK	((1 << _IOC_TYPEBITS)-1) -+#define _IOC_SIZEMASK	((1 << _IOC_SIZEBITS)-1) -+#define _IOC_DIRMASK	((1 << _IOC_DIRBITS)-1) -+ -+#define _IOC_NRSHIFT	0 -+#define _IOC_TYPESHIFT	(_IOC_NRSHIFT+_IOC_NRBITS) -+#define _IOC_SIZESHIFT	(_IOC_TYPESHIFT+_IOC_TYPEBITS) -+#define _IOC_DIRSHIFT	(_IOC_SIZESHIFT+_IOC_SIZEBITS) -+ -+/* -+ * Direction bits. -+ */ -+#define _IOC_NONE	0U -+#define _IOC_WRITE	1U -+#define _IOC_READ	2U -+ -+#define _IOC(dir,type,nr,size) \ -+	(((dir)  << _IOC_DIRSHIFT) | \ -+	 ((type) << _IOC_TYPESHIFT) | \ -+	 ((nr)   << _IOC_NRSHIFT) | \ -+	 ((size) << _IOC_SIZESHIFT)) -+ -+/* used to create numbers */ -+#define _IO(type,nr)		_IOC(_IOC_NONE,(type),(nr),0) -+#define _IOR(type,nr,size)	_IOC(_IOC_READ,(type),(nr),sizeof(size)) -+#define _IOW(type,nr,size)	_IOC(_IOC_WRITE,(type),(nr),sizeof(size)) -+#define _IOWR(type,nr,size)	_IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) -+ -+/* used to decode ioctl numbers.. */ -+#define _IOC_DIR(nr)		(((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) -+#define _IOC_TYPE(nr)		(((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK) -+#define _IOC_NR(nr)		(((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK) -+#define _IOC_SIZE(nr)		(((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK) -+ -+/* ...and for the drivers/sound files... */ -+ -+#define IOC_IN		(_IOC_WRITE << _IOC_DIRSHIFT) -+#define IOC_OUT		(_IOC_READ << _IOC_DIRSHIFT) -+#define IOC_INOUT	((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT) -+#define IOCSIZE_MASK	(_IOC_SIZEMASK << _IOC_SIZESHIFT) -+#define IOCSIZE_SHIFT	(_IOC_SIZESHIFT) -+ -+#endif /* _NIOS2_IOCTL_H */ ---- linux/include/asm-nios2nommu/ioctls.h -+++ linux/include/asm-nios2nommu/ioctls.h -@@ -0,0 +1,103 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __ARCH_NIOS2_IOCTLS_H__ -+#define __ARCH_NIOS2_IOCTLS_H__ -+ -+#include <asm/ioctl.h> -+ -+/* 0x54 is just a magic number to make these relatively unique ('T') */ -+ -+#define TCGETS		0x5401 -+#define TCSETS		0x5402 -+#define TCSETSW		0x5403 -+#define TCSETSF		0x5404 -+#define TCGETA		0x5405 -+#define TCSETA		0x5406 -+#define TCSETAW		0x5407 -+#define TCSETAF		0x5408 -+#define TCSBRK		0x5409 -+#define TCXONC		0x540A -+#define TCFLSH		0x540B -+#define TIOCEXCL	0x540C -+#define TIOCNXCL	0x540D -+#define TIOCSCTTY	0x540E -+#define TIOCGPGRP	0x540F -+#define TIOCSPGRP	0x5410 -+#define TIOCOUTQ	0x5411 -+#define TIOCSTI		0x5412 -+#define TIOCGWINSZ	0x5413 -+#define TIOCSWINSZ	0x5414 -+#define TIOCMGET	0x5415 -+#define TIOCMBIS	0x5416 -+#define TIOCMBIC	0x5417 -+#define TIOCMSET	0x5418 -+#define TIOCGSOFTCAR	0x5419 -+#define TIOCSSOFTCAR	0x541A -+#define FIONREAD	0x541B -+#define TIOCINQ		FIONREAD -+#define TIOCLINUX	0x541C -+#define TIOCCONS	0x541D -+#define TIOCGSERIAL	0x541E -+#define TIOCSSERIAL	0x541F -+#define TIOCPKT		0x5420 -+#define FIONBIO		0x5421 -+#define TIOCNOTTY	0x5422 -+#define TIOCSETD	0x5423 -+#define TIOCGETD	0x5424 -+#define TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */ -+#define TIOCTTYGSTRUCT	0x5426  /* For debugging only */ -+#define TIOCSBRK	0x5427  /* BSD compatibility */ -+#define TIOCCBRK	0x5428  /* BSD compatibility */ -+#define TIOCGSID	0x5429  /* Return the session ID of FD */ -+#define TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ -+#define TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */ -+ -+#define FIONCLEX	0x5450  /* these numbers need to be adjusted. */ -+#define FIOCLEX		0x5451 -+#define FIOASYNC	0x5452 -+#define TIOCSERCONFIG	0x5453 -+#define TIOCSERGWILD	0x5454 -+#define TIOCSERSWILD	0x5455 -+#define TIOCGLCKTRMIOS	0x5456 -+#define TIOCSLCKTRMIOS	0x5457 -+#define TIOCSERGSTRUCT	0x5458 /* For debugging only */ -+#define TIOCSERGETLSR   0x5459 /* Get line status register */ -+#define TIOCSERGETMULTI 0x545A /* Get multiport config  */ -+#define TIOCSERSETMULTI 0x545B /* Set multiport config */ -+ -+#define TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */ -+#define TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */ -+#define FIOQSIZE	0x545E -+ -+/* Used for packet mode */ -+#define TIOCPKT_DATA		 0 -+#define TIOCPKT_FLUSHREAD	 1 -+#define TIOCPKT_FLUSHWRITE	 2 -+#define TIOCPKT_STOP		 4 -+#define TIOCPKT_START		 8 -+#define TIOCPKT_NOSTOP		16 -+#define TIOCPKT_DOSTOP		32 -+ -+#define TIOCSER_TEMT    0x01	/* Transmitter physically empty */ -+ -+#endif /* __ARCH_NIOS2_IOCTLS_H__ */ ---- linux/include/asm-nios2nommu/io.h -+++ linux/include/asm-nios2nommu/io.h -@@ -0,0 +1,240 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2_IO_H -+#define __NIOS2_IO_H -+ -+#ifdef __KERNEL__ -+ -+#include <linux/kernel.h> -+ -+#include <asm/page.h>      /* IO address mapping routines need this */ -+#include <asm/system.h> -+#include <asm/unaligned.h> -+ -+extern void insw(unsigned long port, void *dst, unsigned long count); -+extern void outsw(unsigned long port, void *src, unsigned long count); -+extern void insl(unsigned long port, void *dst, unsigned long count); -+extern void outsl(unsigned long port, void *src, unsigned long count); -+ -+ -+/* -+ * readX/writeX() are used to access memory mapped devices. On some -+ * architectures the memory mapped IO stuff needs to be accessed -+ * differently. On the Nios architecture, we just read/write the -+ * memory location directly. -+ */ -+ -+#define readb(addr) 	\ -+({						\ -+	unsigned char __res;\ -+	__asm__ __volatile__( \ -+		"ldbuio %0, 0(%1)" \ -+		: "=r"(__res)	\ -+		: "r" (addr));	\ -+	__res;				\ -+}) -+ -+#define readw(addr) 	\ -+({						\ -+	unsigned short __res;\ -+	__asm__ __volatile__( \ -+		"ldhuio %0, 0(%1)" \ -+		: "=r"(__res)	\ -+		: "r" (addr));	\ -+	__res;				\ -+}) -+ -+#define readl(addr) 	\ -+({						\ -+	unsigned int __res;\ -+	__asm__ __volatile__( \ -+		"ldwio %0, 0(%1)" \ -+		: "=r"(__res)	\ -+		: "r" (addr));	\ -+	__res;				\ -+}) -+ -+#define writeb(b,addr)	\ -+({						\ -+	__asm__ __volatile__( \ -+		"stbio %0, 0(%1)" \ -+		: : "r"(b), "r" (addr));	\ -+}) -+ -+#define writew(b,addr)	\ -+({						\ -+	__asm__ __volatile__( \ -+		"sthio %0, 0(%1)" \ -+		: : "r"(b), "r" (addr));	\ -+}) -+ -+#define writel(b,addr)	\ -+({						\ -+	__asm__ __volatile__( \ -+		"stwio %0, 0(%1)" \ -+		: : "r"(b), "r" (addr));	\ -+}) -+ -+#define __raw_readb readb -+#define __raw_readw readw -+#define __raw_readl readl -+#define __raw_writeb writeb -+#define __raw_writew writew -+#define __raw_writel writel -+ -+#define mmiowb() -+ -+/* -+ *	make the short names macros so specific devices -+ *	can override them as required -+ */ -+ -+#define memset_io(addr,c,len)	memset((void *)(((unsigned int)(addr)) | 0x80000000),(c),(len)) -+#define memcpy_fromio(to,from,len)	memcpy((to),(void *)(((unsigned int)(from)) | 0x80000000),(len)) -+#define memcpy_toio(to,from,len)	memcpy((void *)(((unsigned int)(to)) | 0x80000000),(from),(len)) -+ -+#define inb(addr)    readb(addr) -+#define inw(addr)    readw(addr) -+#define inl(addr)    readl(addr) -+ -+#define outb(x,addr) ((void) writeb(x,addr)) -+#define outw(x,addr) ((void) writew(x,addr)) -+#define outl(x,addr) ((void) writel(x,addr)) -+ -+#define inb_p(addr)    inb(addr) -+#define inw_p(addr)    inw(addr) -+#define inl_p(addr)    inl(addr) -+ -+#define outb_p(x,addr) outb(x,addr) -+#define outw_p(x,addr) outw(x,addr) -+#define outl_p(x,addr) outl(x,addr) -+ -+ -+ -+extern inline void insb(unsigned long port, void *dst, unsigned long count) -+{ -+	unsigned char *p=(unsigned char*)dst; -+	while (count--) -+		*p++ = inb(port); -+} -+ -+/* See arch/niosnommu/io.c for optimized version */ -+extern inline void _insw(unsigned long port, void *dst, unsigned long count) -+{ -+	unsigned short *p=(unsigned short*)dst; -+	while (count--) -+		*p++ = inw(port); -+} -+ -+/* See arch/niosnommu/kernel/io.c for unaligned destination pointer */ -+extern inline void _insl(unsigned long port, void *dst, unsigned long count) -+{ -+	unsigned long *p=(unsigned long*)dst; -+	while (count--) -+		*p++ = inl(port); -+} -+ -+extern inline void outsb(unsigned long port, void *src, unsigned long count) -+{ -+	unsigned char *p=(unsigned char*)src; -+	while (count--)  -+        outb( *p++, port ); -+} -+ -+/* See arch/niosnommu/io.c for optimized version */ -+extern inline void _outsw(unsigned long port, void *src, unsigned long count) -+{ -+	unsigned short *p=(unsigned short*)src; -+	while (count--)  -+        outw( *p++, port ); -+} -+ -+/* See arch/niosnommu/kernel/io.c for unaligned source pointer */ -+extern inline void _outsl(unsigned long port, void *src, unsigned long count) -+{ -+	unsigned long *p=(unsigned long*)src; -+	while (count--)  -+        outl( *p++, port ); -+} -+ -+ -+ -+extern inline void mapioaddr(unsigned long physaddr, unsigned long virt_addr, -+			     int bus, int rdonly) -+{ -+	return; -+} -+ -+//vic - copied from m68knommu -+ -+/* Values for nocacheflag and cmode */ -+#define IOMAP_FULL_CACHING		0 -+#define IOMAP_NOCACHE_SER		1 -+#define IOMAP_NOCACHE_NONSER		2 -+#define IOMAP_WRITETHROUGH		3 -+ -+extern void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag); -+extern void __iounmap(void *addr, unsigned long size); -+ -+extern inline void *ioremap(unsigned long physaddr, unsigned long size) -+{ -+	return __ioremap(physaddr, size, IOMAP_NOCACHE_SER); -+} -+extern inline void *ioremap_nocache(unsigned long physaddr, unsigned long size) -+{ -+	return __ioremap(physaddr, size, IOMAP_NOCACHE_SER); -+} -+extern inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size) -+{ -+	return __ioremap(physaddr, size, IOMAP_WRITETHROUGH); -+} -+extern inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size) -+{ -+	return __ioremap(physaddr, size, IOMAP_FULL_CACHING); -+} -+ -+extern void iounmap(void *addr); -+ -+ -+#define IO_SPACE_LIMIT 0xffffffff -+ -+#define dma_cache_inv(_start,_size)		do { } while (0) -+#define dma_cache_wback(_start,_size)		do { } while (0) -+#define dma_cache_wback_inv(_start,_size)	do { } while (0) -+ -+/* Pages to physical address... */ -+#define page_to_phys(page)      ((page - mem_map) << PAGE_SHIFT) -+#define page_to_bus(page)       ((page - mem_map) << PAGE_SHIFT) -+ -+#define mm_ptov(vaddr)		((void *) (vaddr)) -+#define mm_vtop(vaddr)		((unsigned long) (vaddr)) -+#define phys_to_virt(vaddr)	((void *) (vaddr)) -+#define virt_to_phys(vaddr)	((unsigned long) (vaddr)) -+ -+#define virt_to_bus virt_to_phys -+#define bus_to_virt phys_to_virt -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* !(__NIOS2_IO_H) */ -+ ---- linux/include/asm-nios2nommu/ipcbuf.h -+++ linux/include/asm-nios2nommu/ipcbuf.h -@@ -0,0 +1,49 @@ -+#ifndef __NIOS2_IPCBUF_H__ -+#define __NIOS2_IPCBUF_H__ -+ -+/* Copied from asm-m68k/ipcbuf.h -+ * The user_ipc_perm structure for Nios architecture. -+ * Note extra padding because this structure is passed back and forth -+ * between kernel and user space. -+ * -+ * Pad space is left for: -+ * - 32-bit mode_t and seq -+ * - 2 miscellaneous 32-bit values -+ *  -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+struct ipc64_perm -+{ -+	__kernel_key_t		key; -+	__kernel_uid32_t	uid; -+	__kernel_gid32_t	gid; -+	__kernel_uid32_t	cuid; -+	__kernel_gid32_t	cgid; -+	__kernel_mode_t		mode; -+	unsigned short		__pad1; -+	unsigned short		seq; -+	unsigned short		__pad2; -+	unsigned long		__unused1; -+	unsigned long		__unused2; -+}; -+ -+#endif /* __NIOS2_IPCBUF_H__ */ ---- linux/include/asm-nios2nommu/ipc.h -+++ linux/include/asm-nios2nommu/ipc.h -@@ -0,0 +1,51 @@ -+#ifndef __NIOS2_IPC_H__ -+#define __NIOS2_IPC_H__ -+ -+/* Copied from sparc version -+ * These are used to wrap system calls on the Nios. -+ * -+ * See arch/niosnommu/kernel/sys_nios.c for ugly details.. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+struct ipc_kludge { -+	struct msgbuf *msgp; -+	long msgtyp; -+}; -+ -+#define SEMOP		 1 -+#define SEMGET		 2 -+#define SEMCTL		 3 -+#define MSGSND		11 -+#define MSGRCV		12 -+#define MSGGET		13 -+#define MSGCTL		14 -+#define SHMAT		21 -+#define SHMDT		22 -+#define SHMGET		23 -+#define SHMCTL		24 -+ -+/* Used by the DIPC package, try and avoid reusing it */ -+#define DIPC            25 -+ -+#define IPCCALL(version,op)	((version)<<16 | (op)) -+ -+#endif ---- linux/include/asm-nios2nommu/irq.h -+++ linux/include/asm-nios2nommu/irq.h -@@ -0,0 +1,182 @@ -+/* -+ * 21Mar2001    1.1    dgt/microtronix -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+ -+#ifndef _NIOS2NOMMU_IRQ_H_ -+#define _NIOS2NOMMU_IRQ_H_ -+ -+extern void disable_irq(unsigned int); -+extern void enable_irq(unsigned int); -+ -+// #include <linux/config.h> -+#include <linux/interrupt.h> -+ -+#define	SYS_IRQS	32 -+#define	NR_IRQS		SYS_IRQS -+ -+/* -+ * Interrupt source definitions -+ * General interrupt sources are the level 1-7. -+ * Adding an interrupt service routine for one of these sources -+ * results in the addition of that routine to a chain of routines. -+ * Each one is called in succession.  Each individual interrupt -+ * service routine should determine if the device associated with -+ * that routine requires service. -+ */ -+ -+#define IRQ01		(1)	/* level 1  interrupt */ -+#define IRQ02		(2)	/* level 2  interrupt */ -+#define IRQ03		(3)	/* level 3  interrupt */ -+#define IRQ04		(4)	/* level 4  interrupt */ -+#define IRQ05		(5)	/* level 5  interrupt */ -+#define IRQ06		(6)	/* level 6  interrupt */ -+#define IRQ07		(7)	/* level 7  interrupt */ -+#define IRQ08		(8)	/* level 8  interrupt */ -+#define IRQ09		(9)	/* level 9  interrupt */ -+#define IRQ0A		(10)	/* level 10 interrupt */ -+#define IRQ0B		(11)	/* level 11 interrupt */ -+#define IRQ0C		(12)	/* level 12 interrupt */ -+#define IRQ0D		(13)	/* level 13 interrupt */ -+#define IRQ0E		(14)	/* level 14 interrupt */ -+#define IRQ0F		(15)	/* level 15 interrupt */ -+#define IRQ10		(16)	/* level 16 interrupt */ -+#define IRQ12		(17)	/* level 17 interrupt */ -+#define IRQ13		(18)	/* level 18 interrupt */ -+#define IRQ14		(19)	/* level 19 interrupt */ -+#define IRQ15		(20)	/* level 20 interrupt */ -+#define IRQ16		(21)	/* level 21 interrupt */ -+#define IRQ17		(22)	/* level 22 interrupt */ -+#define IRQ18		(23)	/* level 23 interrupt */ -+#define IRQ19		(24)	/* level 24 interrupt */ -+#define IRQ1A		(25)	/* level 25 interrupt */ -+#define IRQ1B		(26)	/* level 26 interrupt */ -+#define IRQ1C		(27)	/* level 27 interrupt */ -+#define IRQ1D		(28)	/* level 28 interrupt */ -+#define IRQ1E		(29)	/* level 29 interrupt */ -+#define IRQ1F		(30)	/* level 30 interrupt */ -+#define IRQ20		(31)	/* level 31 interrupt */ -+#define IRQ21		(32)	/* level 32 interrupt */ -+ -+#define IRQMAX		IRQ21 -+ -+/* -+ * "Generic" interrupt sources -+ */ -+ -+/* -+ * Machine specific interrupt sources. -+ * -+ * Adding an interrupt service routine for a source with this bit -+ * set indicates a special machine specific interrupt source. -+ * The machine specific files define these sources. -+ * -+ * Removed, they are not used by any one. -+ */ -+ -+/* -+ * various flags for request_irq() -+ */ -+#define IRQ_FLG_LOCK	(0x0001)	/* handler is not replaceable	*/ -+#define IRQ_FLG_REPLACE	(0x0002)	/* replace existing handler	*/ -+#define IRQ_FLG_FAST	(0x0004) -+#define IRQ_FLG_SLOW	(0x0008) -+#define IRQ_FLG_STD	(0x8000)	/* internally used		*/ -+ -+/* -+ * Functions to set and clear the interrupt mask. -+ */ -+ -+/* -+ * Use a zero to clean the bit. -+ */ -+static inline void clrimr(int mask) -+{ -+	int flags; -+ -+	local_irq_save(flags); -+	__asm__ __volatile__( -+	"rdctl	r8, ienable\n" -+	"and	r8,r8,%0\n" -+	"wrctl	ienable, r8\n" -+	: /* No output */ -+	: "r" (mask) -+	: "r8"); -+	local_irq_restore(flags); -+} -+ -+/* -+ * Use a one to set the bit. -+ */ -+static inline void setimr(int mask) -+{ -+	int flags; -+ -+	local_irq_save(flags); -+	__asm__ __volatile__( -+	"rdctl	r8, ienable\n" -+	"or	r8,r8,%0\n" -+	"wrctl	ienable, r8\n" -+	: /* No output */ -+	: "r" (mask) -+	: "r8"); -+	local_irq_restore(flags); -+} -+ -+/* -+ * This structure is used to chain together the ISRs for a particular -+ * interrupt source (if it supports chaining). -+ */ -+typedef struct irq_node { -+	irqreturn_t	(*handler)(int, void *, struct pt_regs *); -+	unsigned long	flags; -+	void		*dev_id; -+	const char	*devname; -+	struct irq_node *next; -+} irq_node_t; -+ -+/* -+ * This function returns a new irq_node_t -+ */ -+extern irq_node_t *new_irq_node(void); -+ -+/* -+ * This structure has only 4 elements for speed reasons -+ */ -+typedef struct irq_handler { -+	irqreturn_t	(*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; -+ -+#define disable_irq_nosync(i) disable_irq(i) -+ -+#ifndef irq_canonicalize -+#define irq_canonicalize(i)	(i) -+#endif -+ -+#endif /* _NIOS2NOMMU_IRQ_H_ */ ---- linux/include/asm-nios2nommu/kmap_types.h -+++ linux/include/asm-nios2nommu/kmap_types.h -@@ -0,0 +1,43 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _ASM_KMAP_TYPES_H -+#define _ASM_KMAP_TYPES_H -+ -+enum km_type { -+	KM_BOUNCE_READ, -+	KM_SKB_SUNRPC_DATA, -+	KM_SKB_DATA_SOFTIRQ, -+	KM_USER0, -+	KM_USER1, -+	KM_BIO_SRC_IRQ, -+	KM_BIO_DST_IRQ, -+	KM_PTE0, -+	KM_PTE1, -+	KM_IRQ0, -+	KM_IRQ1, -+	KM_SOFTIRQ0, -+	KM_SOFTIRQ1, -+	KM_TYPE_NR -+}; -+ -+#endif ---- linux/include/asm-nios2nommu/linkage.h -+++ linux/include/asm-nios2nommu/linkage.h -@@ -0,0 +1,29 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __ASM_LINKAGE_H -+#define __ASM_LINKAGE_H -+ -+#define __ALIGN .align 3 -+#define __ALIGN_STR ".align 3" -+ -+#endif ---- linux/include/asm-nios2nommu/linux_logo.h -+++ linux/include/asm-nios2nommu/linux_logo.h -@@ -0,0 +1,953 @@ -+/* $Id: linux_logo.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $ -+ * include/asm-nios/linux_logo.h: This is a linux logo -+ *                                 to be displayed on boot. -+ * -+ * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu) -+ * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz) -+ * Copyright (C) 2004 Micrtronix Datacom Ltd. -+ * -+ * You can put anything here, but: -+ * LINUX_LOGO_COLORS has to be less than 224 -+ * image size has to be 80x80 -+ * values have to start from 0x20 -+ * (i.e. RGB(linux_logo_red[0], -+ *	     linux_logo_green[0], -+ *	     linux_logo_blue[0]) is color 0x20) -+ * BW image has to be 80x80 as well, with MS bit -+ * on the left -+ * Serial_console ascii image can be any size, -+ * but should contain %s to display the version -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+  -+#include <linux/init.h> -+#include <linux/version.h> -+ -+#define linux_logo_banner "Linux/NIOS2 version " UTS_RELEASE -+ -+#define __HAVE_ARCH_LINUX_LOGO -+#define __HAVE_ARCH_LINUX_LOGO16 -+ -+#define LINUX_LOGO_COLORS	221 -+ -+#ifdef INCLUDE_LINUX_LOGO_DATA -+ -+unsigned char linux_logo_red[] __initdata = { -+    0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, -+    0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, -+    0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65, -+    0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, -+    0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, -+    0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, -+    0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79, -+    0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7, -+    0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8, -+    0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6, -+    0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee, -+    0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c, -+    0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e, -+    0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c, -+    0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8, -+    0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfe, -+    0xf6, 0xec, 0xfe, 0xd2, 0xea, 0xf5, 0xf2, 0xf2, -+    0xe9, 0xee, 0xf6, 0xf2, 0xee, 0xf6, 0xda, 0xd4, -+    0xfa, 0xca, 0xf2, 0xf6, 0xfe, 0xf2, 0xda, 0xe4, -+    0xf6, 0xdd, 0xf2, 0xee, 0xfa, 0xf0, 0x12, 0x4a, -+    0xd6, 0xf2, 0x8e, 0xf2, 0xf6, 0xf6, 0xb5, 0xf1, -+    0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16, 0x9a, -+    0x2e, 0xd2, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62, -+    0xda, 0xee, 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xe0, -+    0xae, 0xbe, 0xce, 0xe2, 0xa3, 0x8e, 0x6d, 0x8e, -+    0x32, 0xaf, 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82, -+    0x7a, 0x82, 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86, -+    0x6a, 0x52, 0x59, 0x64, 0x5e, -+}; -+ -+unsigned char linux_logo_green[] __initdata = { -+    0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, -+    0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, -+    0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65, -+    0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, -+    0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, -+    0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, -+    0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c, -+    0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae, -+    0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8, -+    0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda, -+    0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca, -+    0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76, -+    0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46, -+    0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b, -+    0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c, -+    0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfa, -+    0xea, 0xd7, 0xf6, 0xbc, 0xda, 0xde, 0xda, 0xe6, -+    0xca, 0xd8, 0xea, 0xe0, 0xcc, 0xf2, 0xce, 0xb2, -+    0xee, 0xa2, 0xd6, 0xe6, 0xf6, 0xd7, 0xc5, 0xb8, -+    0xc6, 0xb9, 0xce, 0xde, 0xce, 0xc6, 0x0e, 0x36, -+    0xae, 0xbe, 0x86, 0xba, 0xbe, 0xe6, 0x8e, 0xc4, -+    0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12, 0x7a, -+    0x20, 0xc6, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46, -+    0xce, 0xd6, 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa6, -+    0x87, 0x96, 0xa2, 0xd6, 0x85, 0x7a, 0x6a, 0x6e, -+    0x22, 0x76, 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53, -+    0x66, 0x62, 0x42, 0x50, 0x56, 0x42, 0x56, 0x56, -+    0x56, 0x3e, 0x51, 0x52, 0x56, -+}; -+ -+unsigned char linux_logo_blue[] __initdata = { -+    0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22, -+    0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56, -+    0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65, -+    0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6, -+    0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6, -+    0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7, -+    0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08, -+    0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f, -+    0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e, -+    0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c, -+    0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f, -+    0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a, -+    0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e, -+    0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b, -+    0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c, -+    0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xea, -+    0xb6, 0x7c, 0xda, 0x8e, 0xa6, 0x87, 0x66, 0xb6, -+    0x81, 0x6a, 0xc6, 0x9a, 0x5b, 0xd2, 0xb6, 0x6a, -+    0xca, 0x45, 0x92, 0xb2, 0xca, 0x52, 0x8a, 0x3e, -+    0x2e, 0x66, 0x66, 0xae, 0x3e, 0x47, 0x06, 0x0e, -+    0x52, 0x36, 0x6a, 0x0e, 0x0e, 0xbe, 0x2c, 0x0e, -+    0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06, 0x2e, -+    0x06, 0x9e, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06, -+    0x9e, 0xae, 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x0a, -+    0x32, 0x2e, 0x2a, 0xb2, 0x43, 0x48, 0x5f, 0x2e, -+    0x06, 0x06, 0x07, 0x24, 0x06, 0x32, 0x06, 0x06, -+    0x46, 0x2e, 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06, -+    0x3a, 0x22, 0x42, 0x34, 0x42, -+}; -+ -+unsigned char linux_logo[] __initdata = { -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, -+    0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, -+    0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d, -+    0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24, -+    0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25, -+    0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, -+    0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c, -+    0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33, -+    0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31, -+    0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34, -+    0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36, -+    0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22, -+    0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25, -+    0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22, -+    0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36, -+    0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36, -+    0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36, -+    0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36, -+    0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36, -+    0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21, -+    0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23, -+    0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21, -+    0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21, -+    0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b, -+    0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26, -+    0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d, -+    0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32, -+    0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a, -+    0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b, -+    0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37, -+    0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58, -+    0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21, -+    0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35, -+    0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, -+    0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22, -+    0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67, -+    0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36, -+    0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e, -+    0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73, -+    0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78, -+    0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21, -+    0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79, -+    0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c, -+    0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24, -+    0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71, -+    0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36, -+    0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26, -+    0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21, -+    0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89, -+    0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36, -+    0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32, -+    0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21, -+    0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e, -+    0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23, -+    0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31, -+    0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22, -+    0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63, -+    0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c, -+    0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51, -+    0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21, -+    0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97, -+    0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98, -+    0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, -+    0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32, -+    0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50, -+    0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48, -+    0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23, -+    0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98, -+    0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50, -+    0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b, -+    0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b, -+    0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, -+    0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48, -+    0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, -+    0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33, -+    0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34, -+    0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48, -+    0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52, -+    0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c, -+    0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c, -+    0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b, -+    0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93, -+    0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26, -+    0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28, -+    0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99, -+    0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93, -+    0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32, -+    0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36, -+    0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48, -+    0x48, 0x48, 0x48, 0x9b, 0x99, 0x9f, 0x52, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, -+    0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30, -+    0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, -+    0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36, -+    0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48, -+    0x47, 0x9f, 0x48, 0x48, 0x48, 0xa0, 0xa1, 0xa2, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36, -+    0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f, -+    0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36, -+    0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48, -+    0xa3, 0xa4, 0x48, 0x48, 0x9f, 0xa5, 0xa6, 0x9f, -+    0x48, 0x48, 0x48, 0xa2, 0xa7, 0x47, 0x48, 0x48, -+    0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23, -+    0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d, -+    0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25, -+    0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0xa8, 0xa1, 0x48, 0x48, 0x9f, 0xa9, 0xa6, 0x9f, -+    0x48, 0x48, 0xaa, 0xa1, 0xa5, 0x9f, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30, -+    0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32, -+    0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a, -+    0x36, 0x24, 0x4f, 0x48, 0x52, 0x52, 0x48, 0x48, -+    0xab, 0xac, 0xa0, 0x48, 0xad, 0xa6, 0xa6, 0x9f, -+    0x48, 0xa2, 0xa9, 0xa6, 0xa2, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30, -+    0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21, -+    0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25, -+    0x36, 0x3a, 0x48, 0x48, 0xae, 0xaf, 0x48, 0x48, -+    0xad, 0xac, 0xa1, 0x9f, 0xa2, 0xa9, 0xa9, 0xa2, -+    0x48, 0xab, 0x78, 0xa7, 0x48, 0x48, 0x48, 0x48, -+    0x9f, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21, -+    0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36, -+    0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21, -+    0x23, 0x43, 0x48, 0x48, 0xb0, 0xb1, 0xb2, 0x9f, -+    0x48, 0xb3, 0xa5, 0xb3, 0xab, 0xa9, 0xa9, 0xb3, -+    0xb4, 0xa9, 0xb5, 0xb0, 0x48, 0x48, 0xa0, 0xa5, -+    0xa1, 0xad, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36, -+    0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36, -+    0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36, -+    0x2e, 0x9b, 0x48, 0x48, 0x48, 0xb6, 0xb7, 0xa4, -+    0xa2, 0xa7, 0xb5, 0x78, 0x6f, 0x6f, 0x6e, 0x6f, -+    0xa9, 0xb5, 0xab, 0x48, 0x9f, 0xab, 0xa9, 0xa1, -+    0xaa, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36, -+    0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36, -+    0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36, -+    0x54, 0x48, 0x48, 0x48, 0x48, 0xa2, 0xa8, 0xa1, -+    0xa5, 0xa6, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, -+    0x6f, 0x78, 0xa5, 0xa0, 0xa0, 0x78, 0xa6, 0xa2, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36, -+    0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36, -+    0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21, -+    0x43, 0x48, 0x4b, 0xa2, 0x9f, 0x48, 0xa2, 0xa1, -+    0xb8, 0x6e, 0x6e, 0xb5, 0x78, 0x6f, 0x78, 0x78, -+    0x6e, 0x6f, 0x78, 0xb5, 0xa6, 0xa1, 0xa0, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21, -+    0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25, -+    0x52, 0x48, 0xa3, 0xb1, 0xb6, 0xb3, 0xaa, 0xac, -+    0x68, 0x68, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, -+    0x78, 0x6f, 0x6f, 0xb5, 0xa6, 0xb4, 0x48, 0x9f, -+    0xb4, 0xb4, 0xa2, 0x9f, 0x48, 0x48, 0x4f, 0x21, -+    0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a, -+    0x47, 0x48, 0xa2, 0xb6, 0xaf, 0xb9, 0xba, 0x68, -+    0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x78, -+    0x6f, 0x6f, 0xa6, 0x6f, 0xb5, 0xa0, 0xaa, 0xa6, -+    0xa6, 0xa9, 0xb2, 0xb3, 0x48, 0x48, 0x4c, 0x22, -+    0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, -+    0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39, -+    0x9b, 0x48, 0x48, 0x48, 0xb0, 0xb0, 0xba, 0xb8, -+    0x68, 0x68, 0x69, 0x78, 0x6f, 0xb5, 0x6f, 0xb5, -+    0x78, 0x78, 0x78, 0x78, 0x78, 0xa5, 0xbb, 0xa9, -+    0xa5, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23, -+    0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, -+    0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31, -+    0x9b, 0x48, 0x48, 0x48, 0x48, 0x9f, 0xac, 0x68, -+    0xbc, 0x6e, 0x6e, 0x6e, 0xb5, 0x6f, 0x6e, 0x6f, -+    0x6f, 0x78, 0x78, 0xb5, 0xb5, 0xa5, 0x9f, 0x9f, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22, -+    0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, -+    0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d, -+    0x9b, 0x48, 0x48, 0xb0, 0xaa, 0xb3, 0xbd, 0xb8, -+    0xb8, 0x68, 0x6e, 0x6e, 0xb5, 0x6f, 0x78, 0x6e, -+    0x78, 0x6f, 0x78, 0x78, 0xb5, 0xa9, 0xa2, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36, -+    0x24, 0x27, 0xbe, 0x24, 0x25, 0x28, 0x21, 0x36, -+    0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25, -+    0x39, 0x4d, 0xbf, 0x84, 0x81, 0x57, 0x21, 0x39, -+    0x52, 0x48, 0x48, 0x62, 0xb1, 0xc0, 0xc1, 0xc1, -+    0xb8, 0xb8, 0x68, 0xbc, 0x6e, 0x6e, 0x6e, 0x78, -+    0x78, 0x78, 0x78, 0x6e, 0x78, 0xa9, 0xa0, 0xab, -+    0xb3, 0xa2, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28, -+    0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30, -+    0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30, -+    0x2d, 0xc2, 0x7a, 0xc3, 0xc4, 0xc4, 0x7f, 0x22, -+    0x51, 0x52, 0x48, 0x48, 0xb0, 0xaa, 0xa8, 0xbd, -+    0x68, 0xb8, 0xb8, 0x68, 0x68, 0x6e, 0x6e, 0x6f, -+    0x6e, 0x6e, 0xb5, 0x6e, 0x78, 0xab, 0xab, 0xb5, -+    0x78, 0xa6, 0xb3, 0xc5, 0xac, 0xac, 0xc6, 0x61, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32, -+    0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31, -+    0x4d, 0x91, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0x5a, -+    0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0xb0, 0x64, -+    0xc1, 0xb8, 0xb8, 0xb8, 0x68, 0x71, 0x6e, 0x6e, -+    0x6f, 0x71, 0x6f, 0x6f, 0xa6, 0xa0, 0x9f, 0xb4, -+    0xb4, 0xa0, 0xa1, 0xb7, 0xc7, 0x69, 0x66, 0xc8, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25, -+    0x83, 0xc9, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a, -+    0x60, 0x85, 0xca, 0xcb, 0xc4, 0xc4, 0xc4, 0x82, -+    0x86, 0x36, 0x32, 0x3f, 0xa2, 0xa4, 0xa8, 0xa9, -+    0xb8, 0xb8, 0xb8, 0xb8, 0x68, 0x6e, 0x6e, 0x6e, -+    0x6e, 0x71, 0x6f, 0x71, 0xa6, 0xb4, 0x9f, 0x9f, -+    0x48, 0x48, 0x48, 0xcc, 0xc3, 0xc7, 0xcd, 0xce, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57, -+    0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x23, 0x30, 0x31, 0xcf, 0x91, 0x7e, 0x90, 0x90, -+    0x8b, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0x5d, 0xd0, 0x36, 0x24, 0xd1, 0xb1, 0xaf, 0xaa, -+    0xba, 0xb8, 0x68, 0x68, 0x68, 0x71, 0x6e, 0x6e, -+    0x6e, 0x6f, 0x6e, 0x78, 0xa1, 0xa9, 0xa1, 0xb0, -+    0x9f, 0x9b, 0x99, 0xcc, 0x64, 0x5c, 0x8b, 0xd0, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d, -+    0x82, 0x5c, 0xd2, 0x2a, 0x23, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x24, 0x2b, 0xcf, 0x8b, 0x5b, 0x76, 0x5b, 0x5b, -+    0x7b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc7, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48, -+    0xa2, 0xa8, 0xb7, 0xc1, 0xb8, 0x68, 0x68, 0xbc, -+    0x68, 0x6e, 0xb5, 0xb4, 0xb4, 0xab, 0xb5, 0xa1, -+    0xb0, 0x4f, 0x3f, 0xd3, 0x7b, 0x7b, 0x85, 0x80, -+    0xbe, 0x36, 0x36, 0x36, 0x21, 0xd4, 0x7e, 0x7b, -+    0x64, 0x64, 0xd5, 0x35, 0x24, 0x21, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x26, 0x31, 0xd6, 0x5b, 0x64, 0xc3, 0xc3, 0xcb, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0x66, 0xd7, 0x36, 0x36, 0x36, 0x2c, 0x4b, -+    0xd8, 0xd9, 0xb3, 0xa8, 0xbd, 0xbd, 0xbd, 0xbd, -+    0xa9, 0xab, 0xb3, 0xa5, 0xa2, 0x9f, 0xa2, 0xa1, -+    0x6a, 0x9a, 0x3f, 0xda, 0x76, 0x76, 0x7a, 0x63, -+    0xdb, 0xdc, 0x86, 0xdc, 0xdd, 0x90, 0x5b, 0x64, -+    0xc3, 0xc3, 0xde, 0x2d, 0x27, 0x23, 0x21, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x26, 0x2d, 0x91, 0x5b, 0x64, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc7, 0x83, 0xce, 0x36, 0x36, 0x36, 0x30, -+    0xb1, 0xd9, 0x48, 0xa1, 0xb2, 0xb0, 0xb0, 0xb3, -+    0xa2, 0x48, 0xa7, 0xbd, 0xa9, 0xa2, 0x48, 0x9f, -+    0xaa, 0x9a, 0x3f, 0xb1, 0x5b, 0x7b, 0xdf, 0x85, -+    0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xc3, 0xc4, -+    0xc4, 0xcb, 0x5d, 0xd5, 0x39, 0x26, 0x23, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x26, 0x2d, 0xe0, 0xdf, 0x64, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc7, 0x88, 0x36, 0x36, 0x36, 0x36, -+    0x2d, 0x9b, 0x48, 0xb9, 0xaf, 0xa2, 0xa2, 0xb9, -+    0xa8, 0x9f, 0x48, 0xa7, 0xb7, 0xd9, 0x48, 0x48, -+    0x9b, 0x45, 0x3f, 0xe1, 0x6d, 0x7b, 0xca, 0xdf, -+    0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc3, 0xe2, 0x37, 0x35, 0x26, 0x23, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x26, 0x2e, 0xe0, 0x7a, 0x7b, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc7, 0x72, 0x73, 0x36, 0x36, 0x36, -+    0x24, 0x52, 0x48, 0xa3, 0xaf, 0x9f, 0x48, 0xb6, -+    0xaf, 0xa2, 0x48, 0x9f, 0xe3, 0xd8, 0x48, 0x48, -+    0x48, 0x46, 0x42, 0xd6, 0x7a, 0x7b, 0x64, 0x7b, -+    0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xc3, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xcb, 0x64, 0xe2, 0x4d, 0x2c, 0x27, -+    0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x25, 0x31, 0xe4, 0x8b, 0x7b, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc7, 0x89, 0xbe, 0x36, 0x36, -+    0x32, 0x47, 0x48, 0x4f, 0xa0, 0x48, 0x48, 0xe3, -+    0x92, 0x9f, 0x48, 0x9f, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xc3, 0xcb, -+    0xc3, 0x64, 0x64, 0xc3, 0xc3, 0xcb, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x5d, 0xe5, 0x2c, -+    0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x25, 0x31, 0xe4, 0x85, 0x7b, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x57, 0x27, 0x4d, -+    0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x99, 0x34, 0xbe, 0xdb, 0x7a, 0x7b, 0xc3, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xe4, -+    0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, -+    0x26, 0x2d, 0xe4, 0x85, 0x7b, 0xcb, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc7, 0x5f, 0x92, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44, -+    0x35, 0x36, 0xce, 0xdd, 0x7a, 0x7b, 0xcb, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0xc3, 0xe1, -+    0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, -+    0x30, 0x2f, 0xd6, 0x8b, 0x7b, 0xcb, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x89, 0x45, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25, -+    0x36, 0x36, 0x61, 0xdb, 0x6d, 0x64, 0xcb, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0xdf, 0xe5, -+    0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, -+    0x33, 0xe6, 0x63, 0xdf, 0xc3, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x72, 0x81, 0xe7, -+    0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, -+    0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36, -+    0x36, 0x36, 0xe8, 0x8f, 0x6d, 0x64, 0xcb, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc3, 0xca, 0x8b, 0xcf, 0x2c, -+    0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, -+    0x35, 0x96, 0x75, 0xca, 0xc3, 0xcb, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0x81, 0xdb, -+    0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b, -+    0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x73, 0xdb, 0x7a, 0x7b, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0x64, 0x76, 0x7a, 0x91, 0xd5, 0x31, 0x30, -+    0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, -+    0x39, 0x97, 0x75, 0xdf, 0x7b, 0x64, 0xc3, 0xc3, -+    0xcb, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x7b, 0x7a, 0xe9, -+    0xea, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30, -+    0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x21, 0xea, 0xdd, 0x8b, 0x7b, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x64, 0x64, -+    0x76, 0x85, 0xe0, 0xd5, 0x34, 0x2b, 0x27, 0x28, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, -+    0x33, 0xeb, 0x63, 0x7e, 0x7a, 0x6d, 0xdf, 0x5b, -+    0x76, 0x7b, 0x64, 0x64, 0xc3, 0xcb, 0xc4, 0xc4, -+    0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x76, 0x85, 0xdb, -+    0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x21, 0xec, 0xdd, 0x75, 0x76, 0xc3, 0xc4, -+    0xc4, 0xc4, 0xcb, 0xc3, 0x64, 0x76, 0xdf, 0x8b, -+    0xd6, 0xd5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, -+    0x27, 0x31, 0xed, 0xeb, 0xdd, 0x74, 0x63, 0x90, -+    0x7e, 0x75, 0x8b, 0x6d, 0xdf, 0x76, 0x64, 0xc3, -+    0xcb, 0xcb, 0xcb, 0xcb, 0x64, 0x7a, 0x84, 0xee, -+    0x79, 0xbe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, -+    0x36, 0x21, 0xea, 0xee, 0x63, 0x6d, 0x7b, 0x64, -+    0xcb, 0xc3, 0x64, 0x7b, 0xdf, 0x75, 0x63, 0x96, -+    0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x28, 0x27, 0x35, 0x2d, 0x41, 0xd5, 0xe7, 0x8f, -+    0xdb, 0xdd, 0xe9, 0x74, 0x84, 0x90, 0x85, 0x6d, -+    0x5b, 0x7b, 0x7b, 0xca, 0x6d, 0x90, 0xdb, 0xef, -+    0xec, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30, -+    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36, -+    0x36, 0x21, 0xd4, 0x80, 0xe9, 0x7e, 0x6d, 0x76, -+    0xca, 0x76, 0x6d, 0x85, 0x63, 0xdb, 0xd5, 0x34, -+    0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f, -+    0x41, 0xf0, 0xf1, 0x6c, 0x80, 0xee, 0xdb, 0x74, -+    0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xef, 0x79, -+    0xe8, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d, -+    0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38, -+    0x4d, 0x37, 0xf2, 0xf3, 0x8f, 0x74, 0x63, 0x7e, -+    0x75, 0x7e, 0x63, 0xe9, 0x88, 0xe6, 0x31, 0x2a, -+    0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30, -+    0x33, 0x39, 0x2e, 0x51, 0x41, 0xd2, 0x6c, 0xf3, -+    0x80, 0xee, 0xee, 0xee, 0xf4, 0xf3, 0xd7, 0xf5, -+    0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27, -+    0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a, -+    0x2b, 0x34, 0xf6, 0xec, 0xf7, 0x8f, 0xdd, 0xe9, -+    0xe9, 0xdd, 0xee, 0x6c, 0x41, 0x39, 0x27, 0x28, -+    0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, -+    0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41, -+    0xf8, 0xd7, 0x79, 0x79, 0x79, 0xec, 0xf9, 0x51, -+    0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22, -+    0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23, -+    0x24, 0x2a, 0x31, 0xfa, 0xea, 0x79, 0xf3, 0x80, -+    0xf7, 0xdc, 0xfb, 0x2f, 0x35, 0x26, 0x23, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b, -+    0x31, 0x2f, 0xf6, 0xfa, 0xfa, 0x2f, 0x2e, 0x33, -+    0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x21, 0x28, 0x27, 0x35, 0x34, 0xfa, 0xfa, 0xfa, -+    0xfc, 0xf6, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28, -+    0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28, -+    0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35, -+    0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, -+    0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24, -+    0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+    0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, -+}; -+ -+unsigned char linux_logo16[1]; -+ -+#endif /* INCLUDE_LINUX_LOGO_DATA */ -+ -+#include <linux/linux_logo.h> -+ ---- linux/include/asm-nios2nommu/local.h -+++ linux/include/asm-nios2nommu/local.h -@@ -0,0 +1,28 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2NOMMU_LOCAL_H -+#define __NIOS2NOMMU_LOCAL_H -+ -+#include <asm-generic/local.h> -+ -+#endif /* __NIOS2NOMMU_LOCAL_H */ ---- linux/include/asm-nios2nommu/mc146818rtc.h -+++ linux/include/asm-nios2nommu/mc146818rtc.h -@@ -0,0 +1,29 @@ -+/* -+ * Machine dependent access functions for RTC registers. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef _NIOS2_MC146818RTC_H -+#define _NIOS2_MC146818RTC_H -+ -+/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */ -+ -+#endif /* _NIOS2_MC146818RTC_H */ ---- linux/include/asm-nios2nommu/mman.h -+++ linux/include/asm-nios2nommu/mman.h -@@ -0,0 +1,68 @@ -+/* -+ * Copied from the m68k port. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2_MMAN_H__ -+#define __NIOS2_MMAN_H__ -+ -+#define PROT_READ	0x1		/* page can be read */ -+#define PROT_WRITE	0x2		/* page can be written */ -+#define PROT_EXEC	0x4		/* page can be executed */ -+#define PROT_SEM	0x8		/* page may be used for atomic ops */ -+#define PROT_NONE	0x0		/* page can not be accessed */ -+#define PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */ -+#define PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */ -+ -+#define MAP_SHARED	0x01		/* Share changes */ -+#define MAP_PRIVATE	0x02		/* Changes are private */ -+#define MAP_TYPE	0x0f		/* Mask for type of mapping */ -+#define MAP_FIXED	0x10		/* Interpret addr exactly */ -+#define MAP_ANONYMOUS	0x20		/* don't use a file */ -+ -+#define MAP_GROWSDOWN	0x0100		/* stack-like segment */ -+#define MAP_DENYWRITE	0x0800		/* ETXTBSY */ -+#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */ -+#define MAP_LOCKED	0x2000		/* pages are locked */ -+#define MAP_NORESERVE	0x4000		/* don't check for reservations */ -+#define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */ -+#define MAP_NONBLOCK	0x10000		/* do not block on IO */ -+ -+#define MS_ASYNC	1		/* sync memory asynchronously */ -+#define MS_INVALIDATE	2		/* invalidate the caches */ -+#define MS_SYNC		4		/* synchronous memory sync */ -+ -+#define MCL_CURRENT	1		/* lock all current mappings */ -+#define MCL_FUTURE	2		/* lock all future mappings */ -+ -+#define MADV_NORMAL	0x0		/* default page-in behavior */ -+#define MADV_RANDOM	0x1		/* page-in minimum required */ -+#define MADV_SEQUENTIAL	0x2		/* read-ahead aggressively */ -+#define MADV_WILLNEED	0x3		/* pre-fault pages */ -+#define MADV_DONTNEED	0x4		/* discard these pages */ -+ -+/* compatibility flags */ -+#define MAP_ANON	MAP_ANONYMOUS -+#define MAP_FILE	0 -+ -+#endif /* __NIOS2_MMAN_H__ */ -+ ---- linux/include/asm-nios2nommu/mmu_context.h -+++ linux/include/asm-nios2nommu/mmu_context.h -@@ -0,0 +1,58 @@ -+/* -+ * -+ * Taken from the m68knommu. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2NOMMU_MMU_CONTEXT_H -+#define __NIOS2NOMMU_MMU_CONTEXT_H -+ -+#include <linux/config.h> -+#include <asm/setup.h> -+#include <asm/page.h> -+#include <asm/pgalloc.h> -+ -+static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) -+{ -+} -+ -+extern inline int -+init_new_context(struct task_struct *tsk, struct mm_struct *mm) -+{ -+	// mm->context = virt_to_phys(mm->pgd); -+	return(0); -+} -+ -+#define destroy_context(mm)		do { } while(0) -+ -+static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk) -+{ -+} -+ -+#define deactivate_mm(tsk,mm)	do { } while (0) -+ -+extern inline void activate_mm(struct mm_struct *prev_mm, -+			       struct mm_struct *next_mm) -+{ -+} -+ -+#endif ---- linux/include/asm-nios2nommu/mmu.h -+++ linux/include/asm-nios2nommu/mmu.h -@@ -0,0 +1,36 @@ -+/* -+ * -+ * Taken from the m68knommu. -+ *  -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2NOMMU_MMU_H -+#define __NIOS2NOMMU_MMU_H -+ -+/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */ -+ -+typedef struct { -+	struct vm_list_struct	*vmlist; -+	unsigned long		end_brk; -+} mm_context_t; -+ -+#endif /* __NIOS2NOMMU_MMU_H */ ---- linux/include/asm-nios2nommu/module.h -+++ linux/include/asm-nios2nommu/module.h -@@ -0,0 +1,36 @@ -+#ifndef _NIOS2_MODULE_H -+#define _NIOS2_MODULE_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/module.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+struct mod_arch_specific -+{ -+}; -+ -+#define Elf_Shdr Elf32_Shdr -+#define Elf_Sym Elf32_Sym -+#define Elf_Ehdr Elf32_Ehdr -+ -+#endif /* _NIOS_MODULE_H */ ---- linux/include/asm-nios2nommu/msgbuf.h -+++ linux/include/asm-nios2nommu/msgbuf.h -@@ -0,0 +1,56 @@ -+/* -+ * Taken from the m68k. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2_MSGBUF_H -+#define _NIOS2_MSGBUF_H -+ -+/*  -+ * The msqid64_ds structure for nios2 architecture. -+ * Note extra padding because this structure is passed back and forth -+ * between kernel and user space. -+ * -+ * Pad space is left for: -+ * - 64-bit time_t to solve y2038 problem -+ * - 2 miscellaneous 32-bit values -+ */ -+ -+struct msqid64_ds { -+	struct ipc64_perm msg_perm; -+	__kernel_time_t msg_stime;	/* last msgsnd time */ -+	unsigned long	__unused1; -+	__kernel_time_t msg_rtime;	/* last msgrcv time */ -+	unsigned long	__unused2; -+	__kernel_time_t msg_ctime;	/* last change time */ -+	unsigned long	__unused3; -+	unsigned long  msg_cbytes;	/* current number of bytes on queue */ -+	unsigned long  msg_qnum;	/* number of messages in queue */ -+	unsigned long  msg_qbytes;	/* max number of bytes on queue */ -+	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */ -+	__kernel_pid_t msg_lrpid;	/* last receive pid */ -+	unsigned long  __unused4; -+	unsigned long  __unused5; -+}; -+ -+#endif /* _NIOS2_MSGBUF_H */ -+ ---- linux/include/asm-nios2nommu/namei.h -+++ linux/include/asm-nios2nommu/namei.h -@@ -0,0 +1,36 @@ -+/* -+ * linux/include/asm-nios/namei.h -+ * Moved from m68k version -+ * Included from linux/fs/namei.c -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef __NIOS2_NAMEI_H -+#define __NIOS2_NAMEI_H -+ -+/* This dummy routine maybe changed to something useful -+ * for /usr/gnemul/ emulation stuff. -+ * Look at asm-sparc/namei.h for details. -+ */ -+ -+#define __emul_prefix() NULL -+ -+#endif ---- linux/include/asm-nios2nommu/ndma.h -+++ linux/include/asm-nios2nommu/ndma.h -@@ -0,0 +1,64 @@ -+#ifndef __NDMA_H__ -+  #define __NDMA_H__ -+ -+    #ifndef __ASSEMBLY__ -+ -+// DMA Registers -+typedef volatile struct -+{ -+  int np_dmastatus;        // status register -+  int np_dmareadaddress;   // read address -+  int np_dmawriteaddress;  // write address -+  int np_dmalength;        // length in bytes -+  int np_dmareserved1;     // reserved -+  int np_dmareserved2;     // reserved -+  int np_dmacontrol;       // control register -+  int np_dmareserved3;     // control register alternate -+} np_dma; -+ -+// DMA Register Bits -+enum -+{ -+  np_dmacontrol_byte_bit  = 0, // Byte transaction -+  np_dmacontrol_hw_bit    = 1, // Half-word transaction -+  np_dmacontrol_word_bit  = 2, // Word transaction -+  np_dmacontrol_go_bit    = 3, // enable execution -+  np_dmacontrol_i_en_bit  = 4, // enable interrupt -+  np_dmacontrol_reen_bit  = 5, // Enable read end-of-packet -+  np_dmacontrol_ween_bit  = 6, // Enable write end-of-packet -+  np_dmacontrol_leen_bit  = 7, // Enable length=0 transaction end -+  np_dmacontrol_rcon_bit  = 8, // Read from a fixed address -+  np_dmacontrol_wcon_bit  = 9, // Write to a fixed address -+  np_dmacontrol_doubleword_bit = 10, // Double-word transaction -+  np_dmacontrol_quadword_bit = 11, // Quad-word transaction -+  -+  np_dmastatus_done_bit   = 0, // 1 when done.  Status write clears. -+  np_dmastatus_busy_bit   = 1, // 1 when busy. -+  np_dmastatus_reop_bit   = 2, // read-eop received -+  np_dmastatus_weop_bit   = 3, // write-eop received -+  np_dmastatus_len_bit    = 4, // requested length transacted -+  -+  np_dmacontrol_byte_mask = (1 << 0), // Byte transaction -+  np_dmacontrol_hw_mask   = (1 << 1), // Half-word transaction -+  np_dmacontrol_word_mask = (1 << 2), // Word transaction -+  np_dmacontrol_go_mask   = (1 << 3), // enable execution -+  np_dmacontrol_i_en_mask = (1 << 4), // enable interrupt -+  np_dmacontrol_reen_mask = (1 << 5), // Enable read end-of-packet -+  np_dmacontrol_ween_mask = (1 << 6), // Enable write end-of-packet -+  np_dmacontrol_leen_mask = (1 << 7), // Enable length=0 transaction end -+  np_dmacontrol_rcon_mask = (1 << 8), // Read from a fixed address -+  np_dmacontrol_wcon_mask = (1 << 9), // Write to a fixed address -+  np_dmacontrol_doubleword_mask = (1 << 10), // Double-word transaction -+  np_dmacontrol_quadword_mask = (1 << 11), // Quad-word transaction -+  -+  np_dmastatus_done_mask  = (1 << 0), // 1 when done.  Status write clears. -+  np_dmastatus_busy_mask  = (1 << 1), // 1 when busy. -+  np_dmastatus_reop_mask  = (1 << 2), // read-eop received -+  np_dmastatus_weop_mask  = (1 << 3), // write-eop received -+  np_dmastatus_len_mask   = (1 << 4), // requested length transacted -+}; -+ -+    #endif /* __ASSEMBLY__ */ -+ -+#endif -+/* End of File */ ---- linux/include/asm-nios2nommu/nios.h -+++ linux/include/asm-nios2nommu/nios.h -@@ -0,0 +1,7 @@ -+#ifndef __NIOS_H__ -+#define __NIOS_H__ -+ -+#include "nios2_system.h" -+ -+#endif -+ ---- linux/include/asm-nios2nommu/page.h -+++ linux/include/asm-nios2nommu/page.h -@@ -0,0 +1,135 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2_PAGE_H -+#define _NIOS2_PAGE_H -+ -+/* copied from m68knommu arch */ -+// #include <linux/config.h> -+ -+/* PAGE_SHIFT determines the page size */ -+ -+#define PAGE_SHIFT	(12) -+#define PAGE_SIZE	(1UL << PAGE_SHIFT) -+#define PAGE_MASK	(~(PAGE_SIZE-1)) -+ -+#ifdef __KERNEL__ -+ -+#include <asm/setup.h> -+ -+#if PAGE_SHIFT < 13 -+#define THREAD_SIZE (8192) -+#else -+#define THREAD_SIZE PAGE_SIZE -+#endif -+  -+#ifndef __ASSEMBLY__ -+  -+#define get_user_page(vaddr)		__get_free_page(GFP_KERNEL) -+#define free_user_page(page, addr)	free_page(addr) -+ -+#define clear_page(page)	memset((page), 0, PAGE_SIZE) -+#define copy_page(to,from)	memcpy((to), (from), PAGE_SIZE) -+ -+#define clear_user_page(page, vaddr, pg)	clear_page(page) -+#define copy_user_page(to, from, vaddr, pg)	copy_page(to, from) -+ -+/* -+ * These are used to make use of C type-checking.. -+ */ -+typedef struct { unsigned long pte; } pte_t; -+typedef struct { unsigned long pmd[16]; } pmd_t; -+typedef struct { unsigned long pgd; } pgd_t; -+typedef struct { unsigned long pgprot; } pgprot_t; -+ -+#define pte_val(x)	((x).pte) -+#define pmd_val(x)	((&x)->pmd[0]) -+#define pgd_val(x)	((x).pgd) -+#define pgprot_val(x)	((x).pgprot) -+ -+#define __pte(x)	((pte_t) { (x) } ) -+#define __pmd(x)	((pmd_t) { (x) } ) -+#define __pgd(x)	((pgd_t) { (x) } ) -+#define __pgprot(x)	((pgprot_t) { (x) } ) -+ -+/* to align the pointer to the (next) page boundary */ -+#define PAGE_ALIGN(addr)	(((addr)+PAGE_SIZE-1)&PAGE_MASK) -+ -+/* Pure 2^n version of get_order */ -+extern __inline__ int get_order(unsigned long size) -+{ -+	int order; -+ -+	size = (size-1) >> (PAGE_SHIFT-1); -+	order = -1; -+	do { -+		size >>= 1; -+		order++; -+	} while (size); -+	return order; -+} -+ -+extern unsigned long memory_start; -+extern unsigned long memory_end; -+ -+#endif /* !__ASSEMBLY__ */ -+#include <asm/nios.h> -+#define PAGE_OFFSET		((int)(nasys_program_mem)) -+ -+#ifndef __ASSEMBLY__ -+ -+#define __pa(vaddr)		virt_to_phys((void *)vaddr) -+#define __va(paddr)		phys_to_virt((unsigned long)paddr) -+ -+#define MAP_NR(addr)		(((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT) -+ -+#define virt_to_pfn(kaddr)	(__pa(kaddr) >> PAGE_SHIFT) -+#define pfn_to_virt(pfn)	__va((pfn) << PAGE_SHIFT) -+ -+#define virt_to_page(addr)	(mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)) -+#define page_to_virt(page)	((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET) -+#define VALID_PAGE(page)	((page - mem_map) < max_mapnr) -+ -+#define pfn_to_page(pfn)	virt_to_page(pfn_to_virt(pfn)) -+#define page_to_pfn(page)	virt_to_pfn(page_to_virt(page)) -+ -+#define	virt_addr_valid(kaddr)	(((void *)(kaddr) >= (void *)PAGE_OFFSET) && \ -+				((void *)(kaddr) < (void *)memory_end)) -+ -+#ifdef CONFIG_NO_KERNEL_MSG -+#define	BUG_PRINT() -+#else -+#define	BUG_PRINT() printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__) -+#endif -+ -+#ifdef na_cpu_oci_core -+#define BUG_PANIC()	asm volatile ("break") /* drop to debugger */ -+#else -+// #define BUG_PANIC()	while(1) -+#define BUG_PANIC()	panic("BUG!") -+#endif -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _NIOS2_PAGE_H */ ---- linux/include/asm-nios2nommu/param.h -+++ linux/include/asm-nios2nommu/param.h -@@ -0,0 +1,49 @@ -+#ifndef _NIOS_PARAM_H -+#define _NIOS_PARAM_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/param.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#ifndef HZ -+#define HZ 100 -+#endif -+ -+#ifdef __KERNEL__ -+#define	USER_HZ		HZ -+#define	CLOCKS_PER_SEC	(USER_HZ) -+#endif -+ -+#define EXEC_PAGESIZE	4096 -+ -+#ifndef NGROUPS -+#define NGROUPS		32 -+#endif -+ -+#ifndef NOGROUP -+#define NOGROUP		(-1) -+#endif -+ -+#define MAXHOSTNAMELEN	64	/* max length of hostname */ -+ -+#endif ---- linux/include/asm-nios2nommu/pci.h -+++ linux/include/asm-nios2nommu/pci.h -@@ -0,0 +1,75 @@ -+#ifndef _ASM_NIOS2NOMMU_PCI_H -+#define _ASM_NIOS2NOMMU_PCI_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/pci.h -+ * -+ * Derived from asm-m68k/pci_m68k.h -+ *              - m68k specific PCI declarations, by Wout Klaren. -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/scatterlist.h> -+ -+struct pci_ops; -+ -+/* -+ * Structure with hardware dependent information and functions of the -+ * PCI bus. -+ */ -+ -+struct pci_bus_info -+{ -+	/* -+	 * Resources of the PCI bus. -+	 */ -+ -+	struct resource mem_space; -+	struct resource io_space; -+ -+	/* -+	 * System dependent functions. -+	 */ -+ -+	struct pci_ops *m68k_pci_ops; -+ -+	void (*fixup)(int pci_modify); -+	void (*conf_device)(struct pci_dev *dev); -+}; -+ -+#define pcibios_assign_all_busses()	0 -+ -+extern inline void pcibios_set_master(struct pci_dev *dev) -+{ -+	/* No special bus mastering setup handling */ -+} -+ -+extern inline void pcibios_penalize_isa_irq(int irq) -+{ -+	/* We don't do dynamic PCI IRQ allocation */ -+} -+ -+/* The PCI address space does equal the physical memory -+ * address space.  The networking and block device layers use -+ * this boolean for bounce buffer decisions. -+ */ -+#define PCI_DMA_BUS_IS_PHYS	(1) -+ -+#endif /* _ASM_NIOS2NOMMU_PCI_H */ ---- linux/include/asm-nios2nommu/percpu.h -+++ linux/include/asm-nios2nommu/percpu.h -@@ -0,0 +1,30 @@ -+#ifndef __ARCH_NIOS2NOMMU_PERCPU__ -+#define __ARCH_NIOS2NOMMU_PERCPU__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/percpu.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm-generic/percpu.h> -+ -+#endif /* __ARCH_NIOS2NOMMU_PERCPU__ */ ---- linux/include/asm-nios2nommu/pgalloc.h -+++ linux/include/asm-nios2nommu/pgalloc.h -@@ -0,0 +1,32 @@ -+#ifndef _NIOS2NOMMU_PGALLOC_H -+#define _NIOS2NOMMU_PGALLOC_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/pgalloc.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/setup.h> -+ -+#define check_pgt_cache()	do { } while (0) -+ -+#endif /* _NIOS2NOMMU_PGALLOC_H */ ---- linux/include/asm-nios2nommu/pgtable.h -+++ linux/include/asm-nios2nommu/pgtable.h -@@ -0,0 +1,104 @@ -+#ifndef _NIOS_PGTABLE_H -+#define _NIOS_PGTABLE_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/pgtable.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+#include <asm-generic/4level-fixup.h> -+ -+//vic - this bit copied from m68knommu version -+// #include <linux/config.h> -+#include <asm/setup.h> -+#include <asm/io.h> -+ -+typedef pte_t *pte_addr_t; -+ -+#define pgd_present(pgd)     	(1)       /* pages are always present on NO_MM */ -+#define pgd_none(pgd)		(0) -+#define pgd_bad(pgd)		(0) -+#define pgd_clear(pgdp) -+#define kern_addr_valid(addr) 	(1) -+#define	pmd_offset(a, b)	((void *)0) -+ -+#define PAGE_NONE		__pgprot(0)    /* these mean nothing to NO_MM */ -+#define PAGE_SHARED		__pgprot(0)    /* these mean nothing to NO_MM */ -+#define PAGE_COPY		__pgprot(0)    /* these mean nothing to NO_MM */ -+#define PAGE_READONLY		__pgprot(0)    /* these mean nothing to NO_MM */ -+#define PAGE_KERNEL		__pgprot(0)    /* these mean nothing to NO_MM */ -+//vic - this bit copied from m68knommu version -+ -+extern void paging_init(void); -+#define swapper_pg_dir ((pgd_t *) 0) -+ -+#define __swp_type(x)		(0) -+#define __swp_offset(x)		(0) -+#define __swp_entry(typ,off)	((swp_entry_t) { ((typ) | ((off) << 7)) }) -+#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.. -+ */ -+#define ZERO_PAGE(vaddr)	(virt_to_page(0)) -+ -+extern unsigned int kobjsize(const void *objp); -+extern int is_in_rom(unsigned long); -+ -+/* -+ * No page table caches to initialise -+ */ -+#define pgtable_cache_init()   do { } while (0) -+#define io_remap_page_range(vma, vaddr, paddr, size, prot) \ -+	remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot) -+ -+extern inline void flush_cache_mm(struct mm_struct *mm) -+{ -+} -+ -+extern inline void flush_cache_range(struct mm_struct *mm, -+				     unsigned long start, -+				     unsigned long end) -+{ -+} -+ -+/* Push the page at kernel virtual address and clear the icache */ -+extern inline void flush_page_to_ram (unsigned long address) -+{ -+} -+ -+/* Push n pages at kernel virtual address and clear the icache */ -+extern inline void flush_pages_to_ram (unsigned long address, int n) -+{ -+} -+ -+/* -+ * All 32bit addresses are effectively valid for vmalloc... -+ * Sort of meaningless for non-VM targets. -+ */ -+#define	VMALLOC_START	0 -+#define	VMALLOC_END	0xffffffff -+ -+#endif /* _NIOS_PGTABLE_H */ ---- linux/include/asm-nios2nommu/pio_struct.h -+++ linux/include/asm-nios2nommu/pio_struct.h -@@ -0,0 +1,14 @@ -+// PIO Peripheral -+ -+// PIO Registers -+typedef volatile struct -+	{ -+	int np_piodata;          // read/write, up to 32 bits -+	int np_piodirection;     // write/readable, up to 32 bits, 1->output bit -+	int np_piointerruptmask; // write/readable, up to 32 bits, 1->enable interrupt -+	int np_pioedgecapture;   // read, up to 32 bits, cleared by any write -+	} np_pio; -+ -+// PIO Routines -+void nr_pio_showhex(int value); // shows low byte on pio named na_seven_seg_pio -+ ---- linux/include/asm-nios2nommu/poll.h -+++ linux/include/asm-nios2nommu/poll.h -@@ -0,0 +1,46 @@ -+#ifndef __NIOS2_POLL_H -+#define __NIOS2_POLL_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/poll.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#define POLLIN		  1 -+#define POLLPRI		  2 -+#define POLLOUT		  4 -+#define POLLERR		  8 -+#define POLLHUP		 16 -+#define POLLNVAL	 32 -+#define POLLRDNORM	 64 -+#define POLLWRNORM	POLLOUT -+#define POLLRDBAND	128 -+#define POLLWRBAND	256 -+#define POLLMSG		0x0400 -+ -+struct pollfd { -+	int fd; -+	short events; -+	short revents; -+}; -+ -+#endif ---- linux/include/asm-nios2nommu/posix_types.h -+++ linux/include/asm-nios2nommu/posix_types.h -@@ -0,0 +1,89 @@ -+#ifndef __ARCH_NIOS2_POSIX_TYPES_H -+#define __ARCH_NIOS2_POSIX_TYPES_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/posix_types.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* -+ * This file is generally used by user-level software, so you need to -+ * be a little careful about namespace pollution etc.  Also, we cannot -+ * assume GCC is being used. -+ */ -+ -+typedef unsigned long	__kernel_ino_t; -+typedef unsigned short	__kernel_mode_t; -+typedef unsigned short	__kernel_nlink_t; -+typedef long		__kernel_off_t; -+typedef int		__kernel_pid_t; -+typedef unsigned short	__kernel_ipc_pid_t; -+typedef unsigned short	__kernel_uid_t; -+typedef unsigned short	__kernel_gid_t; -+typedef unsigned int	__kernel_size_t; -+typedef int		__kernel_ssize_t; -+typedef int		__kernel_ptrdiff_t; -+typedef long		__kernel_time_t; -+typedef long		__kernel_suseconds_t; -+typedef long		__kernel_clock_t; -+typedef int		__kernel_timer_t; -+typedef int		__kernel_clockid_t; -+typedef int		__kernel_daddr_t; -+typedef char *		__kernel_caddr_t; -+typedef unsigned short	__kernel_uid16_t; -+typedef unsigned short	__kernel_gid16_t; -+typedef unsigned int	__kernel_uid32_t; -+typedef unsigned int	__kernel_gid32_t; -+ -+typedef unsigned short	__kernel_old_uid_t; -+typedef unsigned short	__kernel_old_gid_t; -+typedef unsigned short	__kernel_old_dev_t; -+ -+#ifdef __GNUC__ -+typedef long long	__kernel_loff_t; -+#endif -+ -+typedef struct { -+#if defined(__KERNEL__) || defined(__USE_ALL) -+	int	val[2]; -+#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */ -+	int	__val[2]; -+#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */ -+} __kernel_fsid_t; -+ -+#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) -+ -+#undef	__FD_SET -+#define	__FD_SET(d, set)	((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) -+ -+#undef	__FD_CLR -+#define	__FD_CLR(d, set)	((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) -+ -+#undef	__FD_ISSET -+#define	__FD_ISSET(d, set)	((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) -+ -+#undef	__FD_ZERO -+#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp))) -+ -+#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */ -+ -+#endif ---- linux/include/asm-nios2nommu/preem_latency.h -+++ linux/include/asm-nios2nommu/preem_latency.h -@@ -0,0 +1,39 @@ -+#ifndef _ASM_PREEM_LATENCY_H -+#define _ASM_PREEM_LATENCY_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/preem_latency.h -+ * -+ * timing support for preempt-stats patch -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/nios.h> -+ -+#define readclock(low) \ -+do {\ -+	*(volatile unsigned long *)na_Counter_64_bit=1;	\ -+	low=*(volatile unsigned long *)na_Counter_64_bit; \ -+} while (0) -+#define readclock_init() -+ -+#endif /* _ASM_PREEM_LATENCY_H */ ---- linux/include/asm-nios2nommu/processor.h -+++ linux/include/asm-nios2nommu/processor.h -@@ -0,0 +1,148 @@ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/processor.h -+ * -+ * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu) -+ * Copyright (C) 2001  Ken Hill (khill@microtronix.com)     -+ *                     Vic Phillips (vic@microtronix.com) -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * hacked from: -+ *      include/asm-sparc/processor.h -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * Nov/02/2003      dgt     Fix task_size -+ * -+ ---------------------------------------------------------------------*/ -+ -+#ifndef __ASM_NIOS_PROCESSOR_H -+#define __ASM_NIOS_PROCESSOR_H -+ -+#define NIOS2_FLAG_KTHREAD	0x00000001	/* task is a kernel thread */ -+#define NIOS2_FLAG_COPROC	0x00000002	/* Thread used coprocess */ -+#define NIOS2_FLAG_DEBUG	0x00000004	/* task is being debugged */ -+ -+#define NIOS2_OP_NOP 0x1883a -+#define NIOS2_OP_BREAK	0x3da03a -+ -+#ifndef __ASSEMBLY__ -+ -+/* -+ * Default implementation of macro that returns current -+ * instruction pointer ("program counter"). -+ */ -+#define current_text_addr() ({ __label__ _l; _l: &&_l;}) -+ -+#include <linux/a.out.h> -+#include <linux/string.h> -+ -+#include <asm/ptrace.h> -+#include <asm/signal.h> -+#include <asm/segment.h> -+#include <asm/current.h> -+#include <asm/system.h> /* for get_hi_limit */ -+ -+/* -+ * Bus types -+ */ -+#define EISA_bus 0 -+#define EISA_bus__is_a_macro /* for versions in ksyms.c */ -+#define MCA_bus 0 -+#define MCA_bus__is_a_macro /* for versions in ksyms.c */ -+ -+/* -+ * The nios has no problems with write protection -+ */ -+#define wp_works_ok 1 -+#define wp_works_ok__is_a_macro /* for versions in ksyms.c */ -+ -+/* Whee, this is STACK_TOP and the lowest kernel address too... */ -+#if 0 -+#define KERNBASE        0x00000000  /* First address the kernel will eventually be */ -+#define TASK_SIZE	(KERNBASE) -+#define MAX_USER_ADDR	TASK_SIZE -+#define MMAP_SEARCH_START (TASK_SIZE/3) -+#endif -+ -+#define TASK_SIZE	((unsigned int) nasys_program_mem_end)   //...this is better... -+ -+/* -+ * This decides where the kernel will search for a free chunk of vm -+ * space during mmap's. We won't be using it -+ */ -+#define TASK_UNMAPPED_BASE	0 -+ -+/* The Nios processor specific thread struct. */ -+struct thread_struct { -+	struct pt_regs *kregs; -+ -+	/* For signal handling */ -+	unsigned long sig_address; -+	unsigned long sig_desc; -+ -+	/* Context switch saved kernel state. */ -+	unsigned long ksp; -+	unsigned long kpsr; -+	unsigned long kesr; -+ -+	/* Flags are defined below */ -+ -+	unsigned long flags; -+	int current_ds; -+	struct exec core_exec;     /* just what it says. */ -+}; -+ -+#define INIT_MMAP { &init_mm, (0), (0), \ -+		    __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC } -+ -+#define INIT_THREAD  { \ -+	.kregs		= 0,			\ -+	.sig_address	= 0,			\ -+	.sig_desc	= 0,			\ -+	.ksp		= 0,			\ -+	.kpsr		= 0,			\ -+	.kesr		= PS_S,			\ -+	.flags		= NIOS2_FLAG_KTHREAD,	\ -+	.current_ds	= __KERNEL_DS,		\ -+	.core_exec	= INIT_EXEC		\ -+} -+ -+/* Free all resources held by a thread. */ -+extern void release_thread(struct task_struct *); -+ -+extern unsigned long thread_saved_pc(struct task_struct *t); -+ -+extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp); -+ -+/* Prepare to copy thread state - unlazy all lazy status */ -+#define prepare_to_copy(tsk)	do { } while (0) -+ -+extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); -+ -+unsigned long get_wchan(struct task_struct *p); -+ -+#define KSTK_EIP(tsk)  ((tsk)->thread.kregs->ea) -+#define KSTK_ESP(tsk)  ((tsk)->thread.kregs->sp) -+ -+#ifdef __KERNEL__ -+/* Allocation and freeing of basic task resources. */ -+ -+//;dgt2;#define alloc_task_struct() ((struct task_struct *) xx..see..linux..fork..xx __get_free_pages(GFP_KERNEL,1)) -+//;dgt2;#define get_task_struct(tsk) xx..see..linux..sched.h...atomic_inc(&mem_map[MAP_NR(tsk)].count) -+ -+#endif -+ -+#define cpu_relax()    do { } while (0) -+#endif /* __ASSEMBLY__ */ -+#endif /* __ASM_NIOS_PROCESSOR_H */ ---- linux/include/asm-nios2nommu/ptrace.h -+++ linux/include/asm-nios2nommu/ptrace.h -@@ -0,0 +1,141 @@ -+/* -+ * Taken from the m68k port. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef _NIOS2NOMMU_PTRACE_H -+#define _NIOS2NOMMU_PTRACE_H -+ -+#ifndef __ASSEMBLY__ -+ -+#define PTR_R0		0 -+#define PTR_R1		1 -+#define PTR_R2		2 -+#define PTR_R3		3 -+#define PTR_R4		4 -+#define PTR_R5		5 -+#define PTR_R6		6 -+#define PTR_R7		7 -+#define PTR_R8		8 -+#define PTR_R9		9 -+#define PTR_R10		10 -+#define PTR_R11		11 -+#define PTR_R12		12 -+#define PTR_R13		13 -+#define PTR_R14		14 -+#define PTR_R15		15 -+#define PTR_R16		16 -+#define PTR_R17		17 -+#define PTR_R18		18 -+#define PTR_R19		19 -+#define PTR_R20		20 -+#define PTR_R21		21 -+#define PTR_R22		22 -+#define PTR_R23		23 -+#define PTR_R24		24 -+#define PTR_R25		25 -+#define PTR_GP		26 -+#define PTR_SP		27 -+#define PTR_FP		28 -+#define PTR_EA		29 -+#define PTR_BA		30 -+#define PTR_RA		31 -+#define PTR_STATUS	32 -+#define PTR_ESTATUS	33 -+#define PTR_BSTATUS	34 -+#define PTR_IENABLE	35 -+#define PTR_IPENDING	36 -+ -+/* this struct defines the way the registers are stored on the -+   stack during a system call.  -+ -+   There is a fake_regs in setup.c that has to match pt_regs.*/ -+ -+struct pt_regs { -+	unsigned long  r8; -+	unsigned long  r9; -+	unsigned long  r10; -+	unsigned long  r11; -+	unsigned long  r12; -+	unsigned long  r13; -+	unsigned long  r14; -+	unsigned long  r15; -+	unsigned long  r1; -+	unsigned long  r2; -+	unsigned long  r3; -+	unsigned long  r4; -+	unsigned long  r5; -+	unsigned long  r6; -+	unsigned long  r7; -+	unsigned long  orig_r2; -+	unsigned long  ra; -+	unsigned long  fp; -+	unsigned long  sp; -+	unsigned long  gp; -+	unsigned long  estatus; -+	unsigned long  status_extension; -+	unsigned long  ea; -+}; -+ -+ -+/* -+ * 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  r16; -+	unsigned long  r17; -+	unsigned long  r18; -+	unsigned long  r19; -+	unsigned long  r20; -+	unsigned long  r21; -+	unsigned long  r22; -+	unsigned long  r23; -+	unsigned long  fp; -+	unsigned long  gp; -+	unsigned long  ra; -+}; -+ -+/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ -+#define PTRACE_GETREGS            12 -+#define PTRACE_SETREGS            13 -+#ifdef CONFIG_FPU -+#define PTRACE_GETFPREGS          14 -+#define PTRACE_SETFPREGS          15 -+#endif -+ -+#ifdef __KERNEL__ -+ -+#ifndef PS_S -+#define PS_S  (0x00000001) -+#endif -+#ifndef PS_T -+#define PS_T  (0x00000002) -+#endif -+ -+#define user_mode(regs) (!((regs)->status_extension & PS_S)) -+#define instruction_pointer(regs) ((regs)->ra) -+#define profile_pc(regs) instruction_pointer(regs) -+extern void show_regs(struct pt_regs *); -+ -+#endif /* __KERNEL__ */ -+#endif /* __ASSEMBLY__ */ -+#endif /* _NIOS2NOMMU_PTRACE_H */ ---- linux/include/asm-nios2nommu/resource.h -+++ linux/include/asm-nios2nommu/resource.h -@@ -0,0 +1,73 @@ -+#ifndef _NIOS2NOMMU_RESOURCE_H -+#define _NIOS2NOMMU_RESOURCE_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * Resource limits -+ * -+ * include/asm-nios2nommu/resource.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#define RLIMIT_CPU	0		/* CPU time in ms */ -+#define RLIMIT_FSIZE	1		/* Maximum filesize */ -+#define RLIMIT_DATA	2		/* max data size */ -+#define RLIMIT_STACK	3		/* max stack size */ -+#define RLIMIT_CORE	4		/* max core file size */ -+#define RLIMIT_RSS	5		/* max resident set size */ -+#define RLIMIT_NPROC	6		/* max number of processes */ -+#define RLIMIT_NOFILE	7		/* max number of open files */ -+#define RLIMIT_MEMLOCK	8		/* max locked-in-memory address space */ -+#define RLIMIT_AS	9		/* address space limit */ -+#define RLIMIT_LOCKS	10		/* maximum file locks held */ -+#define RLIMIT_SIGPENDING 11		/* max number of pending signals */ -+#define RLIMIT_MSGQUEUE 12		/* maximum bytes in POSIX mqueues */ -+ -+#define RLIM_NLIMITS	13 -+ -+/* -+ * SuS says limits have to be unsigned. -+ * Which makes a ton more sense anyway. -+ */ -+#define RLIM_INFINITY	(~0UL) -+ -+#ifdef __KERNEL__ -+ -+#define INIT_RLIMITS					\ -+{							\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{      _STK_LIM, RLIM_INFINITY },		\ -+	{             0, RLIM_INFINITY },		\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{             0,             0 },		\ -+	{      INR_OPEN,     INR_OPEN  },		\ -+	{   MLOCK_LIMIT,   MLOCK_LIMIT },		\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{ RLIM_INFINITY, RLIM_INFINITY },		\ -+	{ MAX_SIGPENDING, MAX_SIGPENDING },		\ -+	{ MQ_BYTES_MAX, MQ_BYTES_MAX },			\ -+} -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _NIOS2NOMMU_RESOURCE_H */ ---- linux/include/asm-nios2nommu/rmap.h -+++ linux/include/asm-nios2nommu/rmap.h -@@ -0,0 +1,2 @@ -+/* Do not need anything here */ -+ ---- linux/include/asm-nios2nommu/scatterlist.h -+++ linux/include/asm-nios2nommu/scatterlist.h -@@ -0,0 +1,42 @@ -+#ifndef _NIOS2NOMMU_SCATTERLIST_H -+#define _NIOS2NOMMU_SCATTERLIST_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/scatterlist.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+#include <linux/mm.h> -+ -+struct scatterlist { -+	struct page	*page; -+	unsigned int	offset; -+	dma_addr_t	dma_address; -+	unsigned int	length; -+}; -+ -+#define sg_address(sg) (page_address((sg)->page) + (sg)->offset -+#define sg_dma_address(sg)	((sg)->dma_address) -+#define sg_dma_len(sg)		((sg)->length) -+ -+#define ISA_DMA_THRESHOLD	(0xffffffff) -+ -+#endif /* !(_NIOS2NOMMU_SCATTERLIST_H) */ ---- linux/include/asm-nios2nommu/sections.h -+++ linux/include/asm-nios2nommu/sections.h -@@ -0,0 +1,30 @@ -+#ifndef _NIOS2NOMMU_SECTIONS_H -+#define _NIOS2NOMMU_SECTIONS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/sections.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm-generic/sections.h> -+ -+#endif /* _NIOS2NOMMU_SECTIONS_H */ ---- linux/include/asm-nios2nommu/segment.h -+++ linux/include/asm-nios2nommu/segment.h -@@ -0,0 +1,75 @@ -+#ifndef _NIOS2NOMMU_SEGMENT_H -+#define _NIOS2NOMMU_SEGMENT_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/segment.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* define constants */ -+/* Address spaces (FC0-FC2) */ -+#define USER_DATA     (1) -+#ifndef __USER_DS -+#define __USER_DS     (USER_DATA) -+#endif -+#define USER_PROGRAM  (2) -+#define SUPER_DATA    (5) -+#ifndef __KERNEL_DS -+#define __KERNEL_DS   (SUPER_DATA) -+#endif -+#define SUPER_PROGRAM (6) -+#define CPU_SPACE     (7) -+ -+#ifndef __ASSEMBLY__ -+ -+typedef struct { -+	unsigned long seg; -+} mm_segment_t; -+ -+#define MAKE_MM_SEG(s)	((mm_segment_t) { (s) }) -+#define USER_DS		MAKE_MM_SEG(__USER_DS) -+#define KERNEL_DS	MAKE_MM_SEG(__KERNEL_DS) -+ -+/* -+ * Get/set the SFC/DFC registers for MOVES instructions -+ */ -+ -+static inline mm_segment_t get_fs(void) -+{ -+    return USER_DS; -+} -+ -+static inline mm_segment_t get_ds(void) -+{ -+    /* return the supervisor data space code */ -+    return KERNEL_DS; -+} -+ -+static inline void set_fs(mm_segment_t val) -+{ -+} -+ -+#define segment_eq(a,b)	((a).seg == (b).seg) -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif /* _NIOS2NOMMU_SEGMENT_H */ ---- linux/include/asm-nios2nommu/semaphore.h -+++ linux/include/asm-nios2nommu/semaphore.h -@@ -0,0 +1,155 @@ -+#ifndef _NIOS2NOMMU_SEMAPHORE_H -+#define _NIOS2NOMMU_SEMAPHORE_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/semaphore.h -+ * -+ * Interrupt-safe semaphores.. -+ * -+ * Derived from M68knommu -+ * -+ * (C) Copyright 1996 Linus Torvalds -+ * m68k version by Andreas Schwab -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+#define RW_LOCK_BIAS		 0x01000000 -+ -+#ifndef __ASSEMBLY__ -+ -+#include <linux/linkage.h> -+#include <linux/wait.h> -+#include <linux/spinlock.h> -+#include <linux/rwsem.h> -+ -+#include <asm/system.h> -+#include <asm/atomic.h> -+ -+struct semaphore { -+	atomic_t count; -+	atomic_t waking; -+	wait_queue_head_t wait; -+}; -+ -+#define __SEMAPHORE_INITIALIZER(name, n)				\ -+{									\ -+	.count		= ATOMIC_INIT(n),				\ -+	.waking		= ATOMIC_INIT(0),				\ -+	.wait		= __WAIT_QUEUE_HEAD_INITIALIZER((name).wait)	\ -+} -+ -+#define __MUTEX_INITIALIZER(name) \ -+	__SEMAPHORE_INITIALIZER(name,1) -+ -+#define __DECLARE_SEMAPHORE_GENERIC(name,count) \ -+	struct semaphore name = __SEMAPHORE_INITIALIZER(name,count) -+ -+#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) -+{ -+	*sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val); -+} -+ -+static inline void init_MUTEX (struct semaphore *sem) -+{ -+	sema_init(sem, 1); -+} -+ -+static inline void init_MUTEX_LOCKED (struct semaphore *sem) -+{ -+	sema_init(sem, 0); -+} -+ -+asmlinkage void __down(struct semaphore * sem); -+asmlinkage int  __down_interruptible(struct semaphore * sem); -+asmlinkage int  __down_trylock(struct semaphore * sem); -+asmlinkage void __up(struct semaphore * sem); -+ -+asmlinkage void __down_failed(void /* special register calling convention */); -+asmlinkage int  __down_failed_interruptible(void  /* params in registers */); -+asmlinkage int  __down_failed_trylock(void  /* params in registers */); -+asmlinkage void __up_wakeup(void /* special register calling convention */); -+ -+extern spinlock_t semaphore_wake_lock; -+ -+/* -+ * This is ugly, but we want the default case to fall through. -+ * "down_failed" is a special asm handler that calls the C -+ * routine that actually waits. -+ */ -+extern inline void down(struct semaphore * sem) -+{ -+	might_sleep(); -+ -+  #if 0 -+    ...Nios2 has no atomic "decrement memory".... -+  #else -+	if (atomic_dec_return(&sem->count) < 0) -+		__down(sem); -+  #endif -+} -+ -+extern inline int down_interruptible(struct semaphore * sem) -+{ -+	int ret = 0; -+ -+ -+	might_sleep(); -+ -+  #if 0 -+    ...Nios2 has no atomic "decrement memory".... -+  #else -+	if(atomic_dec_return(&sem->count) < 0) -+		ret = __down_interruptible(sem); -+	return ret; -+  #endif -+} -+ -+extern inline int down_trylock(struct semaphore * sem) -+{ -+  #if 0 -+    ...Nios2 has no atomic "decrement memory".... -+  #else -+	int ret = 0; -+ -+	if (atomic_dec_return (&sem->count) < 0) -+		ret = __down_trylock(sem); -+	return ret; -+  #endif -+} -+ -+/* -+ * Note! This is subtle. We jump to wake people up only if -+ * the semaphore was negative (== somebody was waiting on it). -+ * The default case (no contention) will result in NO -+ * jumps for both down() and up(). -+ */ -+extern inline void up(struct semaphore * sem) -+{ -+  #if 0 -+    ...Nios2 has no atomic "increment memory".... -+  #else -+	if (atomic_inc_return(&sem->count) <= 0) -+		__up(sem); -+  #endif -+} -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif ---- linux/include/asm-nios2nommu/semaphore-helper.h -+++ linux/include/asm-nios2nommu/semaphore-helper.h -@@ -0,0 +1,101 @@ -+#ifndef _NIOS2NOMMU_SEMAPHORE_HELPER_H -+#define _NIOS2NOMMU_SEMAPHORE_HELPER_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/semaphore.h -+ * -+ * SMP- and interrupt-safe semaphores helper functions. -+ * -+ * Derived from M68knommu -+ * -+ * (C) Copyright 1996 Linus Torvalds -+ * m68k version by Andreas Schwab -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+// #include <linux/config.h> -+ -+/* -+ * These two _must_ execute atomically wrt each other. -+ */ -+static inline void wake_one_more(struct semaphore * sem) -+{ -+	atomic_inc(&sem->waking); -+} -+ -+static inline int waking_non_zero(struct semaphore *sem) -+{ -+	int ret; -+	unsigned long flags; -+ -+	spin_lock_irqsave(&semaphore_wake_lock, flags); -+	ret = 0; -+	if (atomic_read(&sem->waking) > 0) { -+		atomic_dec(&sem->waking); -+		ret = 1; -+	} -+	spin_unlock_irqrestore(&semaphore_wake_lock, flags); -+	return ret; -+} -+ -+/* -+ * waking_non_zero_interruptible: -+ *	1	got the lock -+ *	0	go to sleep -+ *	-EINTR	interrupted -+ */ -+static inline int waking_non_zero_interruptible(struct semaphore *sem, -+						struct task_struct *tsk) -+{ -+	int ret; -+	unsigned long flags; -+ -+	spin_lock_irqsave(&semaphore_wake_lock, flags); -+	ret = 0; -+	if (atomic_read(&sem->waking) > 0) { -+		atomic_dec(&sem->waking); -+		ret = 1; -+	} else if (signal_pending(tsk)) { -+		atomic_inc(&sem->count); -+		ret = -EINTR; -+	} -+	spin_unlock_irqrestore(&semaphore_wake_lock, flags); -+	return ret; -+} -+ -+/* -+ * waking_non_zero_trylock: -+ *	1	failed to lock -+ *	0	got the lock -+ */ -+static inline int waking_non_zero_trylock(struct semaphore *sem) -+{ -+	int ret; -+	unsigned long flags; -+ -+	spin_lock_irqsave(&semaphore_wake_lock, flags); -+	ret = 1; -+	if (atomic_read(&sem->waking) > 0) { -+		atomic_dec(&sem->waking); -+		ret = 0; -+	} else -+		atomic_inc(&sem->count); -+	spin_unlock_irqrestore(&semaphore_wake_lock, flags); -+	return ret; -+} -+ -+#endif ---- linux/include/asm-nios2nommu/sembuf.h -+++ linux/include/asm-nios2nommu/sembuf.h -@@ -0,0 +1,48 @@ -+#ifndef _NIOS_SEMBUF_H -+#define _NIOS_SEMBUF_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/sembuf.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/*  -+ * Note extra padding because this structure is passed back and forth -+ * between kernel and user space. -+ * -+ * Pad space is left for: -+ * - 64-bit time_t to solve y2038 problem -+ * - 2 miscellaneous 32-bit values -+ */ -+ -+struct semid64_ds { -+	struct ipc64_perm sem_perm;		/* permissions .. see ipc.h */ -+	__kernel_time_t	sem_otime;		/* last semop time */ -+	unsigned long	__unused1; -+	__kernel_time_t	sem_ctime;		/* last change time */ -+	unsigned long	__unused2; -+	unsigned long	sem_nsems;		/* no. of semaphores in array */ -+	unsigned long	__unused3; -+	unsigned long	__unused4; -+}; -+ -+#endif /* _NIOS_SEMBUF_H */ ---- linux/include/asm-nios2nommu/setup.h -+++ linux/include/asm-nios2nommu/setup.h -@@ -0,0 +1,31 @@ -+/*	Copied from i386 port. -+ *	Just a place holder. We don't want to have to test x86 before -+ *	we include stuff -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2_SETUP_H -+#define _NIOS2_SETUP_H -+ -+#define COMMAND_LINE_SIZE 512 -+ -+#endif /* _NIOS2_SETUP_H */ ---- linux/include/asm-nios2nommu/shmbuf.h -+++ linux/include/asm-nios2nommu/shmbuf.h -@@ -0,0 +1,64 @@ -+#ifndef _NIOS_SHMBUF_H -+#define _NIOS_SHMBUF_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/shmbuf.h -+ * -+ * Derived from m68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* Note extra padding because this structure is passed back and forth -+ * between kernel and user space. -+ * -+ * Pad space is left for: -+ * - 64-bit time_t to solve y2038 problem -+ * - 2 miscellaneous 32-bit values -+ */ -+ -+struct shmid64_ds { -+	struct ipc64_perm	shm_perm;	/* operation perms */ -+	size_t			shm_segsz;	/* size of segment (bytes) */ -+	__kernel_time_t		shm_atime;	/* last attach time */ -+	unsigned long		__unused1; -+	__kernel_time_t		shm_dtime;	/* last detach time */ -+	unsigned long		__unused2; -+	__kernel_time_t		shm_ctime;	/* last change time */ -+	unsigned long		__unused3; -+	__kernel_pid_t		shm_cpid;	/* pid of creator */ -+	__kernel_pid_t		shm_lpid;	/* pid of last operator */ -+	unsigned long		shm_nattch;	/* no. of current attaches */ -+	unsigned long		__unused4; -+	unsigned long		__unused5; -+}; -+ -+struct shminfo64 { -+	unsigned long	shmmax; -+	unsigned long	shmmin; -+	unsigned long	shmmni; -+	unsigned long	shmseg; -+	unsigned long	shmall; -+	unsigned long	__unused1; -+	unsigned long	__unused2; -+	unsigned long	__unused3; -+	unsigned long	__unused4; -+}; -+ -+#endif /* _NIOS_SHMBUF_H */ ---- linux/include/asm-nios2nommu/shmparam.h -+++ linux/include/asm-nios2nommu/shmparam.h -@@ -0,0 +1,30 @@ -+#ifndef __NIOS2NOMMU_SHMPARAM_H__ -+#define __NIOS2NOMMU_SHMPARAM_H__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/shmparam.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#define	SHMLBA		PAGE_SIZE	/* attach addr a multiple of this */ -+ -+#endif /* __NIOS2NOMMU_SHMPARAM_H__ */ ---- linux/include/asm-nios2nommu/sigcontext.h -+++ linux/include/asm-nios2nommu/sigcontext.h -@@ -0,0 +1,35 @@ -+/* -+ * Taken from the m68knommu. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ *  -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _ASM_NIOS2NOMMU_SIGCONTEXT_H -+#define _ASM_NIOS2NOMMU_SIGCONTEXT_H -+ -+#include <asm/ptrace.h> -+ -+struct sigcontext { -+	struct pt_regs regs; -+	unsigned long  sc_mask; 	/* old sigmask */ -+}; -+ -+#endif ---- linux/include/asm-nios2nommu/siginfo.h -+++ linux/include/asm-nios2nommu/siginfo.h -@@ -0,0 +1,28 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2NOMMU_SIGINFO_H -+#define _NIOS2NOMMU_SIGINFO_H -+ -+#include <asm-generic/siginfo.h> -+ -+#endif ---- linux/include/asm-nios2nommu/signal.h -+++ linux/include/asm-nios2nommu/signal.h -@@ -0,0 +1,207 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2_SIGNAL_H -+#define _NIOS2_SIGNAL_H -+ -+#include <linux/types.h> -+ -+/* Avoid too many header ordering problems.  */ -+struct siginfo; -+ -+#ifdef __KERNEL__ -+/* Most things should be clean enough to redefine this at will, if care -+   is taken to make libc match.  */ -+ -+#define _NSIG		64 -+#define _NSIG_BPW	32 -+#define _NSIG_WORDS	(_NSIG / _NSIG_BPW) -+ -+typedef unsigned long old_sigset_t;		/* at least 32 bits */ -+ -+typedef struct { -+	unsigned long sig[_NSIG_WORDS]; -+} sigset_t; -+ -+#else -+/* Here we must cater to libcs that poke about in kernel headers.  */ -+ -+#define NSIG		32 -+typedef unsigned long sigset_t; -+ -+#endif /* __KERNEL__ */ -+ -+#define SIGHUP		 1 -+#define SIGINT		 2 -+#define SIGQUIT		 3 -+#define SIGILL		 4 -+#define SIGTRAP		 5 -+#define SIGABRT		 6 -+#define SIGIOT		 6 -+#define SIGBUS		 7 -+#define SIGFPE		 8 -+#define SIGKILL		 9 -+#define SIGUSR1		10 -+#define SIGSEGV		11 -+#define SIGUSR2		12 -+#define SIGPIPE		13 -+#define SIGALRM		14 -+#define SIGTERM		15 -+#define SIGSTKFLT	16 -+#define SIGCHLD		17 -+#define SIGCONT		18 -+#define SIGSTOP		19 -+#define SIGTSTP		20 -+#define SIGTTIN		21 -+#define SIGTTOU		22 -+#define SIGURG		23 -+#define SIGXCPU		24 -+#define SIGXFSZ		25 -+#define SIGVTALRM	26 -+#define SIGPROF		27 -+#define SIGWINCH	28 -+#define SIGIO		29 -+#define SIGPOLL		SIGIO -+/* -+#define SIGLOST		29 -+*/ -+#define SIGPWR		30 -+#define SIGSYS		31 -+#define	SIGUNUSED	31 -+ -+/* These should not be considered constants from userland.  */ -+#define SIGRTMIN	32 -+#define SIGRTMAX	_NSIG-1 -+ -+/* -+ * SA_FLAGS values: -+ * -+ * SA_ONSTACK indicates that a registered stack_t will be used. -+ * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the -+ * SA_RESTART flag to get restarting signals (which were the default long ago) -+ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. -+ * SA_RESETHAND clears the handler when the signal is delivered. -+ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. -+ * SA_NODEFER prevents the current signal from being masked in the handler. -+ * -+ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single -+ * Unix names RESETHAND and NODEFER respectively. -+ */ -+#define SA_NOCLDSTOP	0x00000001 -+#define SA_NOCLDWAIT	0x00000002 /* not supported yet */ -+#define SA_SIGINFO	0x00000004 -+#define SA_ONSTACK	0x08000000 -+#define SA_RESTART	0x10000000 -+#define SA_NODEFER	0x40000000 -+#define SA_RESETHAND	0x80000000 -+ -+#define SA_NOMASK	SA_NODEFER -+#define SA_ONESHOT	SA_RESETHAND -+#define SA_INTERRUPT	0x20000000 /* dummy -- ignored */ -+ -+#define SA_RESTORER	0x04000000 -+ -+/*  -+ * sigaltstack controls -+ */ -+#define SS_ONSTACK	1 -+#define SS_DISABLE	2 -+ -+#define MINSIGSTKSZ	2048 -+#define SIGSTKSZ	8192 -+ -+#ifdef __KERNEL__ -+/* -+ * These values of sa_flags are used only by the kernel as part of the -+ * irq handling routines. -+ * -+ * SA_INTERRUPT is also used by the irq handling routines. -+ * SA_SHIRQ is for shared interrupt support on PCI and EISA. -+ */ -+#define SA_PROBE		SA_ONESHOT -+#define SA_SAMPLE_RANDOM	SA_RESTART -+#define SA_SHIRQ		0x04000000 -+#endif -+ -+#define SIG_BLOCK          0	/* for blocking signals */ -+#define SIG_UNBLOCK        1	/* for unblocking signals */ -+#define SIG_SETMASK        2	/* for setting the signal mask */ -+ -+/* Type of a signal handler.  */ -+typedef void (*__sighandler_t)(int); -+ -+#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */ -+#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */ -+#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */ -+ -+#ifdef __KERNEL__ -+struct old_sigaction { -+	__sighandler_t sa_handler; -+	old_sigset_t sa_mask; -+	unsigned long sa_flags; -+	void (*sa_restorer)(void); -+}; -+ -+struct sigaction { -+	__sighandler_t sa_handler; -+	unsigned long sa_flags; -+	void (*sa_restorer)(void); -+	sigset_t sa_mask;		/* mask last for extensibility */ -+}; -+ -+struct k_sigaction { -+	struct sigaction sa; -+}; -+#else -+/* Here we must cater to libcs that poke about in kernel headers.  */ -+ -+struct sigaction { -+	union { -+	  __sighandler_t _sa_handler; -+	  void (*_sa_sigaction)(int, struct siginfo *, void *); -+	} _u; -+	sigset_t sa_mask; -+	unsigned long sa_flags; -+	void (*sa_restorer)(void); -+}; -+ -+#define sa_handler	_u._sa_handler -+#define sa_sigaction	_u._sa_sigaction -+ -+#endif /* __KERNEL__ */ -+ -+typedef struct sigaltstack { -+	void *ss_sp; -+	int ss_flags; -+	size_t ss_size; -+} stack_t; -+ -+#ifdef __KERNEL__ -+ -+#include <asm/sigcontext.h> -+#undef __HAVE_ARCH_SIG_BITOPS -+ -+#define ptrace_signal_deliver(regs, cookie) do { } while (0) -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _NIOS2_SIGNAL_H */ ---- linux/include/asm-nios2nommu/smp.h -+++ linux/include/asm-nios2nommu/smp.h -@@ -0,0 +1,34 @@ -+#ifndef __ASM_SMP_H -+#define __ASM_SMP_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/smp.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+// #include <linux/config.h> -+ -+#ifdef CONFIG_SMP -+#error SMP not supported -+#endif -+ -+#endif ---- linux/include/asm-nios2nommu/socket.h -+++ linux/include/asm-nios2nommu/socket.h -@@ -0,0 +1,74 @@ -+#ifndef _ASM_SOCKET_H -+#define _ASM_SOCKET_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/socket.h -+ * -+ * Derived from m68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/sockios.h> -+ -+/* For setsockopt(2) */ -+#define SOL_SOCKET	1 -+ -+#define SO_DEBUG	1 -+#define SO_REUSEADDR	2 -+#define SO_TYPE		3 -+#define SO_ERROR	4 -+#define SO_DONTROUTE	5 -+#define SO_BROADCAST	6 -+#define SO_SNDBUF	7 -+#define SO_RCVBUF	8 -+#define SO_KEEPALIVE	9 -+#define SO_OOBINLINE	10 -+#define SO_NO_CHECK	11 -+#define SO_PRIORITY	12 -+#define SO_LINGER	13 -+#define SO_BSDCOMPAT	14 -+/* To add :#define SO_REUSEPORT 15 */ -+#define SO_PASSCRED	16 -+#define SO_PEERCRED	17 -+#define SO_RCVLOWAT	18 -+#define SO_SNDLOWAT	19 -+#define SO_RCVTIMEO	20 -+#define SO_SNDTIMEO	21 -+ -+/* Security levels - as per NRL IPv6 - don't actually do anything */ -+#define SO_SECURITY_AUTHENTICATION		22 -+#define SO_SECURITY_ENCRYPTION_TRANSPORT	23 -+#define SO_SECURITY_ENCRYPTION_NETWORK		24 -+ -+#define SO_BINDTODEVICE	25 -+ -+/* Socket filtering */ -+#define SO_ATTACH_FILTER        26 -+#define SO_DETACH_FILTER        27 -+ -+#define SO_PEERNAME             28 -+#define SO_TIMESTAMP		29 -+#define SCM_TIMESTAMP		SO_TIMESTAMP -+ -+#define SO_ACCEPTCONN		30 -+ -+#define SO_PEERSEC		31      /* ;dgt2;tmp;                   */ -+ -+#endif /* _ASM_SOCKET_H */ ---- linux/include/asm-nios2nommu/sockios.h -+++ linux/include/asm-nios2nommu/sockios.h -@@ -0,0 +1,38 @@ -+#ifndef _ASM_NIOS_SOCKIOS_H -+#define _ASM_NIOS_SOCKIOS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/sockios.h -+ * -+ * Socket-level I/O control calls. -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#define FIOSETOWN 	0x8901 -+#define SIOCSPGRP	0x8902 -+#define FIOGETOWN	0x8903 -+#define SIOCGPGRP	0x8904 -+#define SIOCATMARK	0x8905 -+#define SIOCGSTAMP	0x8906		/* Get stamp */ -+ -+#endif /* !(_ASM_NIOS_SOCKIOS_H) */ -+ ---- linux/include/asm-nios2nommu/spi.h -+++ linux/include/asm-nios2nommu/spi.h -@@ -0,0 +1,92 @@ -+#ifndef _ASM_SPI_H_ -+#define _ASM_SPI_H_ 1 -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/spi.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/nios.h> -+ -+int  register_NIOS_SPI( void ); -+void unregister_NIOS_SPI( void ); -+ -+#if defined(MODULE) -+void cleanup_module( void ); -+int  init_module( void ); -+#endif -+ -+#if defined(__KERNEL__) -+int  spi_reset  ( void ); -+#endif -+ -+ -+#define clockCS 0x01 -+#define temperatureCS 0x02 -+ -+#define clock_read_base 0x00 -+#define clock_write_base 0x80 -+#define clock_read_control 0x0F -+#define clock_read_trickle 0x11 -+ -+#define clock_read_sec 0x00 -+#define clock_read_min 0x01 -+#define clock_read_hour 0x02 -+#define clock_read_day 0x03 -+#define clock_read_date 0x04 -+#define clock_read_month 0x05 -+#define clock_read_year 0x06 -+ -+#define clock_write_control 0x8F -+#define clock_write_trickle 0x91 -+#define clock_write_sec 0x80 -+#define clock_write_min 0x81 -+#define clock_write_hour 0x82 -+#define clock_write_day 0x83 -+#define clock_write_date 0x84 -+#define clock_write_month 0x85 -+#define clock_write_year 0x86 -+ -+#define clock_write_ram_start 0xA0 -+#define clock_write_ram_end 0x100 -+#define clock_read_ram_start 0x20 -+#define clock_read_ram_end 0x80 -+ -+ -+#define	clock_sec_def 0x11 -+#define clock_min_def 0x59 -+#define clock_hour_def 0x71 -+#define clock_day_def 0x00 -+#define clock_date_def 0x20 -+#define clock_month_def 0x12 -+#define clock_year_def 0x34 -+ -+#define temp_read_base 0x00 -+#define temp_write_base 0x80 -+#define temp_read_control 0x00 -+#define temp_write_control 0x80 -+#define temp_read_msb 0x02 -+#define temp_read_lsb 0x01 -+ -+#define MAX_TEMP_VAR 10 -+ -+#endif /*_ASM_SPI_H_*/ ---- linux/include/asm-nios2nommu/spinlock.h -+++ linux/include/asm-nios2nommu/spinlock.h -@@ -0,0 +1,30 @@ -+#ifndef __NIOS_SPINLOCK_H -+#define __NIOS_SPINLOCK_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/spinlock.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#error "Nios doesn't do SMP yet" -+ -+#endif ---- linux/include/asm-nios2nommu/spi_struct.h -+++ linux/include/asm-nios2nommu/spi_struct.h -@@ -0,0 +1,57 @@ -+// SPI Registers -+typedef volatile struct -+  { -+  int np_spirxdata;       // Read-only, 1-16 bit -+  int np_spitxdata;       // Write-only, same width as rxdata -+  int np_spistatus;       // Read-only, 9-bit -+  int np_spicontrol;      // Read/Write, 9-bit -+  int np_spireserved;     // reserved -+  int np_spislaveselect;  // Read/Write, 1-16 bit, master only -+  int np_spiendofpacket;  // Read/write, same width as txdata, rxdata. -+  } np_spi; -+ -+// SPI Status Register Bits -+enum -+  { -+  np_spistatus_eop_bit  = 9, -+  np_spistatus_e_bit    = 8, -+  np_spistatus_rrdy_bit = 7, -+  np_spistatus_trdy_bit = 6, -+  np_spistatus_tmt_bit  = 5, -+  np_spistatus_toe_bit  = 4, -+  np_spistatus_roe_bit  = 3, -+ -+  np_spistatus_eop_mask  = (1 << 9), -+  np_spistatus_e_mask    = (1 << 8), -+  np_spistatus_rrdy_mask = (1 << 7), -+  np_spistatus_trdy_mask = (1 << 6), -+  np_spistatus_tmt_mask  = (1 << 5), -+  np_spistatus_toe_mask  = (1 << 4), -+  np_spistatus_roe_mask  = (1 << 3), -+  }; -+ -+// SPI Control Register Bits -+enum -+  { -+  np_spicontrol_sso_bit   = 10, -+  np_spicontrol_ieop_bit  = 9, -+  np_spicontrol_ie_bit    = 8, -+  np_spicontrol_irrdy_bit = 7, -+  np_spicontrol_itrdy_bit = 6, -+  np_spicontrol_itoe_bit  = 4, -+  np_spicontrol_iroe_bit  = 3, -+ -+  np_spicontrol_sso_mask   = (1 << 10), -+  np_spicontrol_ieop_mask  = (1 << 9), -+  np_spicontrol_ie_mask    = (1 << 8), -+  np_spicontrol_irrdy_mask = (1 << 7), -+  np_spicontrol_itrdy_mask = (1 << 6), -+  np_spicontrol_itoe_mask  = (1 << 4), -+  np_spicontrol_iroe_mask  = (1 << 3), -+  }; -+ -+// SPI Routines. -+int nr_spi_rxchar(np_spi *spiBase); -+int nr_spi_txchar(int i, np_spi *spiBase); -+ -+ ---- linux/include/asm-nios2nommu/statfs.h -+++ linux/include/asm-nios2nommu/statfs.h -@@ -0,0 +1,30 @@ -+#ifndef _NIOS2NOMMU_STATFS_H -+#define _NIOS2NOMMU_STATFS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/statfs.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm-generic/statfs.h> -+ -+#endif /* _NIOS2NOMMU_STATFS_H */ ---- linux/include/asm-nios2nommu/stat.h -+++ linux/include/asm-nios2nommu/stat.h -@@ -0,0 +1,102 @@ -+#ifndef _ASMNIOS2NOMMU_STAT_H -+#define _ASMNIOS2NOMMU_STAT_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/stat.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+struct __old_kernel_stat { -+	unsigned short st_dev; -+	unsigned short st_ino; -+	unsigned short st_mode; -+	unsigned short st_nlink; -+	unsigned short st_uid; -+	unsigned short st_gid; -+	unsigned short st_rdev; -+	unsigned long  st_size; -+	unsigned long  st_atime; -+	unsigned long  st_mtime; -+	unsigned long  st_ctime; -+}; -+ -+struct stat { -+	unsigned short st_dev; -+	unsigned short __pad1; -+	unsigned long st_ino; -+	unsigned short st_mode; -+	unsigned short st_nlink; -+	unsigned short st_uid; -+	unsigned short st_gid; -+	unsigned short st_rdev; -+	unsigned short __pad2; -+	unsigned long  st_size; -+	unsigned long  st_blksize; -+	unsigned long  st_blocks; -+	unsigned long  st_atime; -+	unsigned long  __unused1; -+	unsigned long  st_mtime; -+	unsigned long  __unused2; -+	unsigned long  st_ctime; -+	unsigned long  __unused3; -+	unsigned long  __unused4; -+	unsigned long  __unused5; -+}; -+ -+/* This matches struct stat64 in glibc2.1, hence the absolutely -+ * insane amounts of padding around dev_t's. -+ */ -+struct stat64 { -+	unsigned long long	st_dev; -+	unsigned char	__pad1[4]; -+ -+#define STAT64_HAS_BROKEN_ST_INO	1 -+	unsigned long	__st_ino; -+ -+	unsigned int	st_mode; -+	unsigned int	st_nlink; -+ -+	unsigned long	st_uid; -+	unsigned long	st_gid; -+ -+	unsigned long long	st_rdev; -+	unsigned char	__pad3[4]; -+ -+	long long	st_size; -+	unsigned long	st_blksize; -+ -+	unsigned long	__pad4;		/* future possible st_blocks high bits */ -+	unsigned long	st_blocks;	/* Number 512-byte blocks allocated. */ -+ -+	unsigned long	st_atime; -+	unsigned long	st_atime_nsec; -+ -+	unsigned long	st_mtime; -+	unsigned long	st_mtime_nsec; -+ -+	unsigned long	st_ctime; -+	unsigned long	st_ctime_nsec; -+ -+	unsigned long long	st_ino; -+}; -+ -+#endif ---- linux/include/asm-nios2nommu/string.h -+++ linux/include/asm-nios2nommu/string.h -@@ -0,0 +1,45 @@ -+#ifndef __NIOS_STRING_H__ -+#define __NIOS_STRING_H__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/string.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#ifdef __KERNEL__ /* only set these up for kernel code */ -+ -+#define __HAVE_ARCH_MEMMOVE -+void * memmove(void * d, const void * s, size_t count); -+#define __HAVE_ARCH_MEMCPY -+extern void * memcpy(void *d, const void *s, size_t count); -+#define __HAVE_ARCH_MEMSET -+extern void * memset(void * s,int c,size_t count); -+ -+#if 0 -+#define __HAVE_ARCH_BCOPY -+#define __HAVE_ARCH_STRLEN -+#endif -+ -+#endif /* KERNEL */ -+ -+#endif /* !(__NIOS_STRING_H__) */ ---- linux/include/asm-nios2nommu/system.h -+++ linux/include/asm-nios2nommu/system.h -@@ -0,0 +1,172 @@ -+/* -+ * Taken from the m68k. -+ * -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _NIOS2NOMMU_SYSTEM_H -+#define _NIOS2NOMMU_SYSTEM_H -+ -+// #include <linux/config.h> /* get configuration macros */ -+#include <linux/linkage.h> -+#include <asm/segment.h> -+#include <asm/entry.h> -+#include <asm/nios.h> -+ -+/* -+ * switch_to(n) should switch tasks to task ptr, first checking that -+ * ptr isn't the current task, in which case it does nothing.  This -+ * also clears the TS-flag if the task we switched to has used the -+ * math co-processor latest. -+ */ -+ -+/* -+ */ -+asmlinkage void resume(void); -+#define switch_to(prev,next,last)				\ -+{								\ -+  void *_last;							\ -+  __asm__ __volatile__(						\ -+  	"mov	r4, %1\n"					\ -+	"mov	r5, %2\n"					\ -+	"call	resume\n"					\ -+	"mov	%0,r4\n"					\ -+       : "=r" (_last)						\ -+       : "r" (prev), "r" (next)					\ -+       : "r4","r5","r7","r8","ra");	\ -+  (last) = _last;						\ -+} -+ -+#define local_irq_enable() __asm__ __volatile__ (  \ -+	"rdctl	r8, status\n"			   \ -+	"ori	r8, r8, 1\n"			   \ -+	"wrctl	status, r8\n"			   \ -+	: : : "r8")	   -+ -+#define local_irq_disable() __asm__ __volatile__ ( \ -+	"rdctl	r8, status\n"			   \ -+	"andi	r8, r8, 0xfffe\n"		   \ -+	"wrctl	status, r8\n"			   \ -+	: : : "r8") -+ -+#define local_save_flags(x) __asm__ __volatile__ (	\ -+	"rdctl	r8, status\n"				\ -+	"mov	%0, r8\n"				\ -+	:"=r" (x) : : "r8", "memory") -+ -+#define local_irq_restore(x) __asm__ __volatile__ (	\ -+	"mov	r8, %0\n"				\ -+	"wrctl	status, r8\n"				\ -+	: :"r" (x) : "memory") -+ -+/* For spinlocks etc */ -+#define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } while (0) -+ -+#define	irqs_disabled()					\ -+({							\ -+	unsigned long flags;				\ -+	local_save_flags(flags);			\ -+	((flags & NIOS2_STATUS_PIE_MSK) == 0x0);	\ -+}) -+ -+#define iret() __asm__ __volatile__ ("eret": : :"memory", "ea") -+ -+/* -+ * Force strict CPU ordering. -+ * Not really required on m68k... -+ */ -+#define nop()  asm volatile ("nop"::) -+#define mb()   asm volatile (""   : : :"memory") -+#define rmb()  asm volatile (""   : : :"memory") -+#define wmb()  asm volatile (""   : : :"memory") -+#define set_rmb(var, value)    do { xchg(&var, value); } while (0) -+#define set_mb(var, value)     set_rmb(var, value) -+#define set_wmb(var, value)    do { var = value; wmb(); } while (0) -+ -+#ifdef CONFIG_SMP -+#define smp_mb()	mb() -+#define smp_rmb()	rmb() -+#define smp_wmb()	wmb() -+#define smp_read_barrier_depends()	read_barrier_depends() -+#else -+#define smp_mb()	barrier() -+#define smp_rmb()	barrier() -+#define smp_wmb()	barrier() -+#define smp_read_barrier_depends()	do { } while(0) -+#endif -+ -+#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) -+#define tas(ptr) (xchg((ptr),1)) -+ -+struct __xchg_dummy { unsigned long a[100]; }; -+#define __xg(x) ((volatile struct __xchg_dummy *)(x)) -+ -+static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) -+{ -+  unsigned long tmp, flags; -+ -+  local_irq_save(flags); -+ -+  switch (size) { -+  case 1: -+    __asm__ __volatile__( \ -+      "ldb	%0, %2\n" \ -+      "stb	%1, %2\n" \ -+    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory"); -+    break; -+  case 2: -+    __asm__ __volatile__( \ -+      "ldh	%0, %2\n" \ -+      "sth	%1, %2\n" \ -+    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory"); -+    break; -+  case 4: -+    __asm__ __volatile__( \ -+      "ldw	%0, %2\n" \ -+      "stw	%1, %2\n" \ -+    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory"); -+    break; -+  } -+  local_irq_restore(flags); -+  return tmp; -+} -+ -+/* -+ * Atomic compare and exchange.  Compare OLD with MEM, if identical, -+ * store NEW in MEM.  Return the initial value in MEM.  Success is -+ * indicated by comparing RETURN with OLD. -+ */ -+#define __HAVE_ARCH_CMPXCHG	1 -+ -+static __inline__ unsigned long -+cmpxchg(volatile int *p, int old, int new) -+{ -+	unsigned long flags; -+	int prev; -+ -+	local_irq_save(flags); -+	if ((prev = *p) == old) -+		*p = new; -+	local_irq_restore(flags); -+	return(prev); -+} -+ -+#endif /* _NIOS2NOMMU_SYSTEM_H */ ---- linux/include/asm-nios2nommu/termbits.h -+++ linux/include/asm-nios2nommu/termbits.h -@@ -0,0 +1,199 @@ -+#ifndef __ARCH_NIOS_TERMBITS_H__ -+#define __ARCH_NIOS_TERMBITS_H__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/termbits.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <linux/posix_types.h> -+ -+typedef unsigned char	cc_t; -+typedef unsigned int	speed_t; -+typedef unsigned int	tcflag_t; -+ -+#define NCCS 19 -+struct termios { -+	tcflag_t c_iflag;		/* input mode flags */ -+	tcflag_t c_oflag;		/* output mode flags */ -+	tcflag_t c_cflag;		/* control mode flags */ -+	tcflag_t c_lflag;		/* local mode flags */ -+	cc_t c_line;			/* line discipline */ -+	cc_t c_cc[NCCS];		/* control characters */ -+}; -+ -+/* c_cc characters */ -+#define VINTR 0 -+#define VQUIT 1 -+#define VERASE 2 -+#define VKILL 3 -+#define VEOF 4 -+#define VTIME 5 -+#define VMIN 6 -+#define VSWTC 7 -+#define VSTART 8 -+#define VSTOP 9 -+#define VSUSP 10 -+#define VEOL 11 -+#define VREPRINT 12 -+#define VDISCARD 13 -+#define VWERASE 14 -+#define VLNEXT 15 -+#define VEOL2 16 -+ -+ -+/* c_iflag bits */ -+#define IGNBRK	0000001 -+#define BRKINT	0000002 -+#define IGNPAR	0000004 -+#define PARMRK	0000010 -+#define INPCK	0000020 -+#define ISTRIP	0000040 -+#define INLCR	0000100 -+#define IGNCR	0000200 -+#define ICRNL	0000400 -+#define IUCLC	0001000 -+#define IXON	0002000 -+#define IXANY	0004000 -+#define IXOFF	0010000 -+#define IMAXBEL	0020000 -+#define IUTF8	0040000 -+ -+/* c_oflag bits */ -+#define OPOST	0000001 -+#define OLCUC	0000002 -+#define ONLCR	0000004 -+#define OCRNL	0000010 -+#define ONOCR	0000020 -+#define ONLRET	0000040 -+#define OFILL	0000100 -+#define OFDEL	0000200 -+#define NLDLY	0000400 -+#define   NL0	0000000 -+#define   NL1	0000400 -+#define CRDLY	0003000 -+#define   CR0	0000000 -+#define   CR1	0001000 -+#define   CR2	0002000 -+#define   CR3	0003000 -+#define TABDLY	0014000 -+#define   TAB0	0000000 -+#define   TAB1	0004000 -+#define   TAB2	0010000 -+#define   TAB3	0014000 -+#define   XTABS	0014000 -+#define BSDLY	0020000 -+#define   BS0	0000000 -+#define   BS1	0020000 -+#define VTDLY	0040000 -+#define   VT0	0000000 -+#define   VT1	0040000 -+#define FFDLY	0100000 -+#define   FF0	0000000 -+#define   FF1	0100000 -+ -+/* c_cflag bit meaning */ -+#define CBAUD	0010017 -+#define  B0	0000000		/* hang up */ -+#define  B50	0000001 -+#define  B75	0000002 -+#define  B110	0000003 -+#define  B134	0000004 -+#define  B150	0000005 -+#define  B200	0000006 -+#define  B300	0000007 -+#define  B600	0000010 -+#define  B1200	0000011 -+#define  B1800	0000012 -+#define  B2400	0000013 -+#define  B4800	0000014 -+#define  B9600	0000015 -+#define  B19200	0000016 -+#define  B38400	0000017 -+#define EXTA B19200 -+#define EXTB B38400 -+#define CSIZE	0000060 -+#define   CS5	0000000 -+#define   CS6	0000020 -+#define   CS7	0000040 -+#define   CS8	0000060 -+#define CSTOPB	0000100 -+#define CREAD	0000200 -+#define PARENB	0000400 -+#define PARODD	0001000 -+#define HUPCL	0002000 -+#define CLOCAL	0004000 -+#define CBAUDEX 0010000 -+#define    B57600 0010001 -+#define   B115200 0010002 -+#define   B230400 0010003 -+#define   B460800 0010004 -+#define   B500000 0010005 -+#define   B576000 0010006 -+#define   B921600 0010007 -+#define  B1000000 0010010 -+#define  B1152000 0010011 -+#define  B1500000 0010012 -+#define  B2000000 0010013 -+#define  B2500000 0010014 -+#define  B3000000 0010015 -+#define  B3500000 0010016 -+#define  B4000000 0010017 -+#define CIBAUD	  002003600000	/* input baud rate (not used) */ -+#define CMSPAR	  010000000000		/* mark or space (stick) parity */ -+#define CRTSCTS	  020000000000		/* flow control */ -+ -+/* c_lflag bits */ -+#define ISIG	0000001 -+#define ICANON	0000002 -+#define XCASE	0000004 -+#define ECHO	0000010 -+#define ECHOE	0000020 -+#define ECHOK	0000040 -+#define ECHONL	0000100 -+#define NOFLSH	0000200 -+#define TOSTOP	0000400 -+#define ECHOCTL	0001000 -+#define ECHOPRT	0002000 -+#define ECHOKE	0004000 -+#define FLUSHO	0010000 -+#define PENDIN	0040000 -+#define IEXTEN	0100000 -+ -+ -+/* tcflow() and TCXONC use these */ -+#define	TCOOFF		0 -+#define	TCOON		1 -+#define	TCIOFF		2 -+#define	TCION		3 -+ -+/* tcflush() and TCFLSH use these */ -+#define	TCIFLUSH	0 -+#define	TCOFLUSH	1 -+#define	TCIOFLUSH	2 -+ -+/* tcsetattr uses these */ -+#define	TCSANOW		0 -+#define	TCSADRAIN	1 -+#define	TCSAFLUSH	2 -+ -+#endif /* __ARCH_NIOS_TERMBITS_H__ */ ---- linux/include/asm-nios2nommu/termios.h -+++ linux/include/asm-nios2nommu/termios.h -@@ -0,0 +1,132 @@ -+#ifndef _NIOS_TERMIOS_H -+#define _NIOS_TERMIOS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/termios.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/termbits.h> -+#include <asm/ioctls.h> -+  -+struct winsize { -+	unsigned short ws_row; -+	unsigned short ws_col; -+	unsigned short ws_xpixel; -+	unsigned short ws_ypixel; -+}; -+ -+#define NCC 8 -+struct termio { -+	unsigned short c_iflag;		/* input mode flags */ -+	unsigned short c_oflag;		/* output mode flags */ -+	unsigned short c_cflag;		/* control mode flags */ -+	unsigned short c_lflag;		/* local mode flags */ -+	unsigned char c_line;		/* line discipline */ -+	unsigned char c_cc[NCC];	/* control characters */ -+}; -+ -+#ifdef __KERNEL__ -+/*	intr=^C		quit=^|		erase=del	kill=^U -+	eof=^D		vtime=\0	vmin=\1		sxtc=\0 -+	start=^Q	stop=^S		susp=^Z		eol=\0 -+	reprint=^R	discard=^U	werase=^W	lnext=^V -+	eol2=\0 -+*/ -+#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" -+#endif -+ -+/* modem lines */ -+#define TIOCM_LE	0x001 -+#define TIOCM_DTR	0x002 -+#define TIOCM_RTS	0x004 -+#define TIOCM_ST	0x008 -+#define TIOCM_SR	0x010 -+#define TIOCM_CTS	0x020 -+#define TIOCM_CAR	0x040 -+#define TIOCM_RNG	0x080 -+#define TIOCM_DSR	0x100 -+#define TIOCM_CD	TIOCM_CAR -+#define TIOCM_RI	TIOCM_RNG -+#define TIOCM_OUT1	0x2000 -+#define TIOCM_OUT2	0x4000 -+#define TIOCM_LOOP	0x8000 -+ -+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ -+ -+/* line disciplines */ -+#define N_TTY		0 -+#define N_SLIP		1 -+#define N_MOUSE		2 -+#define N_PPP		3 -+#define N_STRIP		4 -+#define N_AX25		5 -+#define N_X25		6	/* X.25 async */ -+#define N_6PACK		7 -+#define N_MASC		8	/* Reserved for Mobitex module <kaz@cafe.net> */ -+#define N_R3964		9	/* Reserved for Simatic R3964 module */ -+#define N_PROFIBUS_FDL	10	/* Reserved for Profibus <Dave@mvhi.com> */ -+#define N_IRDA		11	/* Linux IrDa - http://irda.sourceforge.net/ */ -+#define N_SMSBLOCK	12	/* SMS block mode - for talking to GSM data cards about SMS messages */ -+#define N_HDLC		13	/* synchronous HDLC */ -+#define N_SYNC_PPP	14 -+#define N_HCI		15  /* Bluetooth HCI UART */ -+ -+#ifdef __KERNEL__ -+ -+/* -+ * Translate a "termio" structure into a "termios". Ugh. -+ */ -+#define user_termio_to_kernel_termios(termios, termio) \ -+({ \ -+	unsigned short tmp; \ -+	get_user(tmp, &(termio)->c_iflag); \ -+	(termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \ -+	get_user(tmp, &(termio)->c_oflag); \ -+	(termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \ -+	get_user(tmp, &(termio)->c_cflag); \ -+	(termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \ -+	get_user(tmp, &(termio)->c_lflag); \ -+	(termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \ -+	get_user((termios)->c_line, &(termio)->c_line); \ -+	copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \ -+}) -+ -+/* -+ * Translate a "termios" structure into a "termio". Ugh. -+ */ -+#define kernel_termios_to_user_termio(termio, termios) \ -+({ \ -+	put_user((termios)->c_iflag, &(termio)->c_iflag); \ -+	put_user((termios)->c_oflag, &(termio)->c_oflag); \ -+	put_user((termios)->c_cflag, &(termio)->c_cflag); \ -+	put_user((termios)->c_lflag, &(termio)->c_lflag); \ -+	put_user((termios)->c_line,  &(termio)->c_line); \ -+	copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \ -+}) -+ -+#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios)) -+#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios)) -+ -+#endif	/* __KERNEL__ */ -+ -+#endif /* _NIOS_TERMIOS_H */ ---- linux/include/asm-nios2nommu/thread_info.h -+++ linux/include/asm-nios2nommu/thread_info.h -@@ -0,0 +1,127 @@ -+/* thread_info.h: niosnommu low-level thread information -+ * adapted from the m68knommu -+ * -+ * Copyright (C) 2004 Microtronix Datacom Ltd. -+ * Copyright (C) 2002 Microtronix Datacom  -+ * -+ * - Incorporating suggestions made by Linus Torvalds and Dave Miller -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+ -+#ifndef _ASM_THREAD_INFO_H -+#define _ASM_THREAD_INFO_H -+ -+#include <asm/page.h> -+ -+#ifdef __KERNEL__ -+ -+#ifndef __ASSEMBLY__ -+ -+/* -+ * low level task data. -+ */ -+struct thread_info { -+	struct task_struct *task;		/* main task structure */ -+	struct exec_domain *exec_domain;	/* execution domain */ -+	unsigned long	   flags;		/* low level flags */ -+	int		   cpu;			/* cpu we're on */ -+	int		   preempt_count;	/* 0 => preemptable, <0 => BUG*/ -+	struct restart_block restart_block; -+}; -+ -+/* -+ * macros/functions for gaining access to the thread information structure -+ */ -+#define INIT_THREAD_INFO(tsk)			\ -+{						\ -+	.task		= &tsk,			\ -+	.exec_domain	= &default_exec_domain,	\ -+	.flags		= 0,			\ -+	.cpu		= 0,			\ -+	.preempt_count	= 1,			\ -+	.restart_block	= {			\ -+		.fn = do_no_restart_syscall,	\ -+	},					\ -+} -+ -+#define init_thread_info	(init_thread_union.thread_info) -+#define init_stack		(init_thread_union.stack) -+ -+ -+/* how to get the thread information struct from C -+   usable only in supervisor mode */ -+static inline struct thread_info *current_thread_info(void) -+{ -+	struct thread_info *ti; -+	__asm__ __volatile__( -+		"mov	%0, sp\n" -+		"and	%0, %0, %1\n" -+		: "=&r"(ti) -+		: "r" (~(THREAD_SIZE-1)) -+		); -+	return ti; -+} -+ -+/* thread information allocation */ -+#define alloc_thread_info(tsk) ((struct thread_info *) \ -+				__get_free_pages(GFP_KERNEL, 1)) -+#define free_thread_info(ti)	free_pages((unsigned long) (ti), 1) -+#define put_thread_info(ti)	put_task_struct((ti)->task) -+ -+#define	PREEMPT_ACTIVE	0x4000000 -+ -+/* -+ * thread information flag bit numbers -+ */ -+#define TIF_SYSCALL_TRACE 	0	/* syscall trace active */ -+#define TIF_NOTIFY_RESUME 	1	/* resumption notification requested */ -+#define TIF_SIGPENDING	  	2	/* signal pending */ -+#define TIF_NEED_RESCHED  	3	/* rescheduling necessary */ -+#define TIF_POLLING_NRFLAG	4	/* true if poll_idle() is polling -+					   TIF_NEED_RESCHED */ -+#define TIF_MEMDIE		5 -+ -+/* as above, but as bit values */ -+#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE) -+#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME) -+#define _TIF_SIGPENDING		(1<<TIF_SIGPENDING) -+#define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED) -+#define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG) -+ -+#define _TIF_WORK_MASK		0x0000FFFE	/* work to do on interrupt/exception return */ -+ -+#else /* __ASSEMBLY__ */ -+ -+/* how to get the thread information struct from ASM  -+   usable only in supervisor mode */ -+.macro GET_THREAD_INFO reg  -+.if THREAD_SIZE & 0xffff0000 -+	andhi	\reg, sp, %hi(~(THREAD_SIZE-1)) -+.else -+	addi	\reg, r0, %lo(~(THREAD_SIZE-1)) -+	and	\reg, \reg, sp -+.endif -+.endm -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _ASM_THREAD_INFO_H */ ---- linux/include/asm-nios2nommu/timer_struct.h -+++ linux/include/asm-nios2nommu/timer_struct.h -@@ -0,0 +1,38 @@ -+ -+// ---------------------------------------------- -+// Timer Peripheral -+ -+// Timer Registers -+typedef volatile struct -+	{ -+	int np_timerstatus;  // read only, 2 bits (any write to clear TO) -+	int np_timercontrol; // write/readable, 4 bits -+	int np_timerperiodl; // write/readable, 16 bits -+	int np_timerperiodh; // write/readable, 16 bits -+	int np_timersnapl;   // read only, 16 bits -+	int np_timersnaph;   // read only, 16 bits -+	} np_timer; -+ -+// Timer Register Bits -+enum -+	{ -+	np_timerstatus_run_bit    = 1, // timer is running -+	np_timerstatus_to_bit     = 0, // timer has timed out -+ -+	np_timercontrol_stop_bit  = 3, // stop the timer -+	np_timercontrol_start_bit = 2, // start the timer -+	np_timercontrol_cont_bit  = 1, // continous mode -+	np_timercontrol_ito_bit   = 0, // enable time out interrupt -+ -+	np_timerstatus_run_mask    = (1<<1), // timer is running -+	np_timerstatus_to_mask     = (1<<0), // timer has timed out -+ -+	np_timercontrol_stop_mask  = (1<<3), // stop the timer -+	np_timercontrol_start_mask = (1<<2), // start the timer -+	np_timercontrol_cont_mask  = (1<<1), // continous mode -+	np_timercontrol_ito_mask   = (1<<0)  // enable time out interrupt -+	}; -+ -+// Timer Routines -+int nr_timer_milliseconds(void);	// Starts on first call, hogs timer1. -+ ---- linux/include/asm-nios2nommu/timex.h -+++ linux/include/asm-nios2nommu/timex.h -@@ -0,0 +1,48 @@ -+#ifndef _ASMNIOS2NOMMU_TIMEX_H -+#define _ASMNIOS2NOMMU_TIMEX_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/timex.h -+ * -+ * timex specifications -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/nios.h> -+ -+ -+#define CLOCK_TICK_RATE	nasys_clock_freq /* Underlying HZ */ -+ -+#define CLOCK_TICK_FACTOR	20	/* Factor of both 1000000 and CLOCK_TICK_RATE */ -+ -+#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \ -+	(1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \ -+		<< (SHIFT_SCALE-SHIFT_HZ)) / HZ) -+ -+typedef unsigned long cycles_t; -+ -+static inline cycles_t get_cycles(void) -+{ -+	return 0; -+} -+ -+#endif ---- linux/include/asm-nios2nommu/tlbflush.h -+++ linux/include/asm-nios2nommu/tlbflush.h -@@ -0,0 +1,86 @@ -+#ifndef _NIOS2NOMMU_TLBFLUSH_H -+#define _NIOS2NOMMU_TLBFLUSH_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/tlbflush.h -+ * -+ * Ported from m68knommu. -+ * -+ * Copyright (C) 2003 Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+#include <asm/setup.h> -+ -+/* -+ * flush all user-space atc entries. -+ */ -+static inline void __flush_tlb(void) -+{ -+	BUG(); -+} -+ -+static inline void __flush_tlb_one(unsigned long addr) -+{ -+	BUG(); -+} -+ -+#define flush_tlb() __flush_tlb() -+ -+/* -+ * flush all atc entries (both kernel and user-space entries). -+ */ -+static inline void flush_tlb_all(void) -+{ -+	BUG(); -+} -+ -+static inline void flush_tlb_mm(struct mm_struct *mm) -+{ -+	BUG(); -+} -+ -+static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) -+{ -+	BUG(); -+} -+ -+static inline void flush_tlb_range(struct mm_struct *mm, -+				   unsigned long start, unsigned long end) -+{ -+	BUG(); -+} -+ -+extern inline void flush_tlb_kernel_page(unsigned long addr) -+{ -+	BUG(); -+} -+ -+extern inline void flush_tlb_pgtables(struct mm_struct *mm, -+				      unsigned long start, unsigned long end) -+{ -+	BUG(); -+} -+ -+#endif /* _NIOS2NOMMU_TLBFLUSH_H */ ---- linux/include/asm-nios2nommu/tlb.h -+++ linux/include/asm-nios2nommu/tlb.h -@@ -0,0 +1,35 @@ -+#ifndef __NIOS_TLB_H__ -+#define __NIOS_TLB_H__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/tlb.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ *  Copyright (C) 2003  Microtronix Datacom Ltd -+ *  Copyright (C) 2002  NEC Corporation -+ *  Copyright (C) 2002  Miles Bader <miles@gnu.org> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Written by Miles Bader <miles@gnu.org> -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+#define tlb_flush(tlb)	((void)0) -+ -+#include <asm-generic/tlb.h> -+ -+#endif /* __NIOS_TLB_H__ */ -+ ---- linux/include/asm-nios2nommu/topology.h -+++ linux/include/asm-nios2nommu/topology.h -@@ -0,0 +1,30 @@ -+#ifndef _ASM_NIOS2NOMMU_TOPOLOGY_H -+#define _ASM_NIOS2NOMMU_TOPOLOGY_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/topology.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm-generic/topology.h> -+ -+#endif /* _ASM_NIOS2NOMMU_TOPOLOGY_H */ ---- linux/include/asm-nios2nommu/traps.h -+++ linux/include/asm-nios2nommu/traps.h -@@ -0,0 +1,27 @@ -+/* -+ * Copyright (C) 2004, Microtronix Datacom Ltd. -+ * -+ * All rights reserved.           -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or -+ * NON INFRINGEMENT.  See the GNU General Public License for more -+ * details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+ * -+ */ -+#ifndef _NIOS2_TRAPS_H -+#define _NIOS2_TRAPS_H -+ -+#define TRAP_ID_SYSCALL 0 -+#define TRAP_ID_APPDEBUG 1 -+#endif /* !(_NIOS2_TRAPS_H) */ ---- linux/include/asm-nios2nommu/types.h -+++ linux/include/asm-nios2nommu/types.h -@@ -0,0 +1,93 @@ -+#ifndef _NIOS_TYPES_H -+#define _NIOS_TYPES_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/types.h -+ * -+ * Derived from m68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* -+ * This file is never included by application software unless -+ * explicitly requested (e.g., via linux/types.h) in which case the -+ * application is Linux specific so (user-) name space pollution is -+ * not a major issue.  However, for interoperability, libraries still -+ * need to be careful to avoid a name clashes. -+ */ -+ -+#ifndef __ASSEMBLY__ -+ -+typedef unsigned short umode_t; -+ -+/* -+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the -+ * header files exported to user space -+ */ -+ -+typedef __signed__ char __s8; -+typedef unsigned char __u8; -+ -+typedef __signed__ short __s16; -+typedef unsigned short __u16; -+ -+typedef __signed__ int __s32; -+typedef unsigned int __u32; -+ -+#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -+typedef __signed__ long long __s64; -+typedef unsigned long long __u64; -+#endif -+ -+#endif /* __ASSEMBLY__ */ -+ -+/* -+ * These aren't exported outside the kernel to avoid name space clashes -+ */ -+#ifdef __KERNEL__ -+ -+#define BITS_PER_LONG 32 -+ -+#ifndef __ASSEMBLY__ -+ -+typedef signed char s8; -+typedef unsigned char u8; -+ -+typedef signed short s16; -+typedef unsigned short u16; -+ -+typedef signed int s32; -+typedef unsigned int u32; -+ -+typedef signed long long s64; -+typedef unsigned long long u64; -+ -+/* DMA addresses are always 32-bits wide */ -+ -+typedef u32 dma_addr_t; -+typedef u32 dma64_addr_t; -+ -+typedef unsigned short kmem_bufctl_t; -+ -+#endif /* __ASSEMBLY__ */ -+ -+#endif /* __KERNEL__ */ -+ -+#endif /* _NIOS_TYPES_H */ ---- linux/include/asm-nios2nommu/uaccess.h -+++ linux/include/asm-nios2nommu/uaccess.h -@@ -0,0 +1,183 @@ -+#ifndef __NIOS2NOMMU_UACCESS_H -+#define __NIOS2NOMMU_UACCESS_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * asm-nios2nommu/uaccess.h -+ * -+ * User space memory access functions -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Ported from asm-m68knommu/uaccess.h --wentao -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <linux/sched.h> -+#include <linux/mm.h> -+#include <asm/segment.h> -+#include <asm/nios.h> -+ -+#define VERIFY_READ	0 -+#define VERIFY_WRITE	1 -+ -+#define access_ok(type,addr,size)	_access_ok((unsigned long)(addr),(size)) -+ -+static inline int _access_ok(unsigned long addr, unsigned long size) -+{ -+	return (((unsigned long)addr < (unsigned long)nasys_program_mem_end) && -+		(((unsigned long)addr >= (unsigned long)nasys_program_mem))); -+} -+ -+extern inline int verify_area(int type, const void * addr, unsigned long size) -+{ -+	return access_ok(type,addr,size)?0:-EFAULT; -+} -+ -+/* -+ * The exception table consists of pairs of addresses: the first is the -+ * address of an instruction that is allowed to fault, and the second is -+ * the address at which the program should continue.  No registers are -+ * modified, so it is entirely up to the continuation code to figure out -+ * what to do. -+ * -+ * All the routines below use bits of fixup code that are out of line -+ * with the main instruction path.  This means when everything is well, -+ * we don't even have to jump over them.  Further, they do not intrude -+ * on our cache or tlb entries. -+ */ -+ -+#define ARCH_HAS_SEARCH_EXTABLE -+//;dgt2;tmp; -+ -+struct exception_table_entry -+{ -+	unsigned long insn, fixup; -+}; -+ -+/* Returns 0 if exception not found and fixup otherwise.  */ -+extern unsigned long search_exception_table(unsigned long); -+ -+ -+/* -+ * These are the main single-value transfer routines.  They automatically -+ * use the right size if we just have the right pointer type. -+ */ -+ -+#define put_user(x, ptr)				\ -+({							\ -+    int __pu_err = 0;					\ -+    typeof(*(ptr)) __pu_val = (x);			\ -+    switch (sizeof (*(ptr))) {				\ -+    case 1:						\ -+    case 2:						\ -+    case 4:						\ -+    case 8:						\ -+	memcpy(ptr, &__pu_val, sizeof (*(ptr))); \ -+	break;						\ -+    default:						\ -+	__pu_err = __put_user_bad();			\ -+	break;						\ -+    }							\ -+    __pu_err;						\ -+}) -+#define __put_user(x, ptr) put_user(x, ptr) -+ -+extern int __put_user_bad(void); -+ -+/* -+ * Tell gcc we read from memory instead of writing: this is because -+ * we do not write to any memory gcc knows about, so there are no -+ * aliasing issues. -+ */ -+ -+#define __ptr(x) ((unsigned long *)(x)) -+ -+#define get_user(x, ptr)					\ -+({								\ -+    int __gu_err = 0;						\ -+    typeof(*(ptr)) __gu_val = 0;				\ -+    switch (sizeof(*(ptr))) {					\ -+    case 1:						\ -+    case 2:						\ -+    case 4:						\ -+    case 8:						\ -+	memcpy(&__gu_val, ptr, sizeof (*(ptr))); \ -+	break;							\ -+    default:							\ -+	__gu_val = 0;						\ -+	__gu_err = __get_user_bad();				\ -+	break;							\ -+    }								\ -+    (x) = __gu_val;						\ -+    __gu_err;							\ -+}) -+#define __get_user(x, ptr) get_user(x, ptr) -+ -+extern int __get_user_bad(void); -+ -+#define copy_from_user(to, from, n)		(memcpy(to, from, n), 0) -+#define copy_to_user(to, from, n)		(memcpy(to, from, n), 0) -+ -+#define __copy_from_user(to, from, n) copy_from_user(to, from, n) -+#define __copy_to_user(to, from, n) copy_to_user(to, from, n) -+#define __copy_to_user_inatomic __copy_to_user -+#define __copy_from_user_inatomic __copy_from_user -+ -+#define copy_to_user_ret(to,from,n,retval) ({ if (copy_to_user(to,from,n)) return retval; }) -+ -+#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; }) -+ -+/* -+ * Copy a null terminated string from userspace. -+ */ -+ -+static inline long -+strncpy_from_user(char *dst, const char *src, long count) -+{ -+	char *tmp; -+	strncpy(dst, src, count); -+	for (tmp = dst; *tmp && count > 0; tmp++, count--) -+		; -+	return(tmp - dst); /* DAVIDM should we count a NUL ?  check getname */ -+} -+ -+/* -+ * Return the size of a string (including the ending 0) -+ * -+ * Return 0 on exception, a value greater than N if too long -+ */ -+static inline long strnlen_user(const char *src, long n) -+{ -+	return(strlen(src) + 1); /* DAVIDM make safer */ -+} -+ -+#define strlen_user(str) strnlen_user(str, 32767) -+ -+/* -+ * Zero Userspace -+ */ -+ -+static inline unsigned long -+clear_user(void *to, unsigned long n) -+{ -+	memset(to, 0, n); -+    return(0); -+} -+ -+#endif /* _NIOS2NOMMU_UACCESS_H */ ---- linux/include/asm-nios2nommu/uart_struct.h -+++ linux/include/asm-nios2nommu/uart_struct.h -@@ -0,0 +1,83 @@ -+ -+// UART Registers -+typedef volatile struct -+	{ -+	int np_uartrxdata;      // Read-only, 8-bit -+	int np_uarttxdata;      // Write-only, 8-bit -+	int np_uartstatus;      // Read-only, 8-bit -+	int np_uartcontrol;     // Read/Write, 9-bit -+	int np_uartdivisor;     // Read/Write, 16-bit, optional -+	int np_uartendofpacket; // Read/Write, end-of-packet character -+	} np_uart; -+ -+// UART Status Register Bits -+enum -+	{ -+	np_uartstatus_eop_bit  = 12, -+	np_uartstatus_cts_bit  = 11, -+	np_uartstatus_dcts_bit = 10, -+	np_uartstatus_e_bit    = 8, -+	np_uartstatus_rrdy_bit = 7, -+	np_uartstatus_trdy_bit = 6, -+	np_uartstatus_tmt_bit  = 5, -+	np_uartstatus_toe_bit  = 4, -+	np_uartstatus_roe_bit  = 3, -+	np_uartstatus_brk_bit  = 2, -+	np_uartstatus_fe_bit   = 1, -+	np_uartstatus_pe_bit   = 0, -+ -+	np_uartstatus_eop_mask  = (1<<12), -+	np_uartstatus_cts_mask  = (1<<11), -+	np_uartstatus_dcts_mask = (1<<10), -+	np_uartstatus_e_mask    = (1<<8), -+	np_uartstatus_rrdy_mask = (1<<7), -+	np_uartstatus_trdy_mask = (1<<6), -+	np_uartstatus_tmt_mask  = (1<<5), -+	np_uartstatus_toe_mask  = (1<<4), -+	np_uartstatus_roe_mask  = (1<<3), -+	np_uartstatus_brk_mask  = (1<<2), -+	np_uartstatus_fe_mask   = (1<<1), -+	np_uartstatus_pe_mask   = (1<<0) -+	}; -+ -+// UART Control Register Bits -+enum -+	{ -+	np_uartcontrol_ieop_bit  = 12, -+	np_uartcontrol_rts_bit   = 11, -+	np_uartcontrol_idcts_bit = 10, -+	np_uartcontrol_tbrk_bit  = 9, -+	np_uartcontrol_ie_bit    = 8, -+	np_uartcontrol_irrdy_bit = 7, -+	np_uartcontrol_itrdy_bit = 6, -+	np_uartcontrol_itmt_bit  = 5, -+	np_uartcontrol_itoe_bit  = 4, -+	np_uartcontrol_iroe_bit  = 3, -+	np_uartcontrol_ibrk_bit  = 2, -+	np_uartcontrol_ife_bit   = 1, -+	np_uartcontrol_ipe_bit   = 0, -+ -+	np_uartcontrol_ieop_mask  = (1<<12), -+	np_uartcontrol_rts_mask   = (1<<11), -+	np_uartcontrol_idcts_mask = (1<<10), -+	np_uartcontrol_tbrk_mask  = (1<<9), -+	np_uartcontrol_ie_mask    = (1<<8), -+	np_uartcontrol_irrdy_mask = (1<<7), -+	np_uartcontrol_itrdy_mask = (1<<6), -+	np_uartcontrol_itmt_mask  = (1<<5), -+	np_uartcontrol_itoe_mask  = (1<<4), -+	np_uartcontrol_iroe_mask  = (1<<3), -+	np_uartcontrol_ibrk_mask  = (1<<2), -+	np_uartcontrol_ife_mask   = (1<<1), -+	np_uartcontrol_ipe_mask   = (1<<0) -+	}; -+ -+// UART Routines -+int nr_uart_rxchar(np_uart *uartBase);        // 0 for default UART -+void nr_uart_txcr(void); -+void nr_uart_txchar(int c,np_uart *uartBase); // 0 for default UART -+void nr_uart_txhex(int x);                     // 16 or 32 bits -+void nr_uart_txhex16(short x); -+void nr_uart_txhex32(long x); -+void nr_uart_txstring(char *s); -+ ---- linux/include/asm-nios2nommu/ucontext.h -+++ linux/include/asm-nios2nommu/ucontext.h -@@ -0,0 +1,63 @@ -+#ifndef _NIOSKNOMMU_UCONTEXT_H -+#define _NIOSKNOMMU_UCONTEXT_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/ucontext.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+typedef int greg_t; -+#define NGREG 32 -+typedef greg_t gregset_t[NGREG]; -+ -+#ifdef CONFIG_FPU -+typedef struct fpregset { -+	int f_pcr; -+	int f_psr; -+	int f_fpiaddr; -+	int f_fpregs[8][3]; -+} fpregset_t; -+#endif -+ -+struct mcontext { -+	int version; -+	int status_extension; -+	gregset_t gregs; -+#ifdef CONFIG_FPU -+	fpregset_t fpregs; -+#endif -+}; -+ -+#define MCONTEXT_VERSION 2 -+ -+struct ucontext { -+	unsigned long	  uc_flags; -+	struct ucontext  *uc_link; -+	stack_t		  uc_stack; -+	struct mcontext	  uc_mcontext; -+#ifdef CONFIG_FPU -+	unsigned long	  uc_filler[80]; -+#endif -+	sigset_t	  uc_sigmask;	/* mask last for extensibility */ -+}; -+ -+#endif ---- linux/include/asm-nios2nommu/unaligned.h -+++ linux/include/asm-nios2nommu/unaligned.h -@@ -0,0 +1,43 @@ -+#ifndef __NIOS_UNALIGNED_H -+#define __NIOS_UNALIGNED_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/unaligned.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* -+ * The nios cannot do unaligned accesses itself.  -+ */  -+ -+#define get_unaligned(ptr) ({			\ -+	typeof((*(ptr))) x;			\ -+	memcpy(&x, (void*)ptr, sizeof(*(ptr)));	\ -+	x;					\ -+}) -+ -+#define put_unaligned(val, ptr) ({		\ -+	typeof((*(ptr))) x = val;		\ -+	memcpy((void*)ptr, &x, sizeof(*(ptr)));	\ -+}) -+ -+#endif /* __NIOS_UNALIGNED_H */ ---- linux/include/asm-nios2nommu/unistd.h -+++ linux/include/asm-nios2nommu/unistd.h -@@ -0,0 +1,686 @@ -+#ifndef _ASM_NIOS_UNISTD_H_ -+#define _ASM_NIOS_UNISTD_H_ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/unistd.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * //vic - kernel_thread moved to process.c -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/traps.h> -+ -+/* TRAP isr expects the trap# (syscall=#TRAP_ID_SYSCALL) in r2, -+ *  the syscall # in r3, and arguments in r4, r5, ... -+ * Return argument expected in r2. -+ */ -+ -+#define __NR_restart_syscall      0 -+#define __NR_exit		  1 -+#define __NR_fork		  2 -+#define __NR_read		  3 -+#define __NR_write		  4 -+#define __NR_open		  5 -+#define __NR_close		  6 -+#define __NR_waitpid		  7 -+#define __NR_creat		  8 -+#define __NR_link		  9 -+#define __NR_unlink		 10 -+#define __NR_execve		 11 -+#define __NR_chdir		 12 -+#define __NR_time		 13 -+#define __NR_mknod		 14 -+#define __NR_chmod		 15 -+#define __NR_chown		 16 -+#define __NR_break		 17 -+#define __NR_oldstat		 18 -+#define __NR_lseek		 19 -+#define __NR_getpid		 20 -+#define __NR_mount		 21 -+#define __NR_umount		 22 -+#define __NR_setuid		 23 -+#define __NR_getuid		 24 -+#define __NR_stime		 25 -+#define __NR_ptrace		 26 -+#define __NR_alarm		 27 -+#define __NR_oldfstat		 28 -+#define __NR_pause		 29 -+#define __NR_utime		 30 -+#define __NR_stty		 31 -+#define __NR_gtty		 32 -+#define __NR_access		 33 -+#define __NR_nice		 34 -+#define __NR_ftime		 35 -+#define __NR_sync		 36 -+#define __NR_kill		 37 -+#define __NR_rename		 38 -+#define __NR_mkdir		 39 -+#define __NR_rmdir		 40 -+#define __NR_dup		 41 -+#define __NR_pipe		 42 -+#define __NR_times		 43 -+#define __NR_prof		 44 -+#define __NR_brk		 45 -+#define __NR_setgid		 46 -+#define __NR_getgid		 47 -+#define __NR_signal		 48 -+#define __NR_geteuid		 49 -+#define __NR_getegid		 50 -+#define __NR_acct		 51 -+#define __NR_umount2		 52	//vic #define __NR_phys		 52 -+#define __NR_lock		 53 -+#define __NR_ioctl		 54 -+#define __NR_fcntl		 55 -+#define __NR_mpx		 56 -+#define __NR_setpgid		 57 -+#define __NR_ulimit		 58 -+#define __NR_oldolduname	 59 -+#define __NR_umask		 60 -+#define __NR_chroot		 61 -+#define __NR_ustat		 62 -+#define __NR_dup2		 63 -+#define __NR_getppid		 64 -+#define __NR_getpgrp		 65 -+#define __NR_setsid		 66 -+#define __NR_sigaction		 67 -+#define __NR_sgetmask		 68 -+#define __NR_ssetmask		 69 -+#define __NR_setreuid		 70 -+#define __NR_setregid		 71 -+#define __NR_sigsuspend		 72 -+#define __NR_sigpending		 73 -+#define __NR_sethostname	 74 -+#define __NR_setrlimit		 75 -+#define __NR_getrlimit		 76 -+#define __NR_getrusage		 77 -+#define __NR_gettimeofday	 78 -+#define __NR_settimeofday	 79 -+#define __NR_getgroups		 80 -+#define __NR_setgroups		 81 -+#define __NR_select		 82 -+#define __NR_symlink		 83 -+#define __NR_oldlstat		 84 -+#define __NR_readlink		 85 -+#define __NR_uselib		 86 -+#define __NR_swapon		 87 -+#define __NR_reboot		 88 -+#define __NR_readdir		 89 -+#define __NR_mmap		 90 -+#define __NR_munmap		 91 -+#define __NR_truncate		 92 -+#define __NR_ftruncate		 93 -+#define __NR_fchmod		 94 -+#define __NR_fchown		 95 -+#define __NR_getpriority	 96 -+#define __NR_setpriority	 97 -+#define __NR_profil		 98 -+#define __NR_statfs		 99 -+#define __NR_fstatfs		100 -+#define __NR_ioperm		101 -+#define __NR_socketcall		102 -+#define __NR_syslog		103 -+#define __NR_setitimer		104 -+#define __NR_getitimer		105 -+#define __NR_stat		106 -+#define __NR_lstat		107 -+#define __NR_fstat		108 -+#define __NR_olduname		109 -+#define __NR_iopl		/* 110 */ not supported -+#define __NR_vhangup		111 -+#define __NR_idle		/* 112 */ Obsolete -+#define __NR_vm86		/* 113 */ not supported -+#define __NR_wait4		114 -+#define __NR_swapoff		115 -+#define __NR_sysinfo		116 -+#define __NR_ipc		117 -+#define __NR_fsync		118 -+#define __NR_sigreturn		119 -+#define __NR_clone		120 -+#define __NR_setdomainname	121 -+#define __NR_uname		122 -+#define __NR_cacheflush		123 -+#define __NR_adjtimex		124 -+#define __NR_mprotect		125 -+#define __NR_sigprocmask	126 -+#define __NR_create_module	127 -+#define __NR_init_module	128 -+#define __NR_delete_module	129 -+#define __NR_get_kernel_syms	130 -+#define __NR_quotactl		131 -+#define __NR_getpgid		132 -+#define __NR_fchdir		133 -+#define __NR_bdflush		134 -+#define __NR_sysfs		135 -+#define __NR_personality	136 -+#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ -+#define __NR_setfsuid		138 -+#define __NR_setfsgid		139 -+#define __NR__llseek		140 -+#define __NR_getdents		141 -+#define __NR__newselect		142 -+#define __NR_flock		143 -+#define __NR_msync		144 -+#define __NR_readv		145 -+#define __NR_writev		146 -+#define __NR_getsid		147 -+#define __NR_fdatasync		148 -+#define __NR__sysctl		149 -+#define __NR_mlock		150 -+#define __NR_munlock		151 -+#define __NR_mlockall		152 -+#define __NR_munlockall		153 -+#define __NR_sched_setparam		154 -+#define __NR_sched_getparam		155 -+#define __NR_sched_setscheduler		156 -+#define __NR_sched_getscheduler		157 -+#define __NR_sched_yield		158 -+#define __NR_sched_get_priority_max	159 -+#define __NR_sched_get_priority_min	160 -+#define __NR_sched_rr_get_interval	161 -+#define __NR_nanosleep		162 -+#define __NR_mremap		163 -+#define __NR_setresuid		164 -+#define __NR_getresuid		165 -+#define __NR_getpagesize	166 -+#define __NR_query_module	167 -+#define __NR_poll		168 -+#define __NR_nfsservctl		169 -+#define __NR_setresgid		170 -+#define __NR_getresgid		171 -+#define __NR_prctl		172 -+#define __NR_rt_sigreturn	173 -+#define __NR_rt_sigaction	174 -+#define __NR_rt_sigprocmask	175 -+#define __NR_rt_sigpending	176 -+#define __NR_rt_sigtimedwait	177 -+#define __NR_rt_sigqueueinfo	178 -+#define __NR_rt_sigsuspend	179 -+#define __NR_pread		180 -+#define __NR_pwrite		181 -+#define __NR_lchown		182 -+#define __NR_getcwd		183 -+#define __NR_capget		184 -+#define __NR_capset		185 -+#define __NR_sigaltstack	186 -+#define __NR_sendfile		187 -+#define __NR_getpmsg		188	/* some people actually want streams */ -+#define __NR_putpmsg		189	/* some people actually want streams */ -+#define __NR_vfork		190 -+#define __NR_ugetrlimit		191 -+#define __NR_mmap2		192 -+#define __NR_truncate64		193 -+#define __NR_ftruncate64	194 -+#define __NR_stat64		195 -+#define __NR_lstat64		196 -+#define __NR_fstat64		197 -+#define __NR_chown32		198 -+#define __NR_getuid32		199 -+#define __NR_getgid32		200 -+#define __NR_geteuid32		201 -+#define __NR_getegid32		202 -+#define __NR_setreuid32		203 -+#define __NR_setregid32		204 -+#define __NR_getgroups32	205 -+#define __NR_setgroups32	206 -+#define __NR_fchown32		207 -+#define __NR_setresuid32	208 -+#define __NR_getresuid32	209 -+#define __NR_setresgid32	210 -+#define __NR_getresgid32	211 -+#define __NR_lchown32		212 -+#define __NR_setuid32		213 -+#define __NR_setgid32		214 -+#define __NR_setfsuid32		215 -+#define __NR_setfsgid32		216 -+#define __NR_pivot_root		217 -+/* 218 unused */ -+/* 219 unused */ -+#define __NR_getdents64		220 -+#define __NR_gettid		221 -+#define __NR_tkill		222 -+#define __NR_setxattr		223 -+#define __NR_lsetxattr		224 -+#define __NR_fsetxattr		225 -+#define __NR_getxattr		226 -+#define __NR_lgetxattr		227 -+#define __NR_fgetxattr		228 -+#define __NR_listxattr		229 -+#define __NR_llistxattr		230 -+#define __NR_flistxattr		231 -+#define __NR_removexattr	232 -+#define __NR_lremovexattr	233 -+#define __NR_fremovexattr	234 -+#define __NR_futex		235 -+#define __NR_sendfile64		236 -+#define __NR_mincore		237 -+#define __NR_madvise		238 -+#define __NR_fcntl64		239 -+#define __NR_readahead		240 -+#define __NR_io_setup		241 -+#define __NR_io_destroy		242 -+#define __NR_io_getevents	243 -+#define __NR_io_submit		244 -+#define __NR_io_cancel		245 -+#define __NR_fadvise64		246 -+#define __NR_exit_group		247 -+#define __NR_lookup_dcookie	248 -+#define __NR_epoll_create	249 -+#define __NR_epoll_ctl		250 -+#define __NR_epoll_wait		251 -+#define __NR_remap_file_pages	252 -+#define __NR_set_tid_address	253 -+#define __NR_timer_create	254 -+#define __NR_timer_settime	255 -+#define __NR_timer_gettime	256 -+#define __NR_timer_getoverrun	257 -+#define __NR_timer_delete	258 -+#define __NR_clock_settime	259 -+#define __NR_clock_gettime	260 -+#define __NR_clock_getres	261 -+#define __NR_clock_nanosleep	262 -+#define __NR_statfs64		263 -+#define __NR_fstatfs64		264 -+#define __NR_tgkill		265 -+#define __NR_utimes		266 -+#define __NR_fadvise64_64	267 -+#define __NR_mbind		268 -+#define __NR_get_mempolicy	269 -+#define __NR_set_mempolicy	270 -+#define __NR_mq_open		271 -+#define __NR_mq_unlink		272 -+#define __NR_mq_timedsend	273 -+#define __NR_mq_timedreceive	274 -+#define __NR_mq_notify		275 -+#define __NR_mq_getsetattr	276 -+#define __NR_waitid		277 -+#define __NR_sys_setaltroot	278 -+#define __NR_add_key		279 -+#define __NR_request_key	280 -+#define __NR_keyctl		281 -+ -+#define NR_syscalls		282 -+ -+/* user-visible error numbers are in the range -1 - -122: see -+   <asm-nios2nommu/errno.h> */ -+ -+#define __syscall_return(type, res) \ -+do { \ -+	if ((unsigned long)(res) >= (unsigned long)(-125)) { \ -+                                                                        \ -+                /* avoid using res which is declared to be in           \ -+                    register r2; errno might expand to a function       \ -+                    call and clobber it.                          */    \ -+                                                                        \ -+		int __err = -(res); \ -+		errno = __err; \ -+		res = -1; \ -+	} \ -+	return (type) (res); \ -+} while (0) -+ -+#define _syscall0(type,name) \ -+type name(void) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall1 arg a -+//;dgt2;tmp; already being in r4 ? -+#define _syscall1(type,name,atype,a) \ -+type name(atype a) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall2 args a,b -+//;dgt2;tmp; already being in r4,r5 ? -+#define _syscall2(type,name,atype,a,btype,b) \ -+type name(atype a,btype b) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+        "    mov     r5,    %4\n\t"   /* (long) b        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+          , "r" ((long) b)            /* %4              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+          , "r5"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall3 args a,b,c -+//;dgt2;tmp; already being in r4,r5,r6 ? -+#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ -+type name(atype a,btype b,ctype c) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+        "    mov     r5,    %4\n\t"   /* (long) b        */ \ -+        "    mov     r6,    %5\n\t"   /* (long) c        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+          , "r" ((long) b)            /* %4              */ \ -+          , "r" ((long) c)            /* %5              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+          , "r5"                      /* Clobbered       */ \ -+          , "r6"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall4 args a,b,c,d -+//;dgt2;tmp; already being in r4,r5,r6,r7 ? -+#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ -+type name (atype a, btype b, ctype c, dtype d) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+        "    mov     r5,    %4\n\t"   /* (long) b        */ \ -+        "    mov     r6,    %5\n\t"   /* (long) c        */ \ -+        "    mov     r7,    %6\n\t"   /* (long) d        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+          , "r" ((long) b)            /* %4              */ \ -+          , "r" ((long) c)            /* %5              */ \ -+          , "r" ((long) d)            /* %6              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+          , "r5"                      /* Clobbered       */ \ -+          , "r6"                      /* Clobbered       */ \ -+          , "r7"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall5 args a,b,c,d -+//;dgt2;tmp; already being in r4,r5,r6,r7 ? -+#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ -+type name (atype a,btype b,ctype c,dtype d,etype e) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+        "    mov     r5,    %4\n\t"   /* (long) b        */ \ -+        "    mov     r6,    %5\n\t"   /* (long) c        */ \ -+        "    mov     r7,    %6\n\t"   /* (long) c        */ \ -+        "    mov     r8,    %7\n\t"   /* (long) e        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+          , "r" ((long) b)            /* %4              */ \ -+          , "r" ((long) c)            /* %5              */ \ -+          , "r" ((long) d)            /* %6              */ \ -+          , "r" ((long) e)            /* %7              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+          , "r5"                      /* Clobbered       */ \ -+          , "r6"                      /* Clobbered       */ \ -+          , "r7"                      /* Clobbered       */ \ -+          , "r8"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+//;dgt2;tmp;can we RELY on syscall6 args a,b,c,d -+//;dgt2;tmp; already being in r4,r5,r6,r7 ? -+#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) \ -+{ \ -+    long __res;                                             \ -+                                                            \ -+    __asm__ __volatile__ (                                  \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        "    movi    r2,    %2\n\t"   /* TRAP_ID_SYSCALL */ \ -+        "    movi    r3,    %1\n\t"   /* __NR_##name     */ \ -+        "    mov     r4,    %3\n\t"   /* (long) a        */ \ -+        "    mov     r5,    %4\n\t"   /* (long) b        */ \ -+        "    mov     r6,    %5\n\t"   /* (long) c        */ \ -+        "    mov     r7,    %6\n\t"   /* (long) c        */ \ -+        "    mov     r8,    %7\n\t"   /* (long) e        */ \ -+        "    mov     r9,    %8\n\t"   /* (long) f        */ \ -+                                                            \ -+        "    trap\n\t"                                      \ -+        "    mov     %0,    r2\n\t"   /* syscall rtn     */ \ -+                                                            \ -+        "    \n\t"                                          \ -+                                                            \ -+        :   "=r" (__res)              /* %0              */ \ -+                                                            \ -+        :   "i" (__NR_##name)         /* %1              */ \ -+          , "i" (TRAP_ID_SYSCALL)     /* %2              */ \ -+          , "r" ((long) a)            /* %3              */ \ -+          , "r" ((long) b)            /* %4              */ \ -+          , "r" ((long) c)            /* %5              */ \ -+          , "r" ((long) d)            /* %6              */ \ -+          , "r" ((long) e)            /* %7              */ \ -+          , "r" ((long) f)            /* %8              */ \ -+                                                            \ -+        :   "r2"                      /* Clobbered       */ \ -+          , "r3"                      /* Clobbered       */ \ -+          , "r4"                      /* Clobbered       */ \ -+          , "r5"                      /* Clobbered       */ \ -+          , "r6"                      /* Clobbered       */ \ -+          , "r7"                      /* Clobbered       */ \ -+          , "r8"                      /* Clobbered       */ \ -+          , "r9"                      /* Clobbered       */ \ -+        );                                                  \ -+                                                            \ -+__syscall_return(type,__res); \ -+} -+ -+#ifdef __KERNEL__ -+#define __ARCH_WANT_IPC_PARSE_VERSION -+#define __ARCH_WANT_OLD_READDIR -+#define __ARCH_WANT_OLD_STAT -+#define __ARCH_WANT_STAT64 -+#define __ARCH_WANT_SYS_ALARM -+#define __ARCH_WANT_SYS_GETHOSTNAME -+#define __ARCH_WANT_SYS_PAUSE -+#define __ARCH_WANT_SYS_SGETMASK -+#define __ARCH_WANT_SYS_SIGNAL -+#define __ARCH_WANT_SYS_TIME -+#define __ARCH_WANT_SYS_UTIME -+#define __ARCH_WANT_SYS_WAITPID -+#define __ARCH_WANT_SYS_SOCKETCALL -+#define __ARCH_WANT_SYS_FADVISE64 -+#define __ARCH_WANT_SYS_GETPGRP -+#define __ARCH_WANT_SYS_LLSEEK -+#define __ARCH_WANT_SYS_NICE -+#define __ARCH_WANT_SYS_OLD_GETRLIMIT -+#define __ARCH_WANT_SYS_OLDUMOUNT -+#define __ARCH_WANT_SYS_SIGPENDING -+#define __ARCH_WANT_SYS_SIGPROCMASK -+#define __ARCH_WANT_SYS_RT_SIGACTION -+#endif -+ -+#ifdef __KERNEL_SYSCALLS__ -+ -+/* -+ * we need this inline - forking from kernel space will result -+ * in NO COPY ON WRITE (!!!), until an execve is executed. This -+ * is no problem, but for the stack. This is handled by not letting -+ * main() use the stack at all after fork(). Thus, no function -+ * calls - which means inline code for fork too, as otherwise we -+ * would use the stack upon exit from 'fork()'. -+ * -+ * Actually only pause and fork are needed inline, so that there -+ * won't be any messing with the stack from main(), but we define -+ * some others too. -+ */ -+#define __NR__exit __NR_exit -+static inline _syscall0(int,pause) -+static inline _syscall0(int,sync) -+static inline _syscall0(pid_t,setsid) -+static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) -+static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) -+static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) -+static inline _syscall1(int,dup,int,fd) -+static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) -+static inline _syscall3(int,open,const char *,file,int,flag,int,mode) -+static inline _syscall1(int,close,int,fd) -+static inline _syscall1(int,_exit,int,exitcode) -+static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) -+static inline _syscall1(int,delete_module,const char *,name) -+ -+static inline pid_t wait(int * wait_stat) -+{ -+	return waitpid(-1,wait_stat,0); -+} -+ -+#endif -+ -+/* -+ * "Conditional" syscalls -+ * -+ * What we want is __attribute__((weak,alias("sys_ni_syscall"))), -+ * but it doesn't work on all toolchains, so we just do it by hand -+ */ -+#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall"); -+ -+#endif /* _ASM_NIOS_UNISTD_H_ */ ---- linux/include/asm-nios2nommu/user.h -+++ linux/include/asm-nios2nommu/user.h -@@ -0,0 +1,112 @@ -+#ifndef _NIOS2NOMMU_USER_H -+#define _NIOS2NOMMU_USER_H -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/user.h -+ * -+ * Derived from M68knommu -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+#include <asm/page.h> -+ -+/* Core file format: The core file is written in such a way that gdb -+   can understand it and provide useful information to the user (under -+   linux we use the 'trad-core' bfd).  There are quite a number of -+   obstacles to being able to view the contents of the floating point -+   registers, and until these are solved you will not be able to view the -+   contents of them.  Actually, you can read in the core file and look at -+   the contents of the user struct to find out what the floating point -+   registers contain. -+   The actual file contents are as follows: -+   UPAGE: 1 page consisting of a user struct that tells gdb what is present -+   in the file.  Directly after this is a copy of the task_struct, which -+   is currently not used by gdb, but it may come in useful at some point. -+   All of the registers are stored as part of the upage.  The upage should -+   always be only one page. -+   DATA: The data area is stored.  We use current->end_text to -+   current->brk to pick up all of the user variables, plus any memory -+   that may have been malloced.  No attempt is made to determine if a page -+   is demand-zero or if a page is totally unused, we just cover the entire -+   range.  All of the addresses are rounded in such a way that an integral -+   number of pages is written. -+   STACK: We need the stack information in order to get a meaningful -+   backtrace.  We need to write the data from (esp) to -+   current->start_stack, so we round each of these off in order to be able -+   to write an integer number of pages. -+   The minimum core file size is 3 pages, or 12288 bytes. -+*/ -+ -+struct user_m68kfp_struct { -+	unsigned long  fpregs[8*3];	/* fp0-fp7 registers */ -+	unsigned long  fpcntl[3];	/* fp control regs */ -+}; -+ -+/* This is needs more work, probably should look like gdb useage */ -+struct user_regs_struct { -+	long r1,r2,r3,r4,r5,r6,r7,r8; -+	long r9,r10,r11,r12,r13,r14,r15; -+	long r16,r17,r18,r19,r20,r21,r22,r23; -+	long gp; -+	long sp; -+	long ra; -+	long fp; -+	long orig_r2; -+	long estatus; -+	long status_extension; -+	long ea; -+}; -+ -+	 -+/* When the kernel dumps core, it starts by dumping the user struct - -+   this will be used by gdb to figure out where the data and stack segments -+   are within the file, and what virtual addresses to use. */ -+struct user{ -+/* We start with the registers, to mimic the way that "memory" is returned -+   from the ptrace(3,...) function.  */ -+  struct user_regs_struct regs;	/* Where the registers are actually stored */ -+/* ptrace does not yet supply these.  Someday.... */ -+  int u_fpvalid;		/* True if math co-processor being used. */ -+                                /* for this mess. Not yet used. */ -+  struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */ -+/* The rest of this junk is to help gdb figure out what goes where */ -+  unsigned long int u_tsize;	/* Text segment size (pages). */ -+  unsigned long int u_dsize;	/* Data segment size (pages). */ -+  unsigned long int u_ssize;	/* Stack segment size (pages). */ -+  unsigned long start_code;     /* Starting virtual address of text. */ -+  unsigned long start_stack;	/* Starting virtual address of stack area. -+				   This is actually the bottom of the stack, -+				   the top of the stack is always found in the -+				   esp register.  */ -+  long int signal;     		/* Signal that caused the core dump. */ -+  int reserved;			/* No longer used */ -+  struct user_regs_struct *u_ar0; -+				/* Used by gdb to help find the values for */ -+				/* the registers. */ -+  struct user_m68kfp_struct* u_fpstate;	/* Math Co-processor pointer. */ -+  unsigned long magic;		/* To uniquely identify a core file */ -+  char u_comm[32];		/* User command that was responsible */ -+}; -+#define NBPG PAGE_SIZE -+#define UPAGES 1 -+#define HOST_TEXT_START_ADDR (u.start_code) -+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG) -+ -+#endif ---- linux/include/asm-nios2nommu/virtconvert.h -+++ linux/include/asm-nios2nommu/virtconvert.h -@@ -0,0 +1,47 @@ -+#ifndef __NIOS_VIRT_CONVERT__ -+#define __NIOS_VIRT_CONVERT__ -+ -+/*-------------------------------------------------------------------- -+ * -+ * include/asm-nios2nommu/virtconvert.h -+ * -+ * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al -+ * -+ * Copyright (C) 2004   Microtronix Datacom Ltd -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -+ * GNU General Public License for more details. -+ * -+ * -+ * Jan/20/2004		dgt	    NiosII -+ * -+ ---------------------------------------------------------------------*/ -+ -+ -+/* -+ * Macros used for converting between virtual and physical mappings. -+ */ -+ -+#ifdef __KERNEL__ -+ -+// #include <linux/config.h> -+#include <asm/setup.h> -+#include <asm/page.h> -+ -+#define mm_ptov(vaddr)		((void *) (vaddr)) -+#define mm_vtop(vaddr)		((unsigned long) (vaddr)) -+#define phys_to_virt(vaddr)	((void *) (vaddr)) -+#define virt_to_phys(vaddr)	((unsigned long) (vaddr)) -+ -+#define virt_to_bus virt_to_phys -+#define bus_to_virt phys_to_virt -+ -+#endif /*__KERNEL__ */ -+#endif /*__NIOS_VIRT_CONVERT__*/  | 
