]> Zhao Yanbai Git Server - minix.git/commitdiff
ARM headers
authorArun Thomas <arun@minix3.org>
Fri, 10 Aug 2012 16:05:05 +0000 (18:05 +0200)
committerArun Thomas <arun@minix3.org>
Fri, 10 Aug 2012 17:02:19 +0000 (19:02 +0200)
include/arch/arm/Makefile [new file with mode: 0644]
include/arch/arm/include/lock.h [new file with mode: 0644]
include/arch/arm/include/partition.h [new file with mode: 0644]
include/arch/arm/include/vmparam.h [new file with mode: 0644]
include/sys/Makefile
include/sys/lock.h [new file with mode: 0644]
include/sys/ras.h [new file with mode: 0644]

diff --git a/include/arch/arm/Makefile b/include/arch/arm/Makefile
new file mode 100644 (file)
index 0000000..d0c4992
--- /dev/null
@@ -0,0 +1,6 @@
+#      $NetBSD: Makefile,v 1.38 2009/08/30 02:00:56 dyoung Exp $
+
+
+SUBDIR=        include
+
+.include <bsd.subdir.mk>
diff --git a/include/arch/arm/include/lock.h b/include/arch/arm/include/lock.h
new file mode 100644 (file)
index 0000000..f95d34b
--- /dev/null
@@ -0,0 +1,125 @@
+/*     $NetBSD: lock.h,v 1.17 2008/04/28 20:23:14 martin Exp $ */
+
+/*-
+ * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Machine-dependent spin lock operations.
+ *
+ * NOTE: The SWP insn used here is available only on ARM architecture
+ * version 3 and later (as well as 2a).  What we are going to do is
+ * expect that the kernel will trap and emulate the insn.  That will
+ * be slow, but give us the atomicity that we need.
+ */
+
+#ifndef _ARM_LOCK_H_
+#define        _ARM_LOCK_H_
+
+static __inline int
+__SIMPLELOCK_LOCKED_P(__cpu_simple_lock_t *__ptr)
+{
+       return *__ptr == __SIMPLELOCK_LOCKED;
+}
+
+static __inline int
+__SIMPLELOCK_UNLOCKED_P(__cpu_simple_lock_t *__ptr)
+{
+       return *__ptr == __SIMPLELOCK_UNLOCKED;
+}
+
+static __inline void
+__cpu_simple_lock_clear(__cpu_simple_lock_t *__ptr)
+{
+       *__ptr = __SIMPLELOCK_UNLOCKED;
+}
+
+static __inline void
+__cpu_simple_lock_set(__cpu_simple_lock_t *__ptr)
+{
+       *__ptr = __SIMPLELOCK_LOCKED;
+}
+
+#ifdef _KERNEL
+#include <arm/cpufunc.h>
+
+#define        mb_read         drain_writebuf          /* in cpufunc.h */
+#define        mb_write        drain_writebuf          /* in cpufunc.h */
+#define        mb_memory       drain_writebuf          /* in cpufunc.h */
+#endif
+
+#if defined(_KERNEL)
+static __inline int
+__swp(int __val, volatile unsigned char *__ptr)
+{
+
+       __asm volatile("swpb %0, %1, [%2]"
+           : "=&r" (__val) : "r" (__val), "r" (__ptr) : "memory");
+       return __val;
+}
+#else
+static __inline int
+__swp(int __val, volatile int *__ptr)
+{
+
+       __asm volatile("swp %0, %1, [%2]"
+           : "=&r" (__val) : "r" (__val), "r" (__ptr) : "memory");
+       return __val;
+}
+#endif /* _KERNEL */
+
+static __inline void __attribute__((__unused__))
+__cpu_simple_lock_init(__cpu_simple_lock_t *alp)
+{
+
+       *alp = __SIMPLELOCK_UNLOCKED;
+}
+
+static __inline void __attribute__((__unused__))
+__cpu_simple_lock(__cpu_simple_lock_t *alp)
+{
+
+       while (__swp(__SIMPLELOCK_LOCKED, alp) != __SIMPLELOCK_UNLOCKED)
+               continue;
+}
+
+static __inline int __attribute__((__unused__))
+__cpu_simple_lock_try(__cpu_simple_lock_t *alp)
+{
+
+       return (__swp(__SIMPLELOCK_LOCKED, alp) == __SIMPLELOCK_UNLOCKED);
+}
+
+static __inline void __attribute__((__unused__))
+__cpu_simple_unlock(__cpu_simple_lock_t *alp)
+{
+
+       *alp = __SIMPLELOCK_UNLOCKED;
+}
+
+#endif /* _ARM_LOCK_H_ */
diff --git a/include/arch/arm/include/partition.h b/include/arch/arm/include/partition.h
new file mode 100644 (file)
index 0000000..2e270d0
--- /dev/null
@@ -0,0 +1,26 @@
+/* Description of entry in partition table.  */
+#ifndef _PARTITION_H
+#define _PARTITION_H
+
+struct part_entry {
+  unsigned char bootind;       /* boot indicator 0/ACTIVE_FLAG  */
+  unsigned char start_head;    /* head value for first sector   */
+  unsigned char start_sec;     /* sector value + cyl bits for first sector */
+  unsigned char start_cyl;     /* track value for first sector  */
+  unsigned char sysind;                /* system indicator              */
+  unsigned char last_head;     /* head value for last sector    */
+  unsigned char last_sec;      /* sector value + cyl bits for last sector */
+  unsigned char last_cyl;      /* track value for last sector   */
+  unsigned long lowsec;                /* logical first sector          */
+  unsigned long size;          /* size of partition in sectors  */
+};
+
+#define ACTIVE_FLAG    0x80    /* value for active in bootind field (hd0) */
+#define NR_PARTITIONS  4       /* number of entries in partition table */
+#define        PART_TABLE_OFF  0x1BE   /* offset of partition table in boot sector */
+
+/* Partition types. */
+#define NO_PART                0x00    /* unused entry */
+#define MINIX_PART     0x81    /* Minix partition type */
+
+#endif /* _PARTITION_H */
diff --git a/include/arch/arm/include/vmparam.h b/include/arch/arm/include/vmparam.h
new file mode 100644 (file)
index 0000000..859199d
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef _ARM_VMPARAM_H_
+#define _ARM_VMPARAM_H_
+
+/*
+ * Machine dependent constants for ARM.
+ */
+
+#define        PAGE_SHIFT      12
+#define        PAGE_SIZE       (1 << PAGE_SHIFT)
+#define        PAGE_MASK       (PAGE_SIZE - 1)
+
+#endif /* _ARM_VMPARAM_H_ */
index df653257cd724555b891149a7232e358c8f27627..b22197c9be41050aa2d4779302f32607ace5055a 100644 (file)
@@ -17,7 +17,7 @@ INCS+=        ansi.h atomic.h \
        fcntl.h fd_set.h featuretest.h file.h \
        float_ieee754.h gcq.h gmon.h hash.h \
        ieee754.h inttypes.h ioctl.h ipc.h \
