12926 lines
390 KiB
Plaintext
12926 lines
390 KiB
Plaintext
--- 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.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_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_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/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 0;
|
|
+}
|
|
+
|
|
+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,100 @@
|
|
+#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 */
|
|
+
|
|
+#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,27 @@
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+#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/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,12 @@
|
|
+#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[];
|
|
+
|
|
+#endif /* _ASM_GENERIC_SECTIONS_H_ */
|
|
--- linux/include/asm-generic/siginfo.h
|
|
+++ linux/include/asm-generic/siginfo.h
|
|
@@ -0,0 +1,295 @@
|
|
+#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)
|
|
+
|
|
+#ifndef HAVE_ARCH_SI_CODES
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+#endif
|
|
+
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+#ifndef HAVE_ARCH_SIGEVENT_T
|
|
+
|
|
+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;
|
|
+
|
|
+#endif
|
|
+
|
|
+#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/tlb.h
|
|
+++ linux/include/asm-generic/tlb.h
|
|
@@ -0,0 +1,152 @@
|
|
+/* 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)
|
|
+
|
|
+#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,53 @@
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+/* Cross-node load balancing interval. */
|
|
+#ifndef NODE_BALANCE_RATE
|
|
+#define NODE_BALANCE_RATE 10
|
|
+#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,84 @@
|
|
+#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_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) = .; \
|
|
+ } \
|
|
+ \
|
|
+ /* 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/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/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/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/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,56 @@
|
|
+#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);
|
|
+
|
|
+#define flush_cache_all() __flush_cache_all()
|
|
+#define flush_cache_mm(mm) do { } while (0)
|
|
+#define flush_cache_range(vma, start, end) do { } while (0)
|
|
+#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_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/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/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-mapping.h
|
|
+++ linux/include/asm-nios2nommu/dma-mapping.h
|
|
@@ -0,0 +1,25 @@
|
|
+/*
|
|
+ * include/asm-s390/dma-mapping.h
|
|
+ *
|
|
+ * S390 version
|
|
+ *
|
|
+ * This file exists so that #include <dma-mapping.h> doesn't break anything.
|
|
+ */
|
|
+
|
|
+#ifndef _ASM_DMA_MAPPING_H
|
|
+#define _ASM_DMA_MAPPING_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();
|
|
+}
|
|
+
|
|
+#endif /* _ASM_DMA_MAPPING_H */
|
|
--- linux/include/asm-nios2nommu/dma.h
|
|
+++ linux/include/asm-nios2nommu/dma.h
|
|
@@ -0,0 +1,40 @@
|
|
+/* $Id: dma.h,v 1.5 2004/03/02 16:05:52 ken-h Exp $
|
|
+ *
|
|
+ * Copyright 1995 (C) David S. Miller (davem@caip.rutgers.edu)
|
|
+ * 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_CHANNELS 2
|
|
+#define MAX_DMA_ADDRESS (LINUX_SDRAM_START)
|
|
+#define DMA_MODE_READ 1
|
|
+#define DMA_MODE_WRITE 2
|
|
+
|
|
+extern int get_dma_list(char *);
|
|
+extern int request_dma(unsigned int, const char *);
|
|
+extern void free_dma(unsigned int);
|
|
+
|
|
+#endif /* !(_ASM_NIOS2_DMA_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,85 @@
|
|
+/*
|
|
+ * 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;
|
|
+ unsigned int __syscall_count;
|
|
+ struct task_struct * __ksoftirqd_task;
|
|
+} ____cacheline_aligned irq_cpustat_t;
|
|
+
|
|
+#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
|
|
+
|
|
+/*
|
|
+ * We put the hardirq and softirq counter into the preemption
|
|
+ * counter. The bitmask has the following meaning:
|
|
+ *
|
|
+ * - bits 0-7 are the preemption count (max preemption depth: 256)
|
|
+ * - bits 8-15 are the softirq count (max # of softirqs: 256)
|
|
+ * - bits 16-23 are the hardirq count (max # of hardirqs: 256)
|
|
+ *
|
|
+ * - ( bit 26 is the PREEMPT_ACTIVE flag. )
|
|
+ *
|
|
+ * PREEMPT_MASK: 0x000000ff
|
|
+ * HARDIRQ_MASK: 0x0000ff00
|
|
+ * SOFTIRQ_MASK: 0x00ff0000
|
|
+ */
|
|
+
|
|
+#define PREEMPT_BITS 8
|
|
+#define SOFTIRQ_BITS 8
|
|
+#define HARDIRQ_BITS 8
|
|
+
|
|
+#define PREEMPT_SHIFT 0
|
|
+#define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS)
|
|
+#define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS)
|
|
+
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
|
|
+#define irq_exit() \
|
|
+do { \
|
|
+ preempt_count() -= IRQ_EXIT_OFFSET; \
|
|
+ if (!in_interrupt() && softirq_pending(smp_processor_id())) \
|
|
+ do_softirq(); \
|
|
+ preempt_enable_no_resched(); \
|
|
+} while (0)
|
|
+
|
|
+#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/io.h
|
|
+++ linux/include/asm-nios2nommu/io.h
|
|
@@ -0,0 +1,239 @@
|
|
+/*
|
|
+ * 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
|
|
+
|
|
+
|
|
+/*
|
|
+ * 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/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/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/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/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.h
|
|
+++ linux/include/asm-nios2nommu/mmu.h
|
|
@@ -0,0 +1,47 @@
|
|
+/*
|
|
+ *
|
|
+ * 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> */
|
|
+
|
|
+struct mm_rblock_struct {
|
|
+ int size;
|
|
+ int refcount;
|
|
+ void *kblock;
|
|
+};
|
|
+
|
|
+struct mm_tblock_struct {
|
|
+ struct mm_rblock_struct *rblock;
|
|
+ struct mm_tblock_struct *next;
|
|
+};
|
|
+
|
|
+typedef struct {
|
|
+ struct mm_tblock_struct tblock;
|
|
+ unsigned long end_brk;
|
|
+} mm_context_t;
|
|
+
|
|
+#endif /* __NIOS2NOMMU_MMU_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/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,100 @@
|
|
+#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
|
|
+ *
|
|
+ ---------------------------------------------------------------------*/
|
|
+
|
|
+
|
|
+//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);
|
|
+
|
|
+/*
|
|
+ * No page table caches to initialise
|
|
+ */
|
|
+#define pgtable_cache_init() do { } while (0)
|
|
+
|
|
+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,40 @@
|
|
+#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
|
|
+ *
|
|
+ ---------------------------------------------------------------------*/
|
|
+
|
|
+
|
|
+struct scatterlist {
|
|
+ struct page *page;
|
|
+ unsigned int offset;
|
|
+ dma_addr_t dma_address;
|
|
+ unsigned int length;
|
|
+};
|
|
+
|
|
+#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-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/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/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/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/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/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,126 @@
|
|
+/* 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 */
|
|
+
|
|
+/* 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/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/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/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__*/
|