kernel-headers: add linux 2.6.30 headers for ubicom32
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 16 Dec 2009 13:39:49 +0000 (13:39 +0000)
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 16 Dec 2009 13:39:49 +0000 (13:39 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@18792 3c298f89-4303-0410-b956-a3cf2f4a3e73

toolchain/kernel-headers/patches-2.6.30/100-ubicom32_headers.patch [new file with mode: 0644]

diff --git a/toolchain/kernel-headers/patches-2.6.30/100-ubicom32_headers.patch b/toolchain/kernel-headers/patches-2.6.30/100-ubicom32_headers.patch
new file mode 100644 (file)
index 0000000..49cde88
--- /dev/null
@@ -0,0 +1,4852 @@
+--- /dev/null
++++ b/arch/ubicom32/include/asm/a.out.h
+@@ -0,0 +1,47 @@
++/*
++ * arch/ubicom32/include/asm/a.out.h
++ *   Definitions for Ubicom32 a.out executable format.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_A_OUT_H
++#define _ASM_UBICOM32_A_OUT_H
++
++struct exec
++{
++  unsigned long a_info;               /* Use macros N_MAGIC, etc for access */
++  unsigned a_text;            /* length of text, in bytes */
++  unsigned a_data;            /* length of data, in bytes */
++  unsigned a_bss;             /* length of uninitialized data area for file, in bytes */
++  unsigned a_syms;            /* length of symbol table data in file, in bytes */
++  unsigned a_entry;           /* start address */
++  unsigned a_trsize;          /* length of relocation info for text, in bytes */
++  unsigned a_drsize;          /* length of relocation info for data, in bytes */
++};
++
++#define N_TRSIZE(a)   ((a).a_trsize)
++#define N_DRSIZE(a)   ((a).a_drsize)
++#define N_SYMSIZE(a)  ((a).a_syms)
++
++#endif /* _ASM_UBICOM32_A_OUT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/auxvec.h
+@@ -0,0 +1,32 @@
++/*
++ * arch/ubicom32/include/asm/auxvec.h
++ *   Symbolic values for the entries in the auxiliary table
++ *   put on the initial stack.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_AUXVEC_H
++#define _ASM_UBICOM32_AUXVEC_H
++
++#endif /* _ASM_UBICOM32_AUXVEC_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/bitops.h
+@@ -0,0 +1,41 @@
++/*
++ * arch/ubicom32/include/asm/bitops.h
++ *   Bit manipulation definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_BITOPS_H
++#define _ASM_UBICOM32_BITOPS_H
++
++/*
++ * Copyright 1992, Linus Torvalds.
++ */
++
++#include <linux/compiler.h>
++#include <asm/byteorder.h>    /* swab32 */
++
++#include <asm-generic/bitops/fls.h>
++#include <asm-generic/bitops/fls64.h>
++
++#endif /* _ASM_UBICOM32_BITOPS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/board.h
+@@ -0,0 +1,34 @@
++/*
++ * arch/ubicom32/include/asm/board.h
++ *   Board init and revision definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_BOARD_H
++#define _ASM_UBICOM32_BOARD_H
++
++extern const char *board_get_revision(void);
++extern void __init board_init(void);
++
++#endif /* _ASM_UBICOM32_BOARD_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/byteorder.h
+@@ -0,0 +1,35 @@
++/*
++ * arch/ubicom32/include/asm/byteorder.h
++ *   Byte order swapping utility routines.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_BYTEORDER_H
++#define _ASM_UBICOM32_BYTEORDER_H
++
++#include <linux/types.h>
++#include <linux/byteorder/big_endian.h>
++
++#endif /* _ASM_UBICOM32_BYTEORDER_H */
++
+--- /dev/null
++++ b/arch/ubicom32/include/asm/elf.h
+@@ -0,0 +1,167 @@
++/*
++ * arch/ubicom32/include/asm/elf.h
++ *   Definitions for elf executable format for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_ELF_H
++#define _ASM_UBICOM32_ELF_H
++
++/*
++ * ELF register definitions..
++ */
++
++#include <asm/ptrace.h>
++#include <asm/user.h>
++
++/*
++ * Processor specific flags for the ELF header e_flags field.
++ */
++#define EF_UBICOM32_V3                0x00000001      /* -fmarch=ubicom32v3 */
++#define EF_UBICOM32_V4                0x00000002      /* -fmarch=ubicom32v4 */
++#define EF_UBICOM32_PIC               0x80000000      /* -fpic */
++#define EF_UBICOM32_FDPIC     0x40000000      /* -mfdpic */
++
++/*
++ * Ubicom32 ELF relocation types
++ */
++#define R_UBICOM32_NONE                       0
++#define R_UBICOM32_16                 1
++#define R_UBICOM32_32                 2
++#define R_UBICOM32_LO16                       3
++#define R_UBICOM32_HI16                       4
++#define R_UBICOM32_21_PCREL           5
++#define R_UBICOM32_24_PCREL           6
++#define R_UBICOM32_HI24                       7
++#define R_UBICOM32_LO7_S              8
++#define R_UBICOM32_LO7_2_S            9
++#define R_UBICOM32_LO7_4_S            10
++#define R_UBICOM32_LO7_D              11
++#define R_UBICOM32_LO7_2_D            12
++#define R_UBICOM32_LO7_4_D            13
++#define R_UBICOM32_32_HARVARD         14
++#define R_UBICOM32_LO7_CALLI          15
++#define R_UBICOM32_LO16_CALLI         16
++#define R_UBICOM32_GOT_HI24           17
++#define R_UBICOM32_GOT_LO7_S          18
++#define R_UBICOM32_GOT_LO7_2_S                19
++#define R_UBICOM32_GOT_LO7_4_S                20
++#define R_UBICOM32_GOT_LO7_D          21
++#define R_UBICOM32_GOT_LO7_2_D                22
++#define R_UBICOM32_GOT_LO7_4_D                23
++#define R_UBICOM32_FUNCDESC_GOT_HI24    24
++#define R_UBICOM32_FUNCDESC_GOT_LO7_S   25
++#define R_UBICOM32_FUNCDESC_GOT_LO7_2_S 26
++#define R_UBICOM32_FUNCDESC_GOT_LO7_4_S 27
++#define R_UBICOM32_FUNCDESC_GOT_LO7_D   28
++#define R_UBICOM32_FUNCDESC_GOT_LO7_2_D 29
++#define R_UBICOM32_FUNCDESC_GOT_LO7_4_D 30
++#define R_UBICOM32_GOT_LO7_CALLI        31
++#define R_UBICOM32_FUNCDESC_GOT_LO7_CALLI 32
++#define R_UBICOM32_FUNCDESC_VALUE       33
++#define R_UBICOM32_FUNCDESC             34
++#define R_UBICOM32_GOTOFFSET_LO         35
++#define R_UBICOM32_GOTOFFSET_HI         36
++#define R_UBICOM32_FUNCDESC_GOTOFFSET_LO 37
++#define R_UBICOM32_FUNCDESC_GOTOFFSET_HI 38
++#define R_UBICOM32_GNU_VTINHERIT        200
++#define R_UBICOM32_GNU_VTENTRY          201
++
++typedef unsigned long elf_greg_t;
++
++#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++typedef struct user_ubicom32fp_struct 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_UBICOM32)
++
++#define elf_check_fdpic(x) ((x)->e_flags & EF_UBICOM32_FDPIC)
++
++#define elf_check_const_displacement(x) ((x)->e_flags & EF_UBICOM32_PIC)
++
++/*
++ * These are used to set parameters in the core dumps.
++ */
++#define ELF_CLASS     ELFCLASS32
++#define ELF_DATA      ELFDATA2MSB
++#define ELF_ARCH      EM_UBICOM32
++
++/* For SVR4/m68k the function pointer to be registered with `atexit' is
++   passed in %a1.  Although my copy of the ABI has no such statement, it
++   is actually used on ASV.  */
++#define ELF_PLAT_INIT(_r, load_addr)  _r->a1 = 0
++
++#define ELF_FDPIC_PLAT_INIT(_regs, _exec_map_addr, _interp_map_addr,  \
++                          _dynamic_addr)                              \
++      do {                                                            \
++              _regs->dn[1]    = _exec_map_addr;                       \
++              _regs->dn[2]    = _interp_map_addr;                     \
++              _regs->dn[3]    = _dynamic_addr;                        \
++              _regs->an[1]    = 0; /* dl_fini will be set by ldso */  \
++      } while (0)
++
++#define USE_ELF_CORE_DUMP
++#define ELF_EXEC_PAGESIZE     4096
++
++#ifdef __KERNEL__
++#ifdef CONFIG_UBICOM32_V4
++#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V4)
++#elif defined CONFIG_UBICOM32_V3
++#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V3)
++#else
++#error Unknown/Unsupported ubicom32 architecture.
++#endif
++#endif
++
++/* 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
++
++/*
++ * For Ubicom32, the elf_gregset_t and struct pt_regs are the same size
++ * data structure so a copy is performed instead of providing the
++ * ELF_CORE_COPY_REGS macro.
++ */
++
++/* 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)
++
++#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
++
++#endif /* _ASM_UBICOM32_ELF_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/errno.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/errno.h
++ *   Generic errno.h for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_ERRNO_H
++#define _ASM_UBICOM32_ERRNO_H
++
++#include <asm-generic/errno.h>
++
++#endif /* _ASM_UBICOM32_ERRNO_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/fcntl.h
+@@ -0,0 +1,38 @@
++/*
++ * arch/ubicom32/include/asm/fcntl.h
++ *   File control bit definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_FCNTL_H
++#define _ASM_UBICOM32_FCNTL_H
++
++#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
++
++#include <asm-generic/fcntl.h>
++
++#endif /* _ASM_UBICOM32_FCNTL_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/flat.h
+@@ -0,0 +1,73 @@
++/*
++ * arch/ubicom32/include/asm/flat.h
++ *   Definitions to support flat-format executables.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++
++#ifndef _ASM_UBICOM32_FLAT_H
++#define _ASM_UBICOM32_FLAT_H
++
++#define ARCH_FLAT_ALIGN 0x80
++#define ARCH_FLAT_ALIGN_TEXT 1
++
++#define  R_UBICOM32_32                2
++#define  R_UBICOM32_HI24      7
++#define  R_UBICOM32_LO7_S     8
++#define  R_UBICOM32_LO7_2_S   9
++#define  R_UBICOM32_LO7_4_S   10
++#define  R_UBICOM32_LO7_D     11
++#define  R_UBICOM32_LO7_2_D   12
++#define  R_UBICOM32_LO7_4_D   13
++#define  R_UBICOM32_LO7_CALLI 15
++#define  R_UBICOM32_LO16_CALLI        16
++
++extern void ubicom32_flat_put_addr_at_rp(unsigned long *rp, u32_t val, u32_t rval, unsigned long  *p);
++extern unsigned long ubicom32_flat_get_addr_from_rp(unsigned long *rp, u32_t relval, u32_t flags, unsigned long *p);
++
++#define       flat_stack_align(sp)                    /* nothing needed */
++#define       flat_argvp_envp_on_stack()              1
++#define       flat_old_ram_flag(flags)                (flags)
++#define       flat_reloc_valid(reloc, size)           ((reloc) <= (size))
++#define       flat_get_addr_from_rp(rp, relval, flags, p)     (ubicom32_flat_get_addr_from_rp(rp, relval,flags, p))
++#define       flat_put_addr_at_rp(rp, val, relval)    do {ubicom32_flat_put_addr_at_rp(rp, val, relval, &persistent);} while(0)
++#define       flat_get_relocate_addr(rel)             ((persistent) ? (persistent & 0x07ffffff) : (rel & 0x07ffffff))
++
++static inline int flat_set_persistent(unsigned int relval, unsigned long *p)
++{
++      if (*p) {
++              return 0;
++      } else {
++              if ((relval >> 27) != R_UBICOM32_32) {
++                      /*
++                       * Something other than UBICOM32_32. The next entry has the relocation.
++                       */
++                      *p = relval;
++                      return 1;
++              }
++      }
++      return 0;
++}
++
++#endif /* _ASM_UBICOM32_FLAT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/fpu.h
+@@ -0,0 +1,37 @@
++/*
++ * arch/ubicom32/include/asm/fpu.h
++ *   Floating point state definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_FPU_H
++#define _ASM_UBICOM32_FPU_H
++
++/*
++ * MAX floating point unit state size (FSAVE/FRESTORE)
++ */
++/* No FP unit present then... */
++#define FPSTATESIZE (2) /* dummy size */
++
++#endif /* _ASM_UBICOM32_FPU_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/futex.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/futex.h
++ *   Generic futex.h for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_FUTEX_H
++#define _ASM_UBICOM32_FUTEX_H
++
++#include <asm-generic/futex.h>
++
++#endif /* _ASM_UBICOM32_FUTEX_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/ioctl.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/ioctl.h
++ *   Generic ioctl.h for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_IOCTL_H
++#define _ASM_UBICOM32_IOCTL_H
++
++#include <asm-generic/ioctl.h>
++
++#endif /* _ASM_UBICOM32_IOCTL_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/ioctls.h
+@@ -0,0 +1,111 @@
++/*
++ * arch/ubicom32/include/asm/ioctls.h
++ *   Definitions of ioctls for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_IOCTLS_H
++#define _ASM_UBICOM32_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 TIOCSBRK      0x5427  /* BSD compatibility */
++#define TIOCCBRK      0x5428  /* BSD compatibility */
++#define TIOCGSID      0x5429  /* Return the session ID of FD */
++#define TCGETS2               _IOR('T',0x2A, struct termios2)
++#define TCSETS2               _IOW('T',0x2B, struct termios2)
++#define TCSETSW2      _IOW('T',0x2C, struct termios2)
++#define TCSETSF2      _IOW('T',0x2D, struct termios2)
++#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 /* _ASM_UBICOM32_IOCTLS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/ipcbuf.h
+@@ -0,0 +1,55 @@
++/*
++ * arch/ubicom32/include/asm/ipcbuf.h
++ *   Definition of ipc64_perm struct for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_IPCBUF_H
++#define _ASM_UBICOM32_IPCBUF_H
++
++/*
++ * The user_ipc_perm structure for m68k 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
++ */
++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 /* _ASM_UBICOM32_IPCBUF_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/irqflags.h
+@@ -0,0 +1,94 @@
++/*
++ * arch/ubicom32/include/asm/irqflags.h
++ *   Raw implementation of local IRQ functions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_IRQFLAGS_H
++#define _ASM_UBICOM32_IRQFLAGS_H
++
++#include <linux/thread_info.h>
++#include <asm/ubicom32-common.h>
++#include <asm/smp.h>
++#include <asm/ldsr.h>
++
++#if defined(CONFIG_PREEMPT)
++#error Not supported by Ubicom32 irq handling, yet!
++#endif
++
++/*
++ * raw_local_irq_enable()
++ *    Enable interrupts for this thread.
++ */
++static inline void raw_local_irq_enable(void)
++{
++      ldsr_local_irq_enable();
++}
++
++/*
++ * raw_local_irq_disable()
++ *    Disable interrupts for this thread.
++ */
++static inline void raw_local_irq_disable(void)
++{
++      ldsr_local_irq_disable();
++}
++
++/*
++ * raw_local_save_flags()
++ *    Get the current IRQ state.
++ */
++#define raw_local_save_flags(flags)           \
++do {                                          \
++      (flags) = ldsr_local_irq_is_disabled(); \
++} while (0)
++
++/*
++ * raw_local_irq_save()
++ *    Save the current interrupt state and disable interrupts.
++ */
++#define raw_local_irq_save(flags)             \
++do {                                          \
++      (flags) = ldsr_local_irq_save();        \
++} while (0)
++
++/*
++ * raw_local_irq_restore()
++ *    Restore the IRQ state back to flags.
++ */
++static inline void raw_local_irq_restore(unsigned long flags)
++{
++      ldsr_local_irq_restore(flags);
++}
++
++/*
++ * raw_irqs_disabled_flags()
++ *    Return true if the flags indicate that IRQ(s) are disabled.
++ */
++static inline int raw_irqs_disabled_flags(unsigned long flags)
++{
++      return (flags);
++}
++
++#endif /* _ASM_UBICOM32_IRQFLAGS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/Kbuild
+@@ -0,0 +1 @@
++include include/asm-generic/Kbuild.asm
+--- /dev/null
++++ b/arch/ubicom32/include/asm/kdebug.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/kdebug.h
++ *   Generic kdebug.h for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_KDEBUG_H
++#define _ASM_UBICOM32_KDEBUG_H
++
++#include <asm-generic/kdebug.h>
++
++#endif /* _ASM_UBICOM32_KDEBUG_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/linkage.h
+@@ -0,0 +1,34 @@
++/*
++ * arch/ubicom32/include/asm/linkage.h
++ *   Definition of Ubicom32 architecture specific linkage types.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_LINKAGE_H
++#define _ASM_UBICOM32_LINKAGE_H
++
++#define __ocm_text __section(.ocm_text)
++#define __ocm_data __section(.ocm_data)
++
++#endif        /* _ASM_UBICOM32_LINKAGE_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/local.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/local.h
++ *   Generic local.h for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_LOCAL_H
++#define _ASM_UBICOM32_LOCAL_H
++
++#include <asm-generic/local.h>
++
++#endif /* _ASM_UBICOM32_LOCAL_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/mman.h
+@@ -0,0 +1,44 @@
++/*
++ * arch/ubicom32/include/asm/mman.h
++ *   Memory mapping definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_MMAN_H
++#define _ASM_UBICOM32_MMAN_H
++
++#include <asm-generic/mman.h>
++
++#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 MCL_CURRENT   1               /* lock all current mappings */
++#define MCL_FUTURE    2               /* lock all future mappings */
++
++#endif /* _ASM_UBICOM32_MMAN_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/msgbuf.h
+@@ -0,0 +1,58 @@
++/*
++ * arch/ubicom32/include/asm/msgbuf.h
++ *   Definition of msqid64_ds struct for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_MSGBUF_H
++#define _ASM_UBICOM32_MSGBUF_H
++
++/*
++ * The msqid64_ds structure for ubicom32 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 /* _ASM_UBICOM32_MSGBUF_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/namei.h
+@@ -0,0 +1,38 @@
++/*
++ * arch/ubicom32/include/asm/namei.h
++ *   Definition of __emul_prefix() for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_NAMEI_H
++#define _ASM_UBICOM32_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 /* _ASM_UBICOM32_NAMEI_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/page.h
+@@ -0,0 +1,106 @@
++/*
++ * arch/ubicom32/include/asm/page.h
++ *   Memory page related operations and definitions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_PAGE_H
++#define _ASM_UBICOM32_PAGE_H
++
++/* PAGE_SHIFT determines the page size */
++
++#define PAGE_SHIFT    12
++#define PAGE_SIZE     (1 << PAGE_SHIFT)
++#define PAGE_MASK     (~(PAGE_SIZE-1))
++
++#include <asm/setup.h>
++
++#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)
++
++#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
++      alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
++#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
++
++/*
++ * 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;
++typedef struct page *pgtable_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) } )
++
++extern unsigned long memory_start;
++extern unsigned long memory_end;
++
++#endif /* !__ASSEMBLY__ */
++
++#include <asm/page_offset.h>
++
++#define PAGE_OFFSET           (PAGE_OFFSET_RAW)
++
++#ifndef __ASSEMBLY__
++
++#define __pa(vaddr)           virt_to_phys((void *)(vaddr))
++#define __va(paddr)           phys_to_virt((unsigned long)(paddr))
++
++#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 pfn_to_page(pfn)      virt_to_page(pfn_to_virt(pfn))
++#define page_to_pfn(page)     virt_to_pfn(page_to_virt(page))
++#define pfn_valid(pfn)                ((pfn) < max_mapnr)
++
++#define       virt_addr_valid(kaddr)  (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
++                              ((void *)(kaddr) < (void *)memory_end))
++
++#endif /* __ASSEMBLY__ */
++
++#ifdef __KERNEL__
++#include <asm-generic/page.h>
++#endif
++
++#endif /* _ASM_UBICOM32_PAGE_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/page_offset.h
+@@ -0,0 +1,35 @@
++/*
++ * arch/ubicom32/include/asm/page_offset.h
++ *   Definition of PAGE_OFFSET_RAW for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++
++#ifndef _ASM_UBICOM32_PAGE_OFFSET_H
++#define _ASM_UBICOM32_PAGE_OFFSET_H
++
++/* This handles the memory map.. */
++#define       PAGE_OFFSET_RAW         0x3ffc0000
++
++#endif /* _ASM_UBICOM32_PAGE_OFFSET_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/param.h
+@@ -0,0 +1,49 @@
++/*
++ * arch/ubicom32/include/asm/param.h
++ *   Definition of miscellaneous constants, including HZ.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_PARAM_H
++#define _ASM_UBICOM32_PARAM_H
++
++#ifdef __KERNEL__
++#define HZ CONFIG_HZ
++#define       USER_HZ         HZ
++#define       CLOCKS_PER_SEC  (USER_HZ)
++#endif
++
++#ifndef HZ
++#define HZ    100
++#endif
++
++#define EXEC_PAGESIZE 4096
++
++#ifndef NOGROUP
++#define NOGROUP               (-1)
++#endif
++
++#define MAXHOSTNAMELEN        64      /* max length of hostname */
++
++#endif /* _ASM_UBICOM32_PARAM_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/poll.h
+@@ -0,0 +1,36 @@
++/*
++ * arch/ubicom32/include/asm/poll.h
++ *   Ubicom32 specific poll() related flags definitions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_POLL_H
++#define _ASM_UBICOM32_POLL_H
++
++#define POLLWRNORM    POLLOUT
++#define POLLWRBAND    0x0100
++
++#include <asm-generic/poll.h>
++
++#endif /* _ASM_UBICOM32_POLL_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/posix_types.h
+@@ -0,0 +1,93 @@
++/*
++ * arch/ubicom32/include/asm/posix_types.h
++ *   Ubicom32 architecture posix types.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ * Copyright (C) 2004   Microtronix Datacom Ltd
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef __ARCH_UBICOM32_POSIX_TYPES_H
++#define __ARCH_UBICOM32_POSIX_TYPES_H
++
++/*
++ * 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
+--- /dev/null
++++ b/arch/ubicom32/include/asm/ptrace.h
+@@ -0,0 +1,177 @@
++/*
++ * arch/ubicom32/include/asm/ptrace.h
++ *   Ubicom32 architecture ptrace support.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_PTRACE_H
++#define _ASM_UBICOM32_PTRACE_H
++
++#ifndef __ASSEMBLY__
++
++/*
++ * We use hard coded constants because this is shared with user
++ * space and the values are NOT allowed to change.  Only fields
++ * that are intended to be exposed get values.
++ */
++#define PT_D0           0
++#define PT_D1           4
++#define PT_D2           8
++#define PT_D3           12
++#define PT_D4           16
++#define PT_D5           20
++#define PT_D6           24
++#define PT_D7           28
++#define PT_D8           32
++#define PT_D9           36
++#define PT_D10          40
++#define PT_D11          44
++#define PT_D12          48
++#define PT_D13          52
++#define PT_D14          56
++#define PT_D15          60
++#define PT_A0           64
++#define PT_A1           68
++#define PT_A2           72
++#define PT_A3           76
++#define PT_A4           80
++#define PT_A5           84
++#define PT_A6           88
++#define PT_A7           92
++#define PT_SP           92
++#define PT_ACC0HI       96
++#define PT_ACC0LO       100
++#define PT_MAC_RC16     104
++#define PT_ACC1HI       108
++#define PT_ACC1LO       112
++#define PT_SOURCE3      116
++#define PT_INST_CNT     120
++#define PT_CSR          124
++#define PT_DUMMY_UNUSED 128
++#define PT_INT_MASK0    132
++#define PT_INT_MASK1    136
++#define PT_TRAP_CAUSE   140
++#define PT_PC           144
++#define PT_ORIGINAL_D0  148
++#define PT_FRAME_TYPE   152
++
++/*
++ * The following 'registers' are not registers at all but are used
++ * locate the relocated sections.
++ */
++#define PT_TEXT_ADDR          200
++#define PT_TEXT_END_ADDR      204
++#define PT_DATA_ADDR          208
++#define PT_EXEC_FDPIC_LOADMAP 212
++#define PT_INTERP_FDPIC_LOADMAP       216
++
++/*
++ * This struct defines the way the registers are stored on the
++ * stack during a system call.
++ */
++enum thread_type {
++      NORMAL_THREAD,
++      KERNEL_THREAD,
++};
++
++#define UBICOM32_FRAME_TYPE_SYSCALL   -1 /* System call frame */
++#define UBICOM32_FRAME_TYPE_INVALID   0 /* Invalid frame, no longer in use */
++#define UBICOM32_FRAME_TYPE_INTERRUPT 1 /* Interrupt frame */
++#define UBICOM32_FRAME_TYPE_TRAP      2 /* Trap frame */
++#define UBICOM32_FRAME_TYPE_SIGTRAMP  3 /* Signal trampoline frame. */
++#define UBICOM32_FRAME_TYPE_NEW_THREAD        4 /* New Thread. */
++
++struct pt_regs {
++      /*
++       * Data Registers
++       */
++      unsigned long dn[16];
++
++      /*
++       * Address Registers
++       */
++      unsigned long an[8];
++
++      /*
++       * Per thread misc registers.
++       */
++      unsigned long acc0[2];
++      unsigned long mac_rc16;
++      unsigned long acc1[2];
++      unsigned long source3;
++      unsigned long inst_cnt;
++      unsigned long csr;
++      unsigned long dummy_unused;
++      unsigned long int_mask0;
++      unsigned long int_mask1;
++      unsigned long trap_cause;
++      unsigned long pc;
++      unsigned long original_dn_0;
++
++      /*
++       * Frame type. Syscall frames are -1. For other types look above.
++       */
++      unsigned long frame_type;
++
++      /*
++       * These fields are not exposed to ptrace.
++       */
++      unsigned long previous_pc;
++      long nesting_level;             /* When the kernel in in user space this
++                                       * will be -1. */
++      unsigned long thread_type;      /* This indicates if this is a kernel
++                                       * thread. */
++};
++
++/*
++ * 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  dummy;
++};
++
++#ifdef __KERNEL__
++
++/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
++#define PTRACE_GETREGS                12
++#define PTRACE_SETREGS                13
++
++#ifndef PS_S
++#define PS_S  (0x2000)
++#define PS_M  (0x1000)
++#endif
++
++extern  int __user_mode(unsigned long sp);
++
++#define user_mode(regs) (__user_mode((regs->an[7])))
++#define user_stack(regs) ((regs)->an[7])
++#define instruction_pointer(regs) ((regs)->pc)
++#define profile_pc(regs) instruction_pointer(regs)
++extern void show_regs(struct pt_regs *);
++#endif /* __KERNEL__ */
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* _ASM_UBICOM32_PTRACE_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/resource.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/resource.h
++ *   Generic definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_RESOURCE_H
++#define _ASM_UBICOM32_RESOURCE_H
++
++#include <asm-generic/resource.h>
++
++#endif /* _ASM_UBICOM32_RESOURCE_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/sections.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/sections.h
++ *   Generic sections.h definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SECTIONS_H
++#define _ASM_UBICOM32_SECTIONS_H
++
++#include <asm-generic/sections.h>
++
++#endif /* _ASM_UBICOM32_SECTIONS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/segment.h
+@@ -0,0 +1,78 @@
++/*
++ * arch/ubicom32/include/asm/segment.h
++ *   Memory segment definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SEGMENT_H
++#define _ASM_UBICOM32_SEGMENT_H
++
++/* 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 /* _ASM_UBICOM32_SEGMENT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/sembuf.h
+@@ -0,0 +1,52 @@
++/*
++ * arch/ubicom32/include/asm/sembuf.h
++ *   The semid64_ds structure for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SEMBUF_H
++#define _ASM_UBICOM32_SEMBUF_H
++
++/*
++ * The semid64_ds structure for ubicom32 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 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 /* _ASM_UBICOM32_SEMBUF_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/setup.h
+@@ -0,0 +1,35 @@
++/*
++ * arch/ubicom32/include/asm/setup.h
++ *   Kernel command line length definition.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ * Copyright (C) 2004, Microtronix Datacom Ltd., All rights reserved.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++
++#ifndef _ASM_UBICOM32_SETUP_H
++#define _ASM_UBICOM32_SETUP_H
++
++#define COMMAND_LINE_SIZE 512
++
++#endif /* _ASM_UBICOM32_SETUP_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/shmbuf.h
+@@ -0,0 +1,69 @@
++/*
++ * arch/ubicom32/include/asm/shmbuf.h
++ *   The shmid64_ds structure for the Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SHMBUF_H
++#define _ASM_UBICOM32_SHMBUF_H
++
++/*
++ * The shmid64_ds structure for m68k 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 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 /* _ASM_UBICOM32_SHMBUF_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/shmparam.h
+@@ -0,0 +1,35 @@
++/*
++ * arch/ubicom32/include/asm/shmparam.h
++ *   Shared memory definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ * Copyright (C) 2004   Microtronix Datacom Ltd
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ *   Alpha, ix86, M68K, Sparc, ...et al
++ */
++#ifndef _ASM_UBICOM32_SHMPARAM_H
++#define _ASM_UBICOM32_SHMPARAM_H
++
++#define       SHMLBA          PAGE_SIZE       /* attach addr a multiple of this */
++
++#endif /* _ASM_UBICOM32_SHMPARAM_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/sigcontext.h
+@@ -0,0 +1,37 @@
++/*
++ * arch/ubicom32/include/asm/sigcontext.h
++ *   Definition of sigcontext struct for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SIGCONTEXT_H
++#define _ASM_UBICOM32_SIGCONTEXT_H
++
++#include <asm/ptrace.h>
++
++struct sigcontext {
++      struct pt_regs sc_regs;
++};
++
++#endif /* _ASM_UBICOM32_SIGCONTEXT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/siginfo.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/siginfo.h
++ *   Generic siginfo.h definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SIGINFO_H
++#define _ASM_UBICOM32_SIGINFO_H
++
++#include <asm-generic/siginfo.h>
++
++#endif /* _ASM_UBICOM32_SIGINFO_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/signal.h
+@@ -0,0 +1,180 @@
++/*
++ * arch/ubicom32/include/asm/signal.h
++ *   Signal related definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SIGNAL_H
++#define _ASM_UBICOM32_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;
++
++#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
++
++/*
++ * SA_FLAGS values:
++ *
++ * SA_ONSTACK indicates that a registered stack_t will be used.
++ * 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
++#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
++
++/* 
++ * sigaltstack controls
++ */
++#define SS_ONSTACK    1
++#define SS_DISABLE    2
++
++#define MINSIGSTKSZ   2048
++#define SIGSTKSZ      8192
++
++#include <asm-generic/signal.h>
++
++#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 /* _ASM_UBICOM32_SIGNAL_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/socket.h
+@@ -0,0 +1,84 @@
++/*
++ * arch/ubicom32/include/asm/socket.h
++ *   Socket options definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SOCKET_H
++#define _ASM_UBICOM32_SOCKET_H
++
++#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_SNDBUFFORCE        32
++#define SO_RCVBUFFORCE        33
++#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
++#define SO_PASSSEC            34
++#define SO_TIMESTAMPNS                35
++#define SCM_TIMESTAMPNS               SO_TIMESTAMPNS
++
++#define SO_MARK                       36
++
++#endif /* _ASM_UBICOM32_SOCKET_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/sockios.h
+@@ -0,0 +1,40 @@
++/*
++ * arch/ubicom32/include/asm/sockios.h
++ *   Socket-level ioctl definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SOCKIOS_H
++#define _ASM_UBICOM32_SOCKIOS_H
++
++/* Socket-level I/O control calls. */
++#define FIOSETOWN     0x8901
++#define SIOCSPGRP     0x8902
++#define FIOGETOWN     0x8903
++#define SIOCGPGRP     0x8904
++#define SIOCATMARK    0x8905
++#define SIOCGSTAMP    0x8906          /* Get stamp (timeval) */
++#define SIOCGSTAMPNS  0x8907          /* Get stamp (timespec) */
++
++#endif /* _ASM_UBICOM32_SOCKIOS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/statfs.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/statfs.h
++ *   Generic statfs.h definitions
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_STATFS_H
++#define _ASM_UBICOM32_STATFS_H
++
++#include <asm-generic/statfs.h>
++
++#endif /* _ASM_UBICOM32_STATFS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/stat.h
+@@ -0,0 +1,104 @@
++/*
++ * arch/ubicom32/include/asm/stat.h
++ *   File status definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_STAT_H
++#define _ASM_UBICOM32_STAT_H
++
++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[2];
++
++#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[2];
++
++      long long       st_size;
++      unsigned long   st_blksize;
++
++      unsigned long 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 /* _ASM_UBICOM32_STAT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/swab.h
+@@ -0,0 +1,46 @@
++/*
++ * arch/ubicom32/include/asm/swab.h
++ *   Byte order swapping utility routines.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_SWAB_H
++#define _ASM_UBICOM32_SWAB_H
++
++#include <linux/types.h>
++
++#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
++#  define __BYTEORDER_HAS_U64__
++#  define __SWAB_64_THRU_32__
++#endif
++
++#if defined(IP7000) || defined(IP7000_REV2)
++
++#define __arch__swab16 __builtin_ubicom32_swapb_2
++#define __arch__swab32 __builtin_ubicom32_swapb_4
++
++#endif /* IP7000 */
++
++#endif /* _ASM_UBICOM32_SWAB_H */
++
+--- /dev/null
++++ b/arch/ubicom32/include/asm/termbits.h
+@@ -0,0 +1,227 @@
++/*
++ * arch/ubicom32/include/asm/termbits.h
++ *   Terminal/serial port definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_TERMBITS_H
++#define _ASM_UBICOM32_TERMBITS_H
++
++#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 */
++};
++
++struct termios2 {
++      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 */
++      speed_t c_ispeed;               /* input speed */
++      speed_t c_ospeed;               /* output speed */
++};
++
++struct ktermios {
++      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 */
++      speed_t c_ispeed;               /* input speed */
++      speed_t c_ospeed;               /* output speed */
++};
++
++/* 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    BOTHER 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 */
++#define CMSPAR          010000000000          /* mark or space (stick) parity */
++#define CRTSCTS         020000000000          /* flow control */
++
++#define IBSHIFT       16                      /* Shift from CBAUD to CIBAUD */
++
++/* 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 /* _ASM_UBICOM32_TERMBITS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/termios.h
+@@ -0,0 +1,119 @@
++/*
++ * arch/ubicom32/include/asm/termios.h
++ *   Ubicom32 termio definitions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_TERMIOS_H
++#define _ASM_UBICOM32_TERMIOS_H
++
++#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 */
++
++#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 termios2))
++#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
++#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
++#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
++
++#endif        /* __KERNEL__ */
++
++#endif /* _ASM_UBICOM32_TERMIOS_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/thread_info.h
+@@ -0,0 +1,134 @@
++/*
++ * arch/ubicom32/include/asm/thread_info.h
++ *   Ubicom32 architecture low-level thread information.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ * Adapted from the i386 and PPC versions by Greg Ungerer (gerg@snapgear.com)
++ * Copyright (C) 2002  David Howells (dhowells@redhat.com)
++ * - Incorporating suggestions made by Linus Torvalds and Dave Miller
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++
++#ifndef _ASM_UBICOM32_THREAD_INFO_H
++#define _ASM_UBICOM32_THREAD_INFO_H
++
++#include <asm/page.h>
++
++/*
++ * Size of kernel stack for each process. This must be a power of 2...
++ */
++#ifdef CONFIG_4KSTACKS
++#define THREAD_SIZE_ORDER (0)
++#else
++#define THREAD_SIZE_ORDER (1)
++#endif
++
++/*
++ * for asm files, THREAD_SIZE is now generated by asm-offsets.c
++ */
++#define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER)
++
++#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 */
++      int                interrupt_nesting;   /* Interrupt nesting level. */
++      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,                    \
++      .interrupt_nesting      = 0,            \
++      .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 */
++static inline struct thread_info *current_thread_info(void)
++{
++      struct thread_info *ti;
++
++      asm (
++              "and.4  %0, sp, %1\n\t"
++              : "=&r" (ti)
++              : "d" (~(THREAD_SIZE-1))
++              : "cc"
++      );
++
++      return ti;
++}
++
++#define STACK_WARN (THREAD_SIZE / 8)
++
++#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR 1
++
++/* thread information allocation */
++#define alloc_thread_info(tsk) ((struct thread_info *) \
++                              __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER))
++#define free_thread_info(ti)  free_pages((unsigned long) (ti), THREAD_SIZE_ORDER)
++#endif /* __ASSEMBLY__ */
++
++#define       PREEMPT_ACTIVE  0x4000000
++
++/*
++ * thread information flag bit numbers
++ */
++#define TIF_SYSCALL_TRACE     0       /* syscall trace active */
++#define TIF_SIGPENDING                1       /* signal pending */
++#define TIF_NEED_RESCHED      2       /* rescheduling necessary */
++#define TIF_POLLING_NRFLAG    3       /* true if poll_idle() is polling
++                                         TIF_NEED_RESCHED */
++#define TIF_MEMDIE            4
++
++/* as above, but as bit values */
++#define _TIF_SYSCALL_TRACE    (1<<TIF_SYSCALL_TRACE)
++#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 */
++
++#endif /* __KERNEL__ */
++
++#endif /* _ASM_UBICOM32_THREAD_INFO_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/types.h
+@@ -0,0 +1,75 @@
++/*
++ * arch/ubicom32/include/asm/types.h
++ *   Date type definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_TYPES_H
++#define _ASM_UBICOM32_TYPES_H
++
++/*
++ * 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.
++ */
++
++#include <asm-generic/int-ll64.h>
++
++#ifndef __ASSEMBLY__
++
++typedef unsigned short umode_t;
++
++#endif /* __ASSEMBLY__ */
++
++/*
++ * These aren't exported outside the kernel to avoid name space clashes
++ */
++#ifdef __KERNEL__
++
++#define BITS_PER_LONG 32
++
++#ifndef __ASSEMBLY__
++
++/* DMA addresses are always 32-bits wide */
++
++typedef u32 dma_addr_t;
++typedef u32 dma64_addr_t;
++
++/*
++ * XXX These are "Ubicom style" typedefs. They should be removed in all files used by linux.
++ */
++typedef u32 u32_t;
++typedef s32 s32_t;
++typedef u16 u16_t;
++typedef s16 s16_t;
++typedef u8 u8_t;
++typedef s8 s8_t;
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* __KERNEL__ */
++
++#endif /* _ASM_UBICOM32_TYPES_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/ucontext.h
+@@ -0,0 +1,39 @@
++/*
++ * arch/ubicom32/include/asm/ucontext.h
++ *   Definition of ucontext structure for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_UCONTEXT_H
++#define _ASM_UBICOM32_UCONTEXT_H
++
++struct ucontext {
++      unsigned long     uc_flags;
++      struct ucontext  *uc_link;
++      stack_t           uc_stack;
++      struct sigcontext         uc_mcontext;
++      sigset_t          uc_sigmask;   /* mask last for extensibility */
++};
++
++#endif /* _ASM_UBICOM32_UCONTEXT_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/unistd.h
+@@ -0,0 +1,400 @@
++/*
++ * arch/ubicom32/include/asm/unistd.h
++ *   Ubicom32 architecture syscall definitions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_UNISTD_H
++#define _ASM_UBICOM32_UNISTD_H
++
++/*
++ * This file contains the system call numbers.
++ */
++
++#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
++#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_pread64          180
++#define __NR_pwrite64         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
++#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_vserver          278
++#define __NR_add_key          279
++#define __NR_request_key      280
++#define __NR_keyctl           281
++#define __NR_ioprio_set               282
++#define __NR_ioprio_get               283
++#define __NR_inotify_init     284
++#define __NR_inotify_add_watch        285
++#define __NR_inotify_rm_watch 286
++#define __NR_migrate_pages    287
++#define __NR_openat           288
++#define __NR_mkdirat          289
++#define __NR_mknodat          290
++#define __NR_fchownat         291
++#define __NR_futimesat                292
++#define __NR_fstatat64                293
++#define __NR_unlinkat         294
++#define __NR_renameat         295
++#define __NR_linkat           296
++#define __NR_symlinkat                297
++#define __NR_readlinkat               298
++#define __NR_fchmodat         299
++#define __NR_faccessat                300
++#define __NR_pselect6         301
++#define __NR_ppoll            302
++#define __NR_unshare          303
++#define __NR_set_robust_list  304
++#define __NR_get_robust_list  305
++#define __NR_splice           306
++#define __NR_sync_file_range  307
++#define __NR_tee              308
++#define __NR_vmsplice         309
++#define __NR_move_pages               310
++#define __NR_sched_setaffinity        311
++#define __NR_sched_getaffinity        312
++#define __NR_kexec_load               313
++#define __NR_getcpu           314
++#define __NR_epoll_pwait      315
++#define __NR_utimensat                316
++#define __NR_signalfd         317
++#define __NR_timerfd_create   318
++#define __NR_eventfd          319
++#define __NR_fallocate                320
++#define __NR_timerfd_settime  321
++#define __NR_timerfd_gettime  322
++#define __NR_signalfd4                323
++#define __NR_eventfd2         324
++#define __NR_epoll_create1    325
++#define __NR_dup3             326
++#define __NR_pipe2            327
++#define __NR_inotify_init1    328
++
++#ifdef __KERNEL__
++
++#define NR_syscalls           329
++
++#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
++
++/*
++ * "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")
++#define cond_syscall(x) long x(void)  __attribute__((weak,alias("sys_ni_syscall")))
++#endif /* __KERNEL__ */
++
++#endif /* _ASM_UBICOM32_UNISTD_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/user.h
+@@ -0,0 +1,82 @@
++/*
++ * arch/ubicom32/include/asm/user.h
++ *   Ubicom32 architecture core file definitions.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_USER_H
++#define _ASM_UBICOM32_USER_H
++
++#include <asm/ptrace.h>
++#include <asm/page.h>
++/*
++ * Adapted from <asm-powerpc/user.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, NOT the osf-core).  The 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 handy at some point.  All of the registers
++ *    are stored as part of the upage.  The upage should always be
++ *    only one page long.
++ *  data: The data segment follows next.  We use current->end_text to
++ *    current->brk to pick up all of the user variables, plus any memory
++ *    that may have been sbrk'ed.  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 usp to
++ *    current->start_stack, so we round each of these in order to be able
++ *    to write an integer number of pages.
++ */
++
++struct user_ubicom32fp_struct {
++};
++
++struct user {
++      struct pt_regs  regs;                   /* entire machine state */
++      size_t          u_tsize;                /* text size (pages) */
++      size_t          u_dsize;                /* data size (pages) */
++      size_t          u_ssize;                /* stack size (pages) */
++      unsigned long   start_code;             /* text starting address */
++      unsigned long   start_data;             /* data starting address */
++      unsigned long   start_stack;            /* stack starting address */
++      long int        signal;                 /* signal causing core dump */
++      unsigned long   u_ar0;                  /* help gdb find registers */
++      unsigned long   magic;                  /* identifies a core file */
++      char            u_comm[32];             /* user command name */
++};
++
++#define NBPG                  PAGE_SIZE
++#define UPAGES                        1
++#define HOST_TEXT_START_ADDR  (u.start_code)
++#define HOST_DATA_START_ADDR  (u.start_data)
++#define HOST_STACK_END_ADDR   (u.start_stack + u.u_ssize * NBPG)
++
++#endif        /* _ASM_UBICOM32_USER_H */
+--- /dev/null
++++ b/arch/ubicom32/include/asm/xor.h
+@@ -0,0 +1,33 @@
++/*
++ * arch/ubicom32/include/asm/xor.h
++ *   Generic xor.h definitions for Ubicom32 architecture.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not, 
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++#ifndef _ASM_UBICOM32_XOR_H
++#define _ASM_UBICOM32_XOR_H
++
++#include <asm-generic/xor.h>
++
++#endif /* _ASM_UBICOM32_XOR_H */
+--- /dev/null
++++ b/arch/ubicom32/Kconfig
+@@ -0,0 +1,455 @@
++#
++# For a description of the syntax of this configuration file,
++# see Documentation/kbuild/kconfig-language.txt.
++#
++
++mainmenu "uClinux/ubicom32 (w/o MMU) Kernel Configuration"
++
++config RAMBASE
++      hex
++      default "0x40000000"
++      help
++              Define the address that RAM starts at.
++
++config UBICOM32
++      bool
++      select HAVE_OPROFILE
++      default y
++
++config RAMKERNEL
++      bool
++      default y
++
++config CPU_BIG_ENDIAN
++      bool
++      default y
++
++config FORCE_MAX_ZONEORDER
++      int
++      default "14"
++
++config HAVE_CLK
++      bool
++      default y
++
++config MMU
++      bool
++      default n
++
++config FPU
++      bool
++      default n
++
++config ZONE_DMA
++      bool
++      default y
++
++config RWSEM_GENERIC_SPINLOCK
++      bool
++      default y
++
++config RWSEM_XCHGADD_ALGORITHM
++      bool
++      default n
++
++config ARCH_HAS_ILOG2_U32
++      bool
++      default n
++
++config ARCH_HAS_ILOG2_U64
++      bool
++      default n
++
++config GENERIC_FIND_NEXT_BIT
++      bool
++      default y
++
++config GENERIC_GPIO
++      bool
++      default y
++
++config GPIOLIB
++      bool
++      default y
++
++config GENERIC_HWEIGHT
++      bool
++      default y
++
++config GENERIC_HARDIRQS
++      bool
++      default y
++
++config STACKTRACE_SUPPORT
++      bool
++      default y
++
++config LOCKDEP_SUPPORT
++      bool
++      default y
++
++config GENERIC_CALIBRATE_DELAY
++      bool
++      default y
++
++config GENERIC_TIME
++      bool
++      default y
++
++config TIME_LOW_RES
++      bool
++      default y
++
++config GENERIC_CLOCKEVENTS
++      bool
++      default y
++
++config GENERIC_CLOCKEVENTS_BROADCAST
++      bool
++      depends on GENERIC_CLOCKEVENTS
++      default y if SMP && !LOCAL_TIMERS
++
++config NO_IOPORT
++      def_bool y
++
++config ARCH_SUPPORTS_AOUT
++      def_bool y
++
++config IRQ_PER_CPU
++      bool
++      default y
++
++config SCHED_NO_NO_OMIT_FRAME_POINTER
++      bool
++      default y
++
++menu "Processor type and features"
++
++config BRD_32MB
++      bool
++      depends on IP5160EVAL
++      help
++              Board has 32MB of RAM on it.  It is a hidden option used to select default for size of RAM
++      default n
++
++config BRD_64MB
++      bool
++      depends on IP7145DPF || IP7160RGW || IP7160BRINGUP || IP7160DPF || IP5170DPF || IP5160DEV
++      help
++              Board has 64MB of RAM on it.  It is a hidden option used to select default for size of RAM
++      default n
++
++config BRD_128MB
++      bool
++      depends on IP7500MODULE || IP7500AV || IP7500MEDIA
++      help
++              Board has 128MB of RAM on it.  It is a hidden option used to select default for size of RAM
++      default n
++
++comment "Processor type will be selected by Board"
++
++config UBICOM32_V3
++      bool
++      help
++        Ubicom IP5xxx series processor support.
++
++config UBICOM32_V4
++      bool
++      help
++        Ubicom IP7xxx series processor support.
++
++comment "Board"
++choice
++      prompt "Board type"
++      help
++              Select your board.
++
++config NOBOARD
++      bool "No board selected"
++      help
++              Default. Don't select any board specific config. Will not build unless you change!
++
++# Add your boards here
++source "arch/ubicom32/mach-ip5k/Kconfig"
++source "arch/ubicom32/mach-ip7k/Kconfig"
++
++endchoice
++
++comment "Kernel Options"
++config SMP
++      bool "Symmetric multi-processing support"
++      select USE_GENERIC_SMP_HELPERS
++      default n
++      help
++        Enables multithreading support.  Enabling SMP support increases
++        the size of system data structures.  SMP support can have either 
++        positive or negative impact on performance depending on workloads. 
++
++        If you do not know what to do here, say N.
++
++config NR_CPUS
++      int "Number of configured CPUs"
++      range 2 32
++      default 2
++      depends on SMP
++      help
++              Upper bound on the number of CPUs. Space is reserved 
++              at compile time for this many CPUs.
++              
++config LOCAL_TIMERS
++      bool "Use local timer interrupts"
++      depends on SMP
++      default y
++      help
++        Enable support for local timers on SMP platforms, rather then the
++        legacy IPI broadcast method.  Local timers allows the system
++        accounting to be spread across the timer interval, preventing a
++        "thundering herd" at every timer tick.  A physical timer is allocated
++        per cpu.              
++
++config TIMER_EXTRA_ALLOC
++      int "Number of additional physical timer events to create"
++      depends on GENERIC_CLOCKEVENTS
++      default 0
++      help
++              The Ubicom32 processor has a number of event timers that can be wrapped
++              in Linux clock event structures (assuming that the timers are not being
++              used for another purpose).  Based on the value of LOCAL_TIMERS, either 
++              2 timers will be used or a timer will be used for every CPU.  This value
++              allows the programmer to select additional timers over that amount.
++                      
++config IRQSTACKS
++      bool "Create separate stacks for interrupt handling"
++      default n
++      help
++              Selecting this causes interrupts to be created on a separate
++              stack instead of nesting the interrupts on the kernel stack.
++              
++config IRQSTACKS_USEOCM
++      bool "Use OCM for interrupt stacks"
++      default n
++      depends on IRQSTACKS
++      help
++              Selecting this cause the interrupt stacks to be placed in OCM
++              reducing cache misses at the expense of using the OCM for servicing
++              interrupts.
++
++menu "OCM Instruction Heap"
++
++config OCM_MODULES_RESERVATION
++      int "OCM Instruction heap reservation. 0-192 kB"
++      range 0 192
++      default "0"
++      help
++        The minimum amount of OCM memory to reserve for kernel loadable module
++        code. If you are not using this memory it cannot be used for anything
++        else. Leave it as 0 if you have prebuilt modules that are compiled with
++        OCM support.
++
++config OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE
++      bool "Give all unused ocm code space to the ocm instruction heap."
++      default n
++      help
++        Allow the OCM instruction heap allocation to consume any remaining
++        unused OCM code space.  The result of this is that you will not have
++        and deterministic results, but you will not have any waste either.
++
++config OCM_MODULES_FALLBACK_TO_DDR
++      bool "Loadable Modules requiring OCM may fallback to use DDR."
++      default n
++      help
++        If a module cannot get the OCM code it requires allow DDR to
++        be used instead.
++endmenu
++
++config HZ
++      int "Frequency of 'jiffies' (for polling)"
++      default 1000
++      help
++              100 is common for embedded systems, but 1000 allows
++              you to do more drivers without actually having
++              interrupts working properly.
++
++comment "RAM configuration"
++
++if BRD_32MB
++
++config RAMSIZE
++      hex "Size of RAM (in bytes)"
++      range 0x00000000 0x02000000
++      default "0x02000000"
++      help
++              Define the size of the system RAM. If you select 0 then the
++              kernel will try to probe the RAM size at runtime. This is not
++              supported on all CPU types.
++
++endif
++
++if BRD_64MB
++
++config RAMSIZE
++      hex "Size of RAM (in bytes)"
++      range 0x00000000 0x04000000
++      default "0x04000000"
++      help
++              Define the size of the system RAM. If you select 0 then the
++              kernel will try to probe the RAM size at runtime. This is not
++              supported on all CPU types.
++
++endif
++
++if BRD_128MB
++
++config RAMSIZE
++      hex "Size of RAM (in bytes)"
++      range 0x00000000 0x08000000
++      default "0x08000000"
++      help
++              Define the size of the system RAM. If you select 0 then the
++              kernel will try to probe the RAM size at runtime. This is not
++              supported on all CPU types.
++
++endif
++
++config KERNELBASE
++      hex "Address of the base of kernel code"
++      default "0x40400000"
++      help
++              For the time being we are going to start the Kernel at a 4 meg offset.
++
++comment "Build options"
++config LINKER_RELAXATION
++      bool "Linker Relaxation"
++      default y
++      help
++        Turns on linker relaxation that will produce smaller
++        faster code. Increases link time.
++
++comment "Driver options"
++menu "PCI Bus"
++config PCI
++      bool "PCI bus"
++      default true
++      help
++        Enable/Disable PCI bus
++      source "drivers/pci/Kconfig"
++
++
++config PCI_DEV0_IDSEL
++      hex "slot 0 address"
++      depends on PCI
++      default "0x01000000"
++      help
++        Slot 0 address.  This address should correspond to the address line
++        which the IDSEL bit for this slot is connected to.
++
++config PCI_DEV1_IDSEL
++      hex "slot 1 address"
++      depends on PCI
++      default "0x02000000"
++      help
++        Slot 1 address.  This address should correspond to the address line
++        which the IDSEL bit for this slot is connected to.
++endmenu
++# End PCI
++
++menu "Input devices"
++config UBICOM_INPUT
++      bool "Ubicom polled GPIO input driver"
++      select INPUT
++      select INPUT_POLLDEV
++      help
++              Polling input driver, much like the GPIO input driver, except that it doesn't
++              rely on interrupts.  It will report events via the input subsystem.
++      default n
++
++config UBICOM_INPUT_I2C
++      bool "Ubicom polled GPIO input driver over I2C"
++      select INPUT
++      select INPUT_POLLDEV
++      help
++              Polling input driver, much like the PCA953x driver, it can support a variety of
++              different I2C I/O expanders.  This device polls the I2C I/O expander for events
++              and reports them via the input subsystem.
++      default n
++endmenu
++# Input devices
++
++menu "Misc devices"
++config UBICOM_HID
++      bool "Ubicom HID driver"
++      select INPUT
++      select INPUT_POLLDEV
++      select LCD_CLASS_DEVICE
++      help
++              Driver for HID chip found on some Ubicom reference designs.  This chip handles
++              PWM, button input, and IR remote control.  It registers as an input device and
++              a backlight device.
++      default n
++endmenu
++# Misc devices
++
++config CMDLINE_BOOL
++      bool "Built-in kernel command line"
++      default n
++      help
++        Allow for specifying boot arguments to the kernel at
++        build time.  On some systems (e.g. embedded ones), it is
++        necessary or convenient to provide some or all of the
++        kernel boot arguments with the kernel itself (that is,
++        to not rely on the boot loader to provide them.)
++
++        To compile command line arguments into the kernel,
++        set this option to 'Y', then fill in the
++        the boot arguments in CONFIG_CMDLINE.
++
++        Systems with fully functional boot loaders (i.e. non-embedded)
++        should leave this option set to 'N'.
++
++config CMDLINE
++      string "Built-in kernel command string"
++      depends on CMDLINE_BOOL
++      default ""
++      help
++        Enter arguments here that should be compiled into the kernel
++        image and used at boot time.  If the boot loader provides a
++        command line at boot time, it is appended to this string to
++        form the full kernel command line, when the system boots.
++
++        However, you can use the CONFIG_CMDLINE_OVERRIDE option to
++        change this behavior.
++
++        In most cases, the command line (whether built-in or provided
++        by the boot loader) should specify the device for the root
++        file system.
++
++config CMDLINE_OVERRIDE
++      bool "Built-in command line overrides boot loader arguments"
++      default n
++      depends on CMDLINE_BOOL
++      help
++        Set this option to 'Y' to have the kernel ignore the boot loader
++        command line, and use ONLY the built-in command line.
++
++        This is used to work around broken boot loaders.  This should
++        be set to 'N' under normal conditions.
++
++endmenu
++# End Processor type and features
++
++source "arch/ubicom32/Kconfig.debug"
++
++menu "Executable file formats"
++source "fs/Kconfig.binfmt"
++endmenu
++
++source "init/Kconfig"
++source "kernel/Kconfig.preempt"
++source "kernel/time/Kconfig"
++source "mm/Kconfig"
++source "net/Kconfig"
++source "drivers/Kconfig"
++source "fs/Kconfig"
++source "security/Kconfig"
++source "crypto/Kconfig"
++source "lib/Kconfig"
+--- /dev/null
++++ b/arch/ubicom32/Kconfig.debug
+@@ -0,0 +1,117 @@
++menu "Kernel hacking"
++
++config TRACE_IRQFLAGS_SUPPORT
++      def_bool y
++      
++config PROTECT_KERNEL
++      default y
++      bool 'Enable Kernel range register Protection'
++      help
++        Adds code to enable/disable range registers to protect static
++        kernel code/data from userspace.  Currently the ranges covered
++        do no protect kernel loadable modules or dynamically allocated
++        kernel data.
++
++config NO_KERNEL_MSG
++      bool "Suppress Kernel BUG Messages"
++      help
++        Do not output any debug BUG messages within the kernel.
++
++config EARLY_PRINTK
++      bool "Use the driver that you selected as console also for early printk (to debug kernel bootup)."
++      default n
++      help
++        If you want to use the serdes driver (console=ttyUS0) for
++        early printk, you must also supply an additional kernel boot
++        parameter like this:
++
++              serdes=ioportaddr,irq,clockrate,baud
++
++        For an IP7160RGW eval board, you could use this:
++
++              serdes=0x2004000,61,250000000,57600
++
++        which will let you see early printk output at 57600 baud.
++
++config STOP_ON_TRAP
++      bool "Enable stopping at the LDSR for all traps"
++      default n
++      help
++      Cause the LDSR to stop all threads whenever a trap is about to be serviced
++      
++config STOP_ON_BUG
++      bool "Enable stopping on failed BUG_ON()"
++      default n
++      help
++      Cause all BUG_ON failures to stop all threads
++      
++config DEBUG_IRQMEASURE
++      bool "Enable IRQ handler measurements"
++      default n
++      help
++      When enabled each IRQ's min/avg/max times will be printed.  If the handler
++      re-enables interrupt, the times will show the full time including to service
++      nested interrupts.  See /proc/irq_measurements.
++      
++config DEBUG_PCIMEASURE
++      bool "Enable PCI transaction measurements"
++      default n
++      help
++      When enabled the system will measure the min/avg/max timer for each PCI transactions.
++      See /proc/pci_measurements.
++
++config ACCESS_OK_CHECKS_ENABLED
++      bool "Enable user space access checks"
++      default n
++      help
++      Enabling this check causes the kernel to verify that addresses passed
++      to the kernel by the user space code are within the processes 
++      address space.  On a no-mmu system, this is done by examining the
++      processes memory data structures (adversly affecting performance) but
++      ensuring that a process does not ask the kernel to violate another 
++      processes address space.  Sadly, the kernel uses access_ok() for 
++      address that are in the kernel which results in a large volume of 
++      false positives.
++
++choice
++      prompt "Unaligned Access Support"
++      default UNALIGNED_ACCESS_ENABLED
++      help
++              Kernel / Userspace unaligned access handling.
++
++config  UNALIGNED_ACCESS_ENABLED
++      bool "Kernel and Userspace"
++      help
++
++config  UNALIGNED_ACCESS_USERSPACE_ONLY
++      bool "Userspace Only"
++      help
++
++config  UNALIGNED_ACCESS_DISABLED
++      bool "Disabled"
++      help
++
++endchoice
++
++config DEBUG_STACKOVERFLOW
++      bool "Check for stack overflows"
++      default n
++      depends on DEBUG_KERNEL
++      help
++        This option will cause messages to be printed if free kernel stack space
++        drops below a certain limit (THREAD_SIZE /8).
++
++config DEBUG_STACK_USAGE
++      bool "Stack utilization instrumentation"
++      default n
++      depends on DEBUG_KERNEL
++      help
++        Enables the display of the minimum amount of free kernel stack which each
++        task has ever had available in the sysrq-T and sysrq-P debug output.
++
++        This option will slow down process creation somewhat.
++
++source "lib/Kconfig.debug"
++
++endmenu
++
+--- /dev/null
++++ b/arch/ubicom32/Makefile
+@@ -0,0 +1,103 @@
++#
++# arch/ubicom32/Makefile
++#     <TODO: Replace with short file description>
++#
++# (C) Copyright 2009, Ubicom, Inc.
++#
++# This file is part of the Ubicom32 Linux Kernel Port.
++#
++# The Ubicom32 Linux Kernel Port 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.
++#
++# The Ubicom32 Linux Kernel Port 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.
++#
++# You should have received a copy of the GNU General Public License
++# along with the Ubicom32 Linux Kernel Port.  If not, 
++# see <http://www.gnu.org/licenses/>.
++#
++# Ubicom32 implementation derived from (with many thanks):
++#   arch/m68knommu
++#   arch/blackfin
++#   arch/parisc
++#
++
++KBUILD_DEFCONFIG := 
++
++# setup the machine name and machine dependent settings
++machine-$(CONFIG_UBICOM32_V3) := ip5k
++machine-$(CONFIG_UBICOM32_V4) := ip7k
++MACHINE := $(machine-y)
++export MACHINE
++
++model-$(CONFIG_RAMKERNEL)     := ram
++model-$(CONFIG_ROMKERNEL)     := rom
++MODEL := $(model-y)
++export MODEL
++
++CPUCLASS := $(cpuclass-y)
++
++export CPUCLASS
++
++#
++# We want the core kernel built using the fastcall ABI but modules need
++# to be built using the slower calling convention because they could be
++# loaded out of range for fast calls.
++#
++CFLAGS_KERNEL    += -mfastcall
++CFLAGS_MODULE    += -mno-fastcall
++
++#
++# Some CFLAG additions based on specific CPU type.
++#
++cflags-$(CONFIG_UBICOM32_V3)          := -march=ubicom32v3 -mno-fdpic -DIP5000
++cflags-$(CONFIG_UBICOM32_V4)          := -march=ubicom32v4 -mno-fdpic -DIP7000
++
++ldflags-$(CONFIG_LINKER_RELAXATION)   := --relax
++LDFLAGS_vmlinux := $(ldflags-y)
++
++GCCLIBDIR := $(dir $(shell $(CC) $(cflags-y) -print-libgcc-file-name))
++
++KBUILD_CFLAGS += $(cflags-y) -ffunction-sections
++KBUILD_AFLAGS += $(cflags-y)
++
++KBUILD_CFLAGS += -D__linux__ -Dlinux
++KBUILD_CFLAGS += -DUTS_SYSNAME=\"uClinux\"
++
++# include any machine specific directory
++ifneq ($(machine-y),)
++core-y += arch/$(ARCH)/mach-$(MACHINE)/
++endif
++
++head-y := arch/$(ARCH)/kernel/head.o
++
++core-y        += arch/$(ARCH)/kernel/ \
++         arch/$(ARCH)/mm/ \
++         arch/$(ARCH)/crypto/ \
++         arch/$(ARCH)/mach-common/
++
++drivers-$(CONFIG_OPROFILE)    += arch/ubicom32/oprofile/
++
++libs-y        += arch/$(ARCH)/lib/
++
++archclean:
++
++# make sure developer has selected a valid board
++ifeq ($(CONFIG_NOBOARD),y)
++# $(error have to select a valid board file $(CONFIG_NOBOARD), please run kernel config again)
++_all: config_board_error
++endif
++
++config_board_error:
++      @echo "*************************************************"
++      @echo "You have not selected a proper board."
++      @echo "Please run menuconfig (or config) against your"
++      @echo "kernel and choose your board under Processor"
++      @echo "options"
++      @echo "*************************************************"
++      @exit 1
++
+--- /dev/null
++++ b/arch/ubicom32/kernel/asm-offsets.c
+@@ -0,0 +1,162 @@
++/*
++ * arch/ubicom32/kernel/asm-offsets.c
++ *   Ubicom32 architecture definitions needed by assembly language modules.
++ *
++ * (C) Copyright 2009, Ubicom, Inc.
++ *
++ * This file is part of the Ubicom32 Linux Kernel Port.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * The Ubicom32 Linux Kernel Port 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.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with the Ubicom32 Linux Kernel Port.  If not,
++ * see <http://www.gnu.org/licenses/>.
++ *
++ * Ubicom32 implementation derived from (with many thanks):
++ *   arch/m68knommu
++ *   arch/blackfin
++ *   arch/parisc
++ */
++/*
++ * This program is used to generate definitions needed by
++ * assembly language modules.
++ *
++ * We use the technique used in the OSF Mach kernel code:
++ * generate asm statements containing #defines,
++ * compile this file to assembler, and then extract the
++ * #defines from the assembly-language output.
++ */
++
++#include <linux/module.h>
++#include <linux/stddef.h>
++#include <linux/sched.h>
++#include <linux/kernel_stat.h>
++#include <linux/ptrace.h>
++#include <linux/hardirq.h>
++#include <asm/bootinfo.h>
++#include <asm/irq.h>
++#include <asm/thread_info.h>
++
++#define DEFINE(sym, val) \
++        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
++
++#define BLANK() asm volatile("\n->" : : )
++
++int main(void)
++{
++      /* offsets into the task struct */
++      DEFINE(TASK_STATE, offsetof(struct task_struct, state));
++      DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
++      DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));
++      DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked));
++      DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
++      DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
++      DEFINE(TASK_MM, offsetof(struct task_struct, mm));
++      DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
++
++      /* offsets into the kernel_stat struct */
++      DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
++
++      /* offsets into the irq_cpustat_t struct */
++      DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending));
++
++      /* offsets into the thread struct */
++      DEFINE(THREAD_D10, offsetof(struct thread_struct, d10));
++      DEFINE(THREAD_D11, offsetof(struct thread_struct, d11));
++      DEFINE(THREAD_D12, offsetof(struct thread_struct, d12));
++      DEFINE(THREAD_D13, offsetof(struct thread_struct, d13));
++      DEFINE(THREAD_A1, offsetof(struct thread_struct, a1));
++      DEFINE(THREAD_A2, offsetof(struct thread_struct, a2));
++      DEFINE(THREAD_A5, offsetof(struct thread_struct, a5));
++      DEFINE(THREAD_A6, offsetof(struct thread_struct, a6));
++      DEFINE(THREAD_SP, offsetof(struct thread_struct, sp));
++
++      /* offsets into the pt_regs */
++      DEFINE(PT_D0, offsetof(struct pt_regs, dn[0]));
++      DEFINE(PT_D1, offsetof(struct pt_regs, dn[1]));
++      DEFINE(PT_D2, offsetof(struct pt_regs, dn[2]));
++      DEFINE(PT_D3, offsetof(struct pt_regs, dn[3]));
++      DEFINE(PT_D4, offsetof(struct pt_regs, dn[4]));
++      DEFINE(PT_D5, offsetof(struct pt_regs, dn[5]));
++      DEFINE(PT_D6, offsetof(struct pt_regs, dn[6]));
++      DEFINE(PT_D7, offsetof(struct pt_regs, dn[7]));
++      DEFINE(PT_D8, offsetof(struct pt_regs, dn[8]));
++      DEFINE(PT_D9, offsetof(struct pt_regs, dn[9]));
++      DEFINE(PT_D10, offsetof(struct pt_regs, dn[10]));
++      DEFINE(PT_D11, offsetof(struct pt_regs, dn[11]));
++      DEFINE(PT_D12, offsetof(struct pt_regs, dn[12]));
++      DEFINE(PT_D13, offsetof(struct pt_regs, dn[13]));
++      DEFINE(PT_D14, offsetof(struct pt_regs, dn[14]));
++      DEFINE(PT_D15, offsetof(struct pt_regs, dn[15]));
++      DEFINE(PT_A0, offsetof(struct pt_regs, an[0]));
++      DEFINE(PT_A1, offsetof(struct pt_regs, an[1]));
++      DEFINE(PT_A2, offsetof(struct pt_regs, an[2]));
++      DEFINE(PT_A3, offsetof(struct pt_regs, an[3]));
++      DEFINE(PT_A4, offsetof(struct pt_regs, an[4]));
++      DEFINE(PT_A5, offsetof(struct pt_regs, an[5]));
++      DEFINE(PT_A6, offsetof(struct pt_regs, an[6]));
++      DEFINE(PT_A7, offsetof(struct pt_regs, an[7]));
++      DEFINE(PT_SP, offsetof(struct pt_regs, an[7]));
++
++      DEFINE(PT_ACC0HI, offsetof(struct pt_regs, acc0[0]));
++      DEFINE(PT_ACC0LO, offsetof(struct pt_regs, acc0[1]));
++      DEFINE(PT_MAC_RC16, offsetof(struct pt_regs, mac_rc16));
++
++      DEFINE(PT_ACC1HI, offsetof(struct pt_regs, acc1[0]));
++      DEFINE(PT_ACC1LO, offsetof(struct pt_regs, acc1[1]));
++
++      DEFINE(PT_SOURCE3, offsetof(struct pt_regs, source3));
++      DEFINE(PT_INST_CNT, offsetof(struct pt_regs, inst_cnt));
++      DEFINE(PT_CSR, offsetof(struct pt_regs, csr));
++      DEFINE(PT_DUMMY_UNUSED, offsetof(struct pt_regs, dummy_unused));
++
++      DEFINE(PT_INT_MASK0, offsetof(struct pt_regs, int_mask0));
++      DEFINE(PT_INT_MASK1, offsetof(struct pt_regs, int_mask1));
++
++      DEFINE(PT_PC, offsetof(struct pt_regs, pc));
++
++      DEFINE(PT_TRAP_CAUSE, offsetof(struct pt_regs, trap_cause));
++
++      DEFINE(PT_SIZE, sizeof(struct pt_regs));
++
++      DEFINE(PT_FRAME_TYPE, offsetof(struct pt_regs, frame_type));
++
++      DEFINE(PT_ORIGINAL_D0, offsetof(struct pt_regs, original_dn_0));
++      DEFINE(PT_PREVIOUS_PC, offsetof(struct pt_regs, previous_pc));
++
++      /* offsets into the kernel_stat struct */
++      DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
++
++      /* signal defines */
++      DEFINE(SIGSEGV, SIGSEGV);
++      //DEFINE(SEGV_MAPERR, SEGV_MAPERR);
++      DEFINE(SIGTRAP, SIGTRAP);
++      //DEFINE(TRAP_TRACE, TRAP_TRACE);
++
++      DEFINE(PT_PTRACED, PT_PTRACED);
++      DEFINE(PT_DTRACE, PT_DTRACE);
++
++      DEFINE(ASM_THREAD_SIZE, THREAD_SIZE);
++
++      /* Offsets in thread_info structure */
++      DEFINE(TI_TASK, offsetof(struct thread_info, task));
++      DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
++      DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
++      DEFINE(TI_PREEMPTCOUNT, offsetof(struct thread_info, preempt_count));
++      DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
++      DEFINE(TI_INTR_NESTING, offsetof(struct thread_info, interrupt_nesting));
++      DEFINE(ASM_TIF_NEED_RESCHED, TIF_NEED_RESCHED);
++      DEFINE(ASM_TIF_SYSCALL_TRACE, TIF_SYSCALL_TRACE);
++      DEFINE(ASM_TIF_SIGPENDING, TIF_SIGPENDING);
++
++      DEFINE(ASM_RAM_END, (CONFIG_RAMBASE + CONFIG_RAMSIZE));
++      return 0;
++}
+--- /dev/null
++++ b/arch/ubicom32/kernel/Makefile
+@@ -0,0 +1,64 @@
++#
++# arch/ubicom32/kernel/Makefile
++#     Main Makefile for the Ubicom32 arch directory.
++#
++# (C) Copyright 2009, Ubicom, Inc.
++#
++# This file is part of the Ubicom32 Linux Kernel Port.
++#
++# The Ubicom32 Linux Kernel Port 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.
++#
++# The Ubicom32 Linux Kernel Port 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.
++#
++# You should have received a copy of the GNU General Public License
++# along with the Ubicom32 Linux Kernel Port.  If not, 
++# see <http://www.gnu.org/licenses/>.
++#
++# Ubicom32 implementation derived from (with many thanks):
++#   arch/m68knommu
++#   arch/blackfin
++#   arch/parisc
++#
++
++extra-y := head.o vmlinux.lds
++
++obj-y += \
++      devtree.o \
++      dma.o \
++      flat.o \
++      init_task.o \
++      irq.o \
++      ldsr.o \
++      os_node.o \
++      process.o \
++      processor.o \
++      ptrace.o \
++      setup.o \
++      signal.o \
++      stacktrace.o \
++      sys_ubicom32.o \
++      syscalltable.o \
++      thread.o \
++      time.o \
++      traps.o \
++      ubicom32_context_switch.o \
++      ubicom32_ksyms.o \
++      ubicom32_syscall.o \
++      unaligned_trap.o
++
++obj-$(CONFIG_MODULES)                         += module.o
++obj-$(CONFIG_COMEMPCI)                                += comempci.o
++obj-$(CONFIG_SMP)                             += smp.o topology.o
++obj-$(CONFIG_ACCESS_OK_CHECKS_ENABLED)                += uaccess.o
++obj-$(CONFIG_GENERIC_CLOCKEVENTS)             += timer_device.o
++obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)   += timer_broadcast.o
++
++ifndef CONFIG_GENERIC_CLOCKEVENTS
++obj-y                 += timer_tick.o
++endif
+--- /dev/null
++++ b/arch/ubicom32/mach-ip5k/Kconfig
+@@ -0,0 +1,32 @@
++
++config IP5170DPF
++      bool "IP5170DPF"
++      select UBICOM32_V3
++      select I2C
++      select I2C_GPIO
++      select FB
++      select FB_UBICOM32
++      select BACKLIGHT_LCD_SUPPORT
++      select BACKLIGHT_CLASS_DEVICE
++      select UBICOM_HID
++      select NEW_LEDS
++      select LEDS_CLASS
++      select LEDS_GPIO
++      select BRD_64MB
++      help
++              IP5170 Digital Picture Frame board, 8005-1113, IP5K-BEV-0011-13 v1.3
++
++config IP5160DEV
++      bool "IP5160Dev_Ver1Dot1"
++      select UBICOM32_V3
++      select BRD_64MB
++      help
++              Ubicom StreamEngine 5000 Development Board, IP5K-BDV-0004-11 v1.1
++
++config IP5160EVAL
++      bool "IP5160RGWEval_Ver2Rev2"
++      select UBICOM32_V3
++      select BRD_32MB
++      help
++              Ubicom StreamEngine 5000 RGW Evaluation Board, IP5K-RGW-0004-11 v2.2
++
+--- /dev/null
++++ b/arch/ubicom32/mach-ip7k/Kconfig
+@@ -0,0 +1,132 @@
++config IP7145DPF
++      bool "IP7145DPF"
++      select UBICOM32_V4
++      select UBICOM_INPUT
++      select UBICOM_INPUT_I2C
++      select RTC_CLASS
++      select RTC_DRV_S35390A
++      select I2C
++      select I2C_GPIO
++      select GPIO_PCA953X
++      select FB
++      select FB_UBICOM32
++      select BACKLIGHT_LCD_SUPPORT
++      select LCD_CLASS_DEVICE
++      select LCD_UBICOM32
++      select BACKLIGHT_CLASS_DEVICE
++      select BACKLIGHT_UBICOM32
++      select SND_UBI32
++      select MMC_UBICOM32
++      select MMC
++      select MMC_BLOCK
++      select BRD_64MB
++      help
++              IP7145 Digital Picture Frame reference design, supports:
++                      8007-0410 v1.0
++
++config IP7160RGW
++      bool "IP7160RGW"
++      select UBICOM32_V4
++      select UBICOM_INPUT
++      select NEW_LEDS
++      select LEDS_CLASS
++      select LEDS_GPIO
++      select BRD_64MB
++      select SPI
++      select SPI_UBICOM32_GPIO
++      select VLAN_8021Q
++      select UBICOM_SWITCH
++      select UBICOM_SWITCH_BCM539X
++      help
++              Ubicom IP7160 RGW Eval, supports:
++                      8007-0110 v1.0
++                      8007-0111 v1.1
++                      8007-0112 v1.2
++
++config IP7160BRINGUP
++      bool "IP7160BRINGUP"
++      select UBICOM32_V4
++      select NEW_LEDS
++      select LEDS_CLASS
++      select LEDS_GPIO
++      select BRD_64MB
++      help
++              Ubicom IP7160 Bringup, supports:
++                      8007-0010 v1.0
++
++config IP7160DPF
++      bool "IP7160DPF"
++      select UBICOM32_V4
++      select I2C
++      select I2C_GPIO
++      select FB
++      select FB_UBICOM32
++      select BACKLIGHT_LCD_SUPPORT
++      select BACKLIGHT_CLASS_DEVICE
++      select SND_UBI32
++      select SND_UBI32_AUDIO_CS4350
++      select UBICOM_HID
++      select BRD_64MB
++      help
++              IP7160 Digital Picture Frame board, supports:
++                      8007-0211 Rev 1.1
++
++config IP7500MODULE
++      bool "IP7500MODULE"
++      select UBICOM32_V4
++      select BRD_128MB
++      help
++              Ubicom IP7500 CPU Module board, supports:
++                      8007-0510  v1.0
++                      8007-0510A v1.0
++
++              Please see ip7500module.c for more details.
++
++config IP7500AV
++      bool "IP7500AV"
++      select UBICOM32_V4
++      select BRD_128MB
++      select I2C
++      select I2C_GPIO
++      select SND_UBI32
++      select SND_UBI32_AUDIO_CS4384
++      select FB
++      select FB_UBICOM32
++      help
++              Ubicom IP7500 Audio Video board, supports:
++                      8007-0810  v1.0
++
++              With Ubicom IP7500 CPU Module board:
++                      8007-0510  v1.0 -or-
++                      8007-0510A v1.0
++
++              Please see ip7500av.c for more details.
++
++config IP7500MEDIA
++      bool "IP7500MEDIA"
++      select UBICOM32_V4
++      select UBICOM_INPUT_I2C
++      select RTC_CLASS
++      select RTC_DRV_S35390A
++      select I2C
++      select I2C_GPIO
++      select GPIO_PCA953X
++      select FB
++      select FB_UBICOM32
++      select BACKLIGHT_LCD_SUPPORT
++      select LCD_CLASS_DEVICE
++      select LCD_UBICOM32
++      select BACKLIGHT_CLASS_DEVICE
++      select BACKLIGHT_UBICOM32
++      select SND_UBI32
++      select SND_UBI32_AUDIO_CS4350
++      select MMC_UBICOM32
++      select MMC
++      select MMC_BLOCK
++      select BRD_128MB
++      help
++              IP7500 Media Board w/ IP7500 CPU Module board, supports:
++                      8007-0610 v1.0 w/ 8007-0510 v1.0
++
++              Please see ip7500media.c for more details.
++
+--- a/fs/Kconfig.binfmt
++++ b/fs/Kconfig.binfmt
+@@ -30,7 +30,7 @@ config COMPAT_BINFMT_ELF
+ config BINFMT_ELF_FDPIC
+       bool "Kernel support for FDPIC ELF binaries"
+       default y
+-      depends on (FRV || BLACKFIN || (SUPERH32 && !MMU))
++      depends on (FRV || BLACKFIN || (SUPERH32 && !MMU) || UBICOM32)
+       help
+         ELF FDPIC binaries are based on ELF, but allow the individual load
+         segments of a binary to be located in memory independently of each
+