-       localedef.h \
+       localedef.h lock.h \
        md4.h md5.h \
        mman.h mount.h \
        null.h \
@@ -27,7 +27,7 @@ INCS+=        ansi.h atomic.h \
        rbtree.h resource.h rmd160.h \
        select.h sha1.h \
        sha2.h siginfo.h signal.h sigtypes.h \
-       reboot.h sem.h shm.h socket.h \
+       ras.h reboot.h sem.h shm.h socket.h \
        stat.h statvfs.h \
        sysctl.h stdint.h \
        syslimits.h syslog.h \
diff --git a/include/sys/lock.h b/include/sys/lock.h
new file mode 100644 (file)
index 0000000..42c772f
--- /dev/null
@@ -0,0 +1,116 @@
+/*     $NetBSD: lock.h,v 1.86 2010/07/01 13:00:57 hannken Exp $        */
+
+/*-
+ * Copyright (c) 1999, 2000, 2006, 2007 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+ * NASA Ames Research Center, by Ross Harvey, and by Andrew Doran.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 1995
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code contains ideas from software contributed to Berkeley by
+ * Avadis Tevanian, Jr., Michael Wayne Young, and the Mach Operating
+ * System project at Carnegie-Mellon University.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)lock.h      8.12 (Berkeley) 5/19/95
+ */
+
+#ifndef        _SYS_LOCK_H_
+#define        _SYS_LOCK_H_
+
+#include <sys/stdint.h>
+#include <sys/mutex.h>
+
+#include <machine/lock.h>
+
+#ifdef _KERNEL
+
+/*
+ * From <machine/lock.h>.
+ */
+#ifndef SPINLOCK_SPIN_HOOK
+#define        SPINLOCK_SPIN_HOOK
+#endif
+#ifndef SPINLOCK_BACKOFF_HOOK
+#define        SPINLOCK_BACKOFF_HOOK           nullop(NULL)
+#endif
+#ifndef        SPINLOCK_BACKOFF_MIN
+#define        SPINLOCK_BACKOFF_MIN    4
+#endif
+#ifndef        SPINLOCK_BACKOFF_MAX
+#define        SPINLOCK_BACKOFF_MAX    128
+#endif
+
+#define        SPINLOCK_BACKOFF(count)                                 \
+do {                                                           \
+       int __i;                                                \
+       for (__i = (count); __i != 0; __i--) {                  \
+               SPINLOCK_BACKOFF_HOOK;                          \
+       }                                                       \
+       if ((count) < SPINLOCK_BACKOFF_MAX)                     \
+               (count) += (count);                             \
+} while (/* CONSTCOND */ 0);
+
+#define        SPINLOCK_RUN_HOOK(count)        ((count) >= SPINLOCK_BACKOFF_MAX)
+
+#ifdef LOCKDEBUG
+#define        SPINLOCK_SPINOUT(spins)         ((spins)++ > 0x0fffffff)
+#else
+#define        SPINLOCK_SPINOUT(spins)         ((void)(spins), 0)
+#endif
+
+extern __cpu_simple_lock_t kernel_lock[];
+
+#endif /* _KERNEL */
+
+#endif /* _SYS_LOCK_H_ */
diff --git a/include/sys/ras.h b/include/sys/ras.h
new file mode 100644 (file)
index 0000000..dc0736f
--- /dev/null
@@ -0,0 +1,134 @@
+/*     $NetBSD: ras.h,v 1.14 2008/08/11 21:51:14 skrll Exp $   */
+
+/*-
+ * Copyright (c) 2002, 2004, 2007 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Gregory McGarry.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _SYS_RAS_H_
+#define _SYS_RAS_H_
+
+#ifndef __ASSEMBLER__
+#include <sys/types.h>
+#include <sys/queue.h>
+
+struct ras {
+       struct ras      *ras_next;
+       void            *ras_startaddr;
+       void            *ras_endaddr;
+};
+
+#define RAS_INSTALL            0
+#define RAS_PURGE              1
+#define RAS_PURGE_ALL          2
+#else
+#include <sys/cdefs.h>
+#endif /* __ASSEMBLER__ */
+
+#ifdef _KERNEL
+
+#ifndef __ASSEMBLER__
+struct proc;
+
+void   *ras_lookup(struct proc *, void *);
+int    ras_fork(struct proc *, struct proc *);
+int    ras_purgeall(void);
+#endif /* __ASSEMBLER__ */
+
+#else /* !_KERNEL */
+
+#ifndef        RAS_DECL
+
+#define        RAS_DECL(name)                                                  \
+extern void __CONCAT(name,_ras_start(void)), __CONCAT(name,_ras_end(void))
+
+#endif /* RAS_DECL */
+
+/*
+ * RAS_START and RAS_END contain implicit instruction reordering
+ * barriers.  See __insn_barrier() in <sys/cdefs.h>.
+ *
+ * Note: You are strongly advised to avoid coding RASs in C. There is a
+ * good chance the compiler will generate code which cannot be restarted.
+ */
+#define        RAS_START(name)                                                 \
+       __asm volatile(".globl " ___STRING(name) "_ras_start\n" \
+                        ___STRING(name) "_ras_start:"                  \
+           ::: "memory")
+
+#define        RAS_END(name)                                                   \
+       __asm volatile(".globl " ___STRING(name) "_ras_end\n"           \
+                        ___STRING(name) "_ras_end:"                    \
+           ::: "memory")
+
+#define        RAS_ADDR(name)  ((void *)(uintptr_t) __CONCAT(name,_ras_start))
+#define        RAS_SIZE(name)  ((size_t)((uintptr_t) __CONCAT(name,_ras_end) - \
+                                 (uintptr_t) __CONCAT(name,_ras_start)))
+
+#ifndef __ASSEMBLER__
+__BEGIN_DECLS
+int rasctl(void *, size_t, int);
+__END_DECLS
+
+#else /* __ASSEMBLER__ */
+
+#ifndef        _ASM_LS_CHAR
+#define        _ASM_LS_CHAR    ;
+#endif
+
+/*
+ * RAS_START_ASM and RAS_END_ASM are for use within assembly code.
+ * This is the prefered method of coding a RAS.
+ */
+#define        RAS_START_ASM(name)                                             \
+       .globl _C_LABEL(__CONCAT(name,_ras_start))       _ASM_LS_CHAR   \
+       _C_LABEL(__CONCAT(name,_ras_start)):
+
+#define        RAS_END_ASM(name)                                               \
+       .globl _C_LABEL(__CONCAT(name,_ras_end))        _ASM_LS_CHAR    \
+       _C_LABEL(__CONCAT(name,_ras_end)):
+
+/*
+ * RAS_START_ASM_HIDDEN and RAS_END_ASM_HIDDEN are similar to the above,
+ * except that they limit the scope of the symbol such that it will not
+ * be placed into the dynamic symbol table. Thus no other module (executable
+ * or shared library) can reference it directly.
+ */
+#define        RAS_START_ASM_HIDDEN(name)                                      \
+       .globl _C_LABEL(__CONCAT(name,_ras_start))      _ASM_LS_CHAR    \
+       .hidden _C_LABEL(__CONCAT(name,_ras_start))     _ASM_LS_CHAR    \
+       _C_LABEL(__CONCAT(name,_ras_start)):
+
+#define        RAS_END_ASM_HIDDEN(name)                                        \
+       .globl _C_LABEL(__CONCAT(name,_ras_end))        _ASM_LS_CHAR    \
+       .hidden _C_LABEL(__CONCAT(name,_ras_end))       _ASM_LS_CHAR    \
+       _C_LABEL(__CONCAT(name,_ras_end)):
+#endif /* __ASSEMBLER__ */
+
+#endif /* _KERNEL */
+
+#endif /* !_SYS_RAS_H_ */