Import RISC-V machine headers. This is a minimal set required to compile
kernel and userland. Reviewed by: andrew, imp, kib Sponsored by: DARPA, AFRL Sponsored by: HEIF5 Differential Revision: https://reviews.freebsd.org/D4554
This commit is contained in:
parent
8170d6e52b
commit
8d7e7a98db
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=292407
44
sys/riscv/include/_align.h
Normal file
44
sys/riscv/include/_align.h
Normal file
@ -0,0 +1,44 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* 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 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.
|
||||
*
|
||||
* from: @(#)param.h 5.8 (Berkeley) 6/28/91
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__ALIGN_H_
|
||||
#define _MACHINE__ALIGN_H_
|
||||
|
||||
/*
|
||||
* Round p (pointer or byte index) up to a correctly-aligned value
|
||||
* for all data types (int, long, ...). The result is unsigned int
|
||||
* and must be cast to any desired pointer type.
|
||||
*/
|
||||
#define _ALIGNBYTES (sizeof(long long) - 1)
|
||||
#define _ALIGN(p) (((u_long)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
|
||||
|
||||
#endif /* !_MACHINE__ALIGN_H_ */
|
46
sys/riscv/include/_bus.h
Normal file
46
sys/riscv/include/_bus.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright (c) 2005 M. Warner Losh.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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,
|
||||
* without modification, immediately at the beginning of the file.
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__BUS_H_
|
||||
#define _MACHINE__BUS_H_
|
||||
|
||||
/*
|
||||
* Addresses (in bus space).
|
||||
*/
|
||||
typedef u_long bus_addr_t;
|
||||
typedef u_long bus_size_t;
|
||||
|
||||
/*
|
||||
* Access methods for bus space.
|
||||
*/
|
||||
typedef u_long bus_space_handle_t;
|
||||
typedef struct bus_space *bus_space_tag_t;
|
||||
|
||||
#endif /* !_MACHINE__BUS_H_ */
|
213
sys/riscv/include/_inttypes.h
Normal file
213
sys/riscv/include/_inttypes.h
Normal file
@ -0,0 +1,213 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Klaus Klein.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* From: $NetBSD: int_fmtio.h,v 1.4 2008/04/28 20:23:36 martin Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__INTTYPES_H_
|
||||
#define _MACHINE__INTTYPES_H_
|
||||
|
||||
/*
|
||||
* Macros for format specifiers.
|
||||
*/
|
||||
|
||||
/* fprintf(3) macros for signed integers. */
|
||||
|
||||
#define PRId8 "d" /* int8_t */
|
||||
#define PRId16 "d" /* int16_t */
|
||||
#define PRId32 "d" /* int32_t */
|
||||
#define PRId64 "ld" /* int64_t */
|
||||
#define PRIdLEAST8 "d" /* int_least8_t */
|
||||
#define PRIdLEAST16 "d" /* int_least16_t */
|
||||
#define PRIdLEAST32 "d" /* int_least32_t */
|
||||
#define PRIdLEAST64 "ld" /* int_least64_t */
|
||||
#define PRIdFAST8 "d" /* int_fast8_t */
|
||||
#define PRIdFAST16 "d" /* int_fast16_t */
|
||||
#define PRIdFAST32 "d" /* int_fast32_t */
|
||||
#define PRIdFAST64 "ld" /* int_fast64_t */
|
||||
#define PRIdMAX "jd" /* intmax_t */
|
||||
#define PRIdPTR "ld" /* intptr_t */
|
||||
|
||||
#define PRIi8 "i" /* int8_t */
|
||||
#define PRIi16 "i" /* int16_t */
|
||||
#define PRIi32 "i" /* int32_t */
|
||||
#define PRIi64 "li" /* int64_t */
|
||||
#define PRIiLEAST8 "i" /* int_least8_t */
|
||||
#define PRIiLEAST16 "i" /* int_least16_t */
|
||||
#define PRIiLEAST32 "i" /* int_least32_t */
|
||||
#define PRIiLEAST64 "li" /* int_least64_t */
|
||||
#define PRIiFAST8 "i" /* int_fast8_t */
|
||||
#define PRIiFAST16 "i" /* int_fast16_t */
|
||||
#define PRIiFAST32 "i" /* int_fast32_t */
|
||||
#define PRIiFAST64 "li" /* int_fast64_t */
|
||||
#define PRIiMAX "ji" /* intmax_t */
|
||||
#define PRIiPTR "li" /* intptr_t */
|
||||
|
||||
/* fprintf(3) macros for unsigned integers. */
|
||||
|
||||
#define PRIo8 "o" /* uint8_t */
|
||||
#define PRIo16 "o" /* uint16_t */
|
||||
#define PRIo32 "o" /* uint32_t */
|
||||
#define PRIo64 "lo" /* uint64_t */
|
||||
#define PRIoLEAST8 "o" /* uint_least8_t */
|
||||
#define PRIoLEAST16 "o" /* uint_least16_t */
|
||||
#define PRIoLEAST32 "o" /* uint_least32_t */
|
||||
#define PRIoLEAST64 "lo" /* uint_least64_t */
|
||||
#define PRIoFAST8 "o" /* uint_fast8_t */
|
||||
#define PRIoFAST16 "o" /* uint_fast16_t */
|
||||
#define PRIoFAST32 "o" /* uint_fast32_t */
|
||||
#define PRIoFAST64 "lo" /* uint_fast64_t */
|
||||
#define PRIoMAX "jo" /* uintmax_t */
|
||||
#define PRIoPTR "lo" /* uintptr_t */
|
||||
|
||||
#define PRIu8 "u" /* uint8_t */
|
||||
#define PRIu16 "u" /* uint16_t */
|
||||
#define PRIu32 "u" /* uint32_t */
|
||||
#define PRIu64 "lu" /* uint64_t */
|
||||
#define PRIuLEAST8 "u" /* uint_least8_t */
|
||||
#define PRIuLEAST16 "u" /* uint_least16_t */
|
||||
#define PRIuLEAST32 "u" /* uint_least32_t */
|
||||
#define PRIuLEAST64 "lu" /* uint_least64_t */
|
||||
#define PRIuFAST8 "u" /* uint_fast8_t */
|
||||
#define PRIuFAST16 "u" /* uint_fast16_t */
|
||||
#define PRIuFAST32 "u" /* uint_fast32_t */
|
||||
#define PRIuFAST64 "lu" /* uint_fast64_t */
|
||||
#define PRIuMAX "ju" /* uintmax_t */
|
||||
#define PRIuPTR "lu" /* uintptr_t */
|
||||
|
||||
#define PRIx8 "x" /* uint8_t */
|
||||
#define PRIx16 "x" /* uint16_t */
|
||||
#define PRIx32 "x" /* uint32_t */
|
||||
#define PRIx64 "lx" /* uint64_t */
|
||||
#define PRIxLEAST8 "x" /* uint_least8_t */
|
||||
#define PRIxLEAST16 "x" /* uint_least16_t */
|
||||
#define PRIxLEAST32 "x" /* uint_least32_t */
|
||||
#define PRIxLEAST64 "lx" /* uint_least64_t */
|
||||
#define PRIxFAST8 "x" /* uint_fast8_t */
|
||||
#define PRIxFAST16 "x" /* uint_fast16_t */
|
||||
#define PRIxFAST32 "x" /* uint_fast32_t */
|
||||
#define PRIxFAST64 "lx" /* uint_fast64_t */
|
||||
#define PRIxMAX "jx" /* uintmax_t */
|
||||
#define PRIxPTR "lx" /* uintptr_t */
|
||||
|
||||
#define PRIX8 "X" /* uint8_t */
|
||||
#define PRIX16 "X" /* uint16_t */
|
||||
#define PRIX32 "X" /* uint32_t */
|
||||
#define PRIX64 "lX" /* uint64_t */
|
||||
#define PRIXLEAST8 "X" /* uint_least8_t */
|
||||
#define PRIXLEAST16 "X" /* uint_least16_t */
|
||||
#define PRIXLEAST32 "X" /* uint_least32_t */
|
||||
#define PRIXLEAST64 "lX" /* uint_least64_t */
|
||||
#define PRIXFAST8 "X" /* uint_fast8_t */
|
||||
#define PRIXFAST16 "X" /* uint_fast16_t */
|
||||
#define PRIXFAST32 "X" /* uint_fast32_t */
|
||||
#define PRIXFAST64 "lX" /* uint_fast64_t */
|
||||
#define PRIXMAX "jX" /* uintmax_t */
|
||||
#define PRIXPTR "lX" /* uintptr_t */
|
||||
|
||||
/* fscanf(3) macros for signed integers. */
|
||||
|
||||
#define SCNd8 "hhd" /* int8_t */
|
||||
#define SCNd16 "hd" /* int16_t */
|
||||
#define SCNd32 "d" /* int32_t */
|
||||
#define SCNd64 "ld" /* int64_t */
|
||||
#define SCNdLEAST8 "hhd" /* int_least8_t */
|
||||
#define SCNdLEAST16 "hd" /* int_least16_t */
|
||||
#define SCNdLEAST32 "d" /* int_least32_t */
|
||||
#define SCNdLEAST64 "ld" /* int_least64_t */
|
||||
#define SCNdFAST8 "d" /* int_fast8_t */
|
||||
#define SCNdFAST16 "d" /* int_fast16_t */
|
||||
#define SCNdFAST32 "d" /* int_fast32_t */
|
||||
#define SCNdFAST64 "ld" /* int_fast64_t */
|
||||
#define SCNdMAX "jd" /* intmax_t */
|
||||
#define SCNdPTR "ld" /* intptr_t */
|
||||
|
||||
#define SCNi8 "hhi" /* int8_t */
|
||||
#define SCNi16 "hi" /* int16_t */
|
||||
#define SCNi32 "i" /* int32_t */
|
||||
#define SCNi64 "li" /* int64_t */
|
||||
#define SCNiLEAST8 "hhi" /* int_least8_t */
|
||||
#define SCNiLEAST16 "hi" /* int_least16_t */
|
||||
#define SCNiLEAST32 "i" /* int_least32_t */
|
||||
#define SCNiLEAST64 "li" /* int_least64_t */
|
||||
#define SCNiFAST8 "i" /* int_fast8_t */
|
||||
#define SCNiFAST16 "i" /* int_fast16_t */
|
||||
#define SCNiFAST32 "i" /* int_fast32_t */
|
||||
#define SCNiFAST64 "li" /* int_fast64_t */
|
||||
#define SCNiMAX "ji" /* intmax_t */
|
||||
#define SCNiPTR "li" /* intptr_t */
|
||||
|
||||
/* fscanf(3) macros for unsigned integers. */
|
||||
|
||||
#define SCNo8 "hho" /* uint8_t */
|
||||
#define SCNo16 "ho" /* uint16_t */
|
||||
#define SCNo32 "o" /* uint32_t */
|
||||
#define SCNo64 "lo" /* uint64_t */
|
||||
#define SCNoLEAST8 "hho" /* uint_least8_t */
|
||||
#define SCNoLEAST16 "ho" /* uint_least16_t */
|
||||
#define SCNoLEAST32 "o" /* uint_least32_t */
|
||||
#define SCNoLEAST64 "lo" /* uint_least64_t */
|
||||
#define SCNoFAST8 "o" /* uint_fast8_t */
|
||||
#define SCNoFAST16 "o" /* uint_fast16_t */
|
||||
#define SCNoFAST32 "o" /* uint_fast32_t */
|
||||
#define SCNoFAST64 "lo" /* uint_fast64_t */
|
||||
#define SCNoMAX "jo" /* uintmax_t */
|
||||
#define SCNoPTR "lo" /* uintptr_t */
|
||||
|
||||
#define SCNu8 "hhu" /* uint8_t */
|
||||
#define SCNu16 "hu" /* uint16_t */
|
||||
#define SCNu32 "u" /* uint32_t */
|
||||
#define SCNu64 "lu" /* uint64_t */
|
||||
#define SCNuLEAST8 "hhu" /* uint_least8_t */
|
||||
#define SCNuLEAST16 "hu" /* uint_least16_t */
|
||||
#define SCNuLEAST32 "u" /* uint_least32_t */
|
||||
#define SCNuLEAST64 "lu" /* uint_least64_t */
|
||||
#define SCNuFAST8 "u" /* uint_fast8_t */
|
||||
#define SCNuFAST16 "u" /* uint_fast16_t */
|
||||
#define SCNuFAST32 "u" /* uint_fast32_t */
|
||||
#define SCNuFAST64 "lu" /* uint_fast64_t */
|
||||
#define SCNuMAX "ju" /* uintmax_t */
|
||||
#define SCNuPTR "lu" /* uintptr_t */
|
||||
|
||||
#define SCNx8 "hhx" /* uint8_t */
|
||||
#define SCNx16 "hx" /* uint16_t */
|
||||
#define SCNx32 "x" /* uint32_t */
|
||||
#define SCNx64 "lx" /* uint64_t */
|
||||
#define SCNxLEAST8 "hhx" /* uint_least8_t */
|
||||
#define SCNxLEAST16 "hx" /* uint_least16_t */
|
||||
#define SCNxLEAST32 "x" /* uint_least32_t */
|
||||
#define SCNxLEAST64 "lx" /* uint_least64_t */
|
||||
#define SCNxFAST8 "x" /* uint_fast8_t */
|
||||
#define SCNxFAST16 "x" /* uint_fast16_t */
|
||||
#define SCNxFAST32 "x" /* uint_fast32_t */
|
||||
#define SCNxFAST64 "lx" /* uint_fast64_t */
|
||||
#define SCNxMAX "jx" /* uintmax_t */
|
||||
#define SCNxPTR "lx" /* uintptr_t */
|
||||
|
||||
#endif /* !_MACHINE__INTTYPES_H_ */
|
85
sys/riscv/include/_limits.h
Normal file
85
sys/riscv/include/_limits.h
Normal file
@ -0,0 +1,85 @@
|
||||
/*-
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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 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.
|
||||
*
|
||||
* @(#)limits.h 8.3 (Berkeley) 1/4/94
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__LIMITS_H_
|
||||
#define _MACHINE__LIMITS_H_
|
||||
|
||||
/*
|
||||
* According to ANSI (section 2.2.4.2), the values below must be usable by
|
||||
* #if preprocessing directives. Additionally, the expression must have the
|
||||
* same type as would an expression that is an object of the corresponding
|
||||
* type converted according to the integral promotions. The subtraction for
|
||||
* INT_MIN, etc., is so the value is not unsigned; e.g., 0x80000000 is an
|
||||
* unsigned int for 32-bit two's complement ANSI compilers (section 3.1.3.2).
|
||||
*/
|
||||
|
||||
#define __CHAR_BIT 8 /* number of bits in a char */
|
||||
|
||||
#define __SCHAR_MAX 0x7f /* max value for a signed char */
|
||||
#define __SCHAR_MIN (-0x7f - 1) /* min value for a signed char */
|
||||
|
||||
#define __UCHAR_MAX 0xff /* max value for an unsigned char */
|
||||
|
||||
#define __USHRT_MAX 0xffff /* max value for an unsigned short */
|
||||
#define __SHRT_MAX 0x7fff /* max value for a short */
|
||||
#define __SHRT_MIN (-0x7fff - 1) /* min value for a short */
|
||||
|
||||
#define __UINT_MAX 0xffffffff /* max value for an unsigned int */
|
||||
#define __INT_MAX 0x7fffffff /* max value for an int */
|
||||
#define __INT_MIN (-0x7fffffff - 1) /* min value for an int */
|
||||
|
||||
#define __ULONG_MAX 0xffffffffffffffffUL /* max for an unsigned long */
|
||||
#define __LONG_MAX 0x7fffffffffffffffL /* max for a long */
|
||||
#define __LONG_MIN (-0x7fffffffffffffffL - 1) /* min for a long */
|
||||
|
||||
/* Long longs have the same size but not the same type as longs. */
|
||||
/* max for an unsigned long long */
|
||||
#define __ULLONG_MAX 0xffffffffffffffffULL
|
||||
#define __LLONG_MAX 0x7fffffffffffffffLL /* max for a long long */
|
||||
#define __LLONG_MIN (-0x7fffffffffffffffLL - 1) /* min for a long long */
|
||||
|
||||
#define __SSIZE_MAX __LONG_MAX /* max value for a ssize_t */
|
||||
|
||||
#define __SIZE_T_MAX __ULONG_MAX /* max value for a size_t */
|
||||
|
||||
#define __OFF_MAX __LONG_MAX /* max value for an off_t */
|
||||
#define __OFF_MIN __LONG_MIN /* min value for an off_t */
|
||||
|
||||
/* Quads and longs are the same size. Ensure they stay in sync. */
|
||||
#define __UQUAD_MAX (__ULONG_MAX) /* max value for a uquad_t */
|
||||
#define __QUAD_MAX (__LONG_MAX) /* max value for a quad_t */
|
||||
#define __QUAD_MIN (__LONG_MIN) /* min value for a quad_t */
|
||||
|
||||
#define __LONG_BIT 64
|
||||
#define __WORD_BIT 32
|
||||
|
||||
/* Minimum signal stack size. */
|
||||
#define __MINSIGSTKSZ (1024 * 4)
|
||||
|
||||
#endif /* !_MACHINE__LIMITS_H_ */
|
158
sys/riscv/include/_stdint.h
Normal file
158
sys/riscv/include/_stdint.h
Normal file
@ -0,0 +1,158 @@
|
||||
/*-
|
||||
* Copyright (c) 2001, 2002 Mike Barcroft <mike@FreeBSD.org>
|
||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Klaus Klein.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__STDINT_H_
|
||||
#define _MACHINE__STDINT_H_
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
|
||||
|
||||
#define INT8_C(c) (c)
|
||||
#define INT16_C(c) (c)
|
||||
#define INT32_C(c) (c)
|
||||
#define INT64_C(c) (c ## L)
|
||||
|
||||
#define UINT8_C(c) (c)
|
||||
#define UINT16_C(c) (c)
|
||||
#define UINT32_C(c) (c ## U)
|
||||
#define UINT64_C(c) (c ## UL)
|
||||
|
||||
#define INTMAX_C(c) INT64_C(c)
|
||||
#define UINTMAX_C(c) UINT64_C(c)
|
||||
|
||||
#endif /* !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) */
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.2.1 Limits of exact-width integer types
|
||||
*/
|
||||
/* Minimum values of exact-width signed integer types. */
|
||||
#define INT8_MIN (-0x7f-1)
|
||||
#define INT16_MIN (-0x7fff-1)
|
||||
#define INT32_MIN (-0x7fffffff-1)
|
||||
#define INT64_MIN (-0x7fffffffffffffffL-1)
|
||||
|
||||
/* Maximum values of exact-width signed integer types. */
|
||||
#define INT8_MAX 0x7f
|
||||
#define INT16_MAX 0x7fff
|
||||
#define INT32_MAX 0x7fffffff
|
||||
#define INT64_MAX 0x7fffffffffffffffL
|
||||
|
||||
/* Maximum values of exact-width unsigned integer types. */
|
||||
#define UINT8_MAX 0xff
|
||||
#define UINT16_MAX 0xffff
|
||||
#define UINT32_MAX 0xffffffffU
|
||||
#define UINT64_MAX 0xffffffffffffffffUL
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.2.2 Limits of minimum-width integer types
|
||||
*/
|
||||
/* Minimum values of minimum-width signed integer types. */
|
||||
#define INT_LEAST8_MIN INT8_MIN
|
||||
#define INT_LEAST16_MIN INT16_MIN
|
||||
#define INT_LEAST32_MIN INT32_MIN
|
||||
#define INT_LEAST64_MIN INT64_MIN
|
||||
|
||||
/* Maximum values of minimum-width signed integer types. */
|
||||
#define INT_LEAST8_MAX INT8_MAX
|
||||
#define INT_LEAST16_MAX INT16_MAX
|
||||
#define INT_LEAST32_MAX INT32_MAX
|
||||
#define INT_LEAST64_MAX INT64_MAX
|
||||
|
||||
/* Maximum values of minimum-width unsigned integer types. */
|
||||
#define UINT_LEAST8_MAX UINT8_MAX
|
||||
#define UINT_LEAST16_MAX UINT16_MAX
|
||||
#define UINT_LEAST32_MAX UINT32_MAX
|
||||
#define UINT_LEAST64_MAX UINT64_MAX
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.2.3 Limits of fastest minimum-width integer types
|
||||
*/
|
||||
/* Minimum values of fastest minimum-width signed integer types. */
|
||||
#define INT_FAST8_MIN INT32_MIN
|
||||
#define INT_FAST16_MIN INT32_MIN
|
||||
#define INT_FAST32_MIN INT32_MIN
|
||||
#define INT_FAST64_MIN INT64_MIN
|
||||
|
||||
/* Maximum values of fastest minimum-width signed integer types. */
|
||||
#define INT_FAST8_MAX INT32_MAX
|
||||
#define INT_FAST16_MAX INT32_MAX
|
||||
#define INT_FAST32_MAX INT32_MAX
|
||||
#define INT_FAST64_MAX INT64_MAX
|
||||
|
||||
/* Maximum values of fastest minimum-width unsigned integer types. */
|
||||
#define UINT_FAST8_MAX UINT32_MAX
|
||||
#define UINT_FAST16_MAX UINT32_MAX
|
||||
#define UINT_FAST32_MAX UINT32_MAX
|
||||
#define UINT_FAST64_MAX UINT64_MAX
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.2.4 Limits of integer types capable of holding object pointers
|
||||
*/
|
||||
#define INTPTR_MIN INT64_MIN
|
||||
#define INTPTR_MAX INT64_MAX
|
||||
#define UINTPTR_MAX UINT64_MAX
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.2.5 Limits of greatest-width integer types
|
||||
*/
|
||||
#define INTMAX_MIN INT64_MIN
|
||||
#define INTMAX_MAX INT64_MAX
|
||||
#define UINTMAX_MAX UINT64_MAX
|
||||
|
||||
/*
|
||||
* ISO/IEC 9899:1999
|
||||
* 7.18.3 Limits of other integer types
|
||||
*/
|
||||
/* Limits of ptrdiff_t. */
|
||||
#define PTRDIFF_MIN INT64_MIN
|
||||
#define PTRDIFF_MAX INT64_MAX
|
||||
|
||||
/* Limits of sig_atomic_t. */
|
||||
#define SIG_ATOMIC_MIN INT32_MIN
|
||||
#define SIG_ATOMIC_MAX INT32_MAX
|
||||
|
||||
/* Limit of size_t. */
|
||||
#define SIZE_MAX UINT64_MAX
|
||||
|
||||
/* Limits of wint_t. */
|
||||
#define WINT_MIN INT32_MIN
|
||||
#define WINT_MAX INT32_MAX
|
||||
|
||||
#endif /* !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) */
|
||||
|
||||
#endif /* !_MACHINE__STDINT_H_ */
|
114
sys/riscv/include/_types.h
Normal file
114
sys/riscv/include/_types.h
Normal file
@ -0,0 +1,114 @@
|
||||
/*-
|
||||
* Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* From: @(#)ansi.h 8.2 (Berkeley) 1/4/94
|
||||
* From: @(#)types.h 8.3 (Berkeley) 1/5/94
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE__TYPES_H_
|
||||
#define _MACHINE__TYPES_H_
|
||||
|
||||
#ifndef _SYS_CDEFS_H_
|
||||
#error this file needs sys/cdefs.h as a prerequisite
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Basic types upon which most other types are built.
|
||||
*/
|
||||
typedef signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef short __int16_t;
|
||||
typedef unsigned short __uint16_t;
|
||||
typedef int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
typedef long __int64_t;
|
||||
typedef unsigned long __uint64_t;
|
||||
|
||||
/*
|
||||
* Standard type definitions.
|
||||
*/
|
||||
typedef __int32_t __clock_t; /* clock()... */
|
||||
typedef __int64_t __critical_t;
|
||||
typedef double __double_t;
|
||||
typedef float __float_t;
|
||||
typedef __int64_t __intfptr_t;
|
||||
typedef __int64_t __intmax_t;
|
||||
typedef __int64_t __intptr_t;
|
||||
typedef __int32_t __int_fast8_t;
|
||||
typedef __int32_t __int_fast16_t;
|
||||
typedef __int32_t __int_fast32_t;
|
||||
typedef __int64_t __int_fast64_t;
|
||||
typedef __int8_t __int_least8_t;
|
||||
typedef __int16_t __int_least16_t;
|
||||
typedef __int32_t __int_least32_t;
|
||||
typedef __int64_t __int_least64_t;
|
||||
typedef __int64_t __ptrdiff_t; /* ptr1 - ptr2 */
|
||||
typedef __int64_t __register_t;
|
||||
typedef __int64_t __segsz_t; /* segment size (in pages) */
|
||||
typedef __uint64_t __size_t; /* sizeof() */
|
||||
typedef __int64_t __ssize_t; /* byte count or error */
|
||||
typedef __int64_t __time_t; /* time()... */
|
||||
typedef __uint64_t __uintfptr_t;
|
||||
typedef __uint64_t __uintmax_t;
|
||||
typedef __uint64_t __uintptr_t;
|
||||
typedef __uint32_t __uint_fast8_t;
|
||||
typedef __uint32_t __uint_fast16_t;
|
||||
typedef __uint32_t __uint_fast32_t;
|
||||
typedef __uint64_t __uint_fast64_t;
|
||||
typedef __uint8_t __uint_least8_t;
|
||||
typedef __uint16_t __uint_least16_t;
|
||||
typedef __uint32_t __uint_least32_t;
|
||||
typedef __uint64_t __uint_least64_t;
|
||||
typedef __uint64_t __u_register_t;
|
||||
typedef __uint64_t __vm_offset_t;
|
||||
typedef __int64_t __vm_ooffset_t;
|
||||
typedef __uint64_t __vm_paddr_t;
|
||||
typedef __uint64_t __vm_pindex_t;
|
||||
typedef __uint64_t __vm_size_t;
|
||||
typedef int ___wchar_t;
|
||||
|
||||
#define __WCHAR_MIN __INT_MIN /* min value for a wchar_t */
|
||||
#define __WCHAR_MAX __INT_MAX /* max value for a wchar_t */
|
||||
|
||||
/*
|
||||
* Unusual type definitions.
|
||||
*/
|
||||
#ifdef __GNUCLIKE_BUILTIN_VARARGS
|
||||
typedef __builtin_va_list __va_list; /* internally known to gcc */
|
||||
#else
|
||||
typedef char * __va_list;
|
||||
#endif /* __GNUCLIKE_BUILTIN_VARARGS */
|
||||
#if defined(__GNUCLIKE_BUILTIN_VAALIST) && !defined(__GNUC_VA_LIST) \
|
||||
&& !defined(__NO_GNUC_VA_LIST)
|
||||
#define __GNUC_VA_LIST
|
||||
typedef __va_list __gnuc_va_list; /* compatibility w/GNU headers*/
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE__TYPES_H_ */
|
68
sys/riscv/include/asm.h
Normal file
68
sys/riscv/include/asm.h
Normal file
@ -0,0 +1,68 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ASM_H_
|
||||
#define _MACHINE_ASM_H_
|
||||
|
||||
#undef __FBSDID
|
||||
#if !defined(lint) && !defined(STRIP_FBSDID)
|
||||
#define __FBSDID(s) .ident s
|
||||
#else
|
||||
#define __FBSDID(s) /* nothing */
|
||||
#endif /* not lint and not STRIP_FBSDID */
|
||||
|
||||
#define _C_LABEL(x) x
|
||||
|
||||
#define ENTRY(sym) \
|
||||
.text; .globl sym; .type sym,@function; .align 2; sym:
|
||||
#define END(sym) .size sym, . - sym
|
||||
|
||||
#define EENTRY(sym) \
|
||||
.globl sym; sym:
|
||||
#define EEND(sym)
|
||||
|
||||
#define WEAK_REFERENCE(sym, alias) \
|
||||
.weak alias; \
|
||||
.set alias,sym
|
||||
|
||||
#define SET_FAULT_HANDLER(handler, tmp) \
|
||||
la tmp, pcpup; \
|
||||
ld tmp, 0(tmp); \
|
||||
ld tmp, PC_CURTHREAD(tmp); \
|
||||
ld tmp, TD_PCB(tmp); /* Load the pcb */ \
|
||||
sd handler, PCB_ONFAULT(tmp) /* Set the handler */
|
||||
|
||||
#endif /* _MACHINE_ASM_H_ */
|
452
sys/riscv/include/atomic.h
Normal file
452
sys/riscv/include/atomic.h
Normal file
@ -0,0 +1,452 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ATOMIC_H_
|
||||
#define _MACHINE_ATOMIC_H_
|
||||
|
||||
#define fence() __asm __volatile("fence" ::: "memory");
|
||||
#define mb() fence()
|
||||
#define rmb() fence()
|
||||
#define wmb() fence()
|
||||
|
||||
#define ATOMIC_ACQ_REL(NAME, WIDTH) \
|
||||
static __inline void \
|
||||
atomic_##NAME##_acq_##WIDTH(__volatile uint##WIDTH##_t *p, uint##WIDTH##_t v)\
|
||||
{ \
|
||||
atomic_##NAME##_##WIDTH(p, v); \
|
||||
fence(); \
|
||||
} \
|
||||
\
|
||||
static __inline void \
|
||||
atomic_##NAME##_rel_##WIDTH(__volatile uint##WIDTH##_t *p, uint##WIDTH##_t v)\
|
||||
{ \
|
||||
fence(); \
|
||||
atomic_##NAME##_##WIDTH(p, v); \
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_add_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoadd.w zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_subtract_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoadd.w zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (-val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_set_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoor.w zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_clear_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoand.w zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (~val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval)
|
||||
{
|
||||
uint32_t tmp;
|
||||
int res;
|
||||
|
||||
res = 0;
|
||||
|
||||
__asm __volatile(
|
||||
"0:"
|
||||
"li %1, 1\n" /* Preset to fail */
|
||||
"lr.w %0, %2\n"
|
||||
"bne %0, %z3, 1f\n"
|
||||
"sc.w %1, %z4, %2\n"
|
||||
"bnez %1, 0b\n"
|
||||
"1:"
|
||||
: "=&r" (tmp), "=&r" (res), "+A" (*p)
|
||||
: "rJ" (cmpval), "rJ" (newval)
|
||||
: "memory");
|
||||
|
||||
return (!res);
|
||||
}
|
||||
|
||||
static __inline uint32_t
|
||||
atomic_fetchadd_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
__asm __volatile("amoadd.w %0, %2, %1"
|
||||
: "=&r" (ret), "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline uint32_t
|
||||
atomic_readandclear_32(volatile uint32_t *p)
|
||||
{
|
||||
uint32_t ret;
|
||||
uint32_t val;
|
||||
|
||||
val = 0;
|
||||
|
||||
__asm __volatile("amoswap.w %0, %2, %1"
|
||||
: "=&r"(ret), "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
#define atomic_add_int atomic_add_32
|
||||
#define atomic_clear_int atomic_clear_32
|
||||
#define atomic_cmpset_int atomic_cmpset_32
|
||||
#define atomic_fetchadd_int atomic_fetchadd_32
|
||||
#define atomic_readandclear_int atomic_readandclear_32
|
||||
#define atomic_set_int atomic_set_32
|
||||
#define atomic_subtract_int atomic_subtract_32
|
||||
|
||||
ATOMIC_ACQ_REL(set, 32)
|
||||
ATOMIC_ACQ_REL(clear, 32)
|
||||
ATOMIC_ACQ_REL(add, 32)
|
||||
ATOMIC_ACQ_REL(subtract, 32)
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_acq_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval)
|
||||
{
|
||||
int res;
|
||||
|
||||
res = atomic_cmpset_32(p, cmpval, newval);
|
||||
|
||||
fence();
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_rel_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval)
|
||||
{
|
||||
|
||||
fence();
|
||||
|
||||
return (atomic_cmpset_32(p, cmpval, newval));
|
||||
}
|
||||
|
||||
static __inline uint32_t
|
||||
atomic_load_acq_32(volatile uint32_t *p)
|
||||
{
|
||||
uint32_t ret;
|
||||
|
||||
ret = *p;
|
||||
|
||||
fence();
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_store_rel_32(volatile uint32_t *p, uint32_t val)
|
||||
{
|
||||
|
||||
fence();
|
||||
|
||||
*p = val;
|
||||
}
|
||||
|
||||
#define atomic_add_acq_int atomic_add_acq_32
|
||||
#define atomic_clear_acq_int atomic_clear_acq_32
|
||||
#define atomic_cmpset_acq_int atomic_cmpset_acq_32
|
||||
#define atomic_load_acq_int atomic_load_acq_32
|
||||
#define atomic_set_acq_int atomic_set_acq_32
|
||||
#define atomic_subtract_acq_int atomic_subtract_acq_32
|
||||
|
||||
#define atomic_add_rel_int atomic_add_rel_32
|
||||
#define atomic_clear_rel_int atomic_add_rel_32
|
||||
#define atomic_cmpset_rel_int atomic_cmpset_rel_32
|
||||
#define atomic_set_rel_int atomic_set_rel_32
|
||||
#define atomic_subtract_rel_int atomic_subtract_rel_32
|
||||
#define atomic_store_rel_int atomic_store_rel_32
|
||||
|
||||
static __inline void
|
||||
atomic_add_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoadd.d zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_subtract_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoadd.d zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (-val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_set_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoor.d zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_clear_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
|
||||
__asm __volatile("amoand.d zero, %1, %0"
|
||||
: "+A" (*p)
|
||||
: "r" (~val)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_64(volatile uint64_t *p, uint64_t cmpval, uint64_t newval)
|
||||
{
|
||||
uint64_t tmp;
|
||||
int res;
|
||||
|
||||
res = 0;
|
||||
|
||||
__asm __volatile(
|
||||
"0:"
|
||||
"li %1, 1\n" /* Preset to fail */
|
||||
"lr.d %0, %2\n"
|
||||
"bne %0, %z3, 1f\n"
|
||||
"sc.d %1, %z4, %2\n"
|
||||
"bnez %1, 0b\n"
|
||||
"1:"
|
||||
: "=&r" (tmp), "=&r" (res), "+A" (*p)
|
||||
: "rJ" (cmpval), "rJ" (newval)
|
||||
: "memory");
|
||||
|
||||
return (!res);
|
||||
}
|
||||
|
||||
static __inline uint64_t
|
||||
atomic_fetchadd_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
uint64_t ret;
|
||||
|
||||
__asm __volatile("amoadd.d %0, %2, %1"
|
||||
: "=&r" (ret), "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline uint64_t
|
||||
atomic_readandclear_64(volatile uint64_t *p)
|
||||
{
|
||||
uint64_t ret;
|
||||
uint64_t val;
|
||||
|
||||
val = 0;
|
||||
|
||||
__asm __volatile("amoswap.d %0, %2, %1"
|
||||
: "=&r"(ret), "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline uint64_t
|
||||
atomic_swap_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
uint64_t old;
|
||||
|
||||
__asm __volatile("amoswap.d %0, %2, %1"
|
||||
: "=&r"(old), "+A" (*p)
|
||||
: "r" (val)
|
||||
: "memory");
|
||||
|
||||
return (old);
|
||||
}
|
||||
|
||||
#define atomic_add_long atomic_add_64
|
||||
#define atomic_clear_long atomic_clear_64
|
||||
#define atomic_cmpset_long atomic_cmpset_64
|
||||
#define atomic_fetchadd_long atomic_fetchadd_64
|
||||
#define atomic_readandclear_long atomic_readandclear_64
|
||||
#define atomic_set_long atomic_set_64
|
||||
#define atomic_subtract_long atomic_subtract_64
|
||||
|
||||
#define atomic_add_ptr atomic_add_64
|
||||
#define atomic_clear_ptr atomic_clear_64
|
||||
#define atomic_cmpset_ptr atomic_cmpset_64
|
||||
#define atomic_fetchadd_ptr atomic_fetchadd_64
|
||||
#define atomic_readandclear_ptr atomic_readandclear_64
|
||||
#define atomic_set_ptr atomic_set_64
|
||||
#define atomic_subtract_ptr atomic_subtract_64
|
||||
|
||||
ATOMIC_ACQ_REL(set, 64)
|
||||
ATOMIC_ACQ_REL(clear, 64)
|
||||
ATOMIC_ACQ_REL(add, 64)
|
||||
ATOMIC_ACQ_REL(subtract, 64)
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_acq_64(volatile uint64_t *p, uint64_t cmpval, uint64_t newval)
|
||||
{
|
||||
int res;
|
||||
|
||||
res = atomic_cmpset_64(p, cmpval, newval);
|
||||
|
||||
fence();
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
static __inline int
|
||||
atomic_cmpset_rel_64(volatile uint64_t *p, uint64_t cmpval, uint64_t newval)
|
||||
{
|
||||
|
||||
fence();
|
||||
|
||||
return (atomic_cmpset_64(p, cmpval, newval));
|
||||
}
|
||||
|
||||
static __inline uint64_t
|
||||
atomic_load_acq_64(volatile uint64_t *p)
|
||||
{
|
||||
uint64_t ret;
|
||||
|
||||
ret = *p;
|
||||
|
||||
fence();
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_store_rel_64(volatile uint64_t *p, uint64_t val)
|
||||
{
|
||||
|
||||
fence();
|
||||
|
||||
*p = val;
|
||||
}
|
||||
|
||||
#define atomic_add_acq_int atomic_add_acq_32
|
||||
#define atomic_clear_acq_int atomic_clear_acq_32
|
||||
#define atomic_cmpset_acq_int atomic_cmpset_acq_32
|
||||
|
||||
#define atomic_add_acq_long atomic_add_acq_64
|
||||
#define atomic_clear_acq_long atomic_add_acq_64
|
||||
#define atomic_cmpset_acq_long atomic_cmpset_acq_64
|
||||
#define atomic_load_acq_long atomic_load_acq_64
|
||||
#define atomic_set_acq_long atomic_set_acq_64
|
||||
#define atomic_subtract_acq_long atomic_subtract_acq_64
|
||||
|
||||
#define atomic_add_acq_ptr atomic_add_acq_64
|
||||
#define atomic_clear_acq_ptr atomic_add_acq_64
|
||||
#define atomic_cmpset_acq_ptr atomic_cmpset_acq_64
|
||||
#define atomic_load_acq_ptr atomic_load_acq_64
|
||||
#define atomic_set_acq_ptr atomic_set_acq_64
|
||||
#define atomic_subtract_acq_ptr atomic_subtract_acq_64
|
||||
|
||||
static __inline void
|
||||
atomic_thread_fence_acq(void)
|
||||
{
|
||||
|
||||
fence();
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_thread_fence_rel(void)
|
||||
{
|
||||
|
||||
fence();
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_thread_fence_acq_rel(void)
|
||||
{
|
||||
|
||||
fence();
|
||||
}
|
||||
|
||||
static __inline void
|
||||
atomic_thread_fence_seq_cst(void)
|
||||
{
|
||||
|
||||
fence();
|
||||
}
|
||||
|
||||
#define atomic_add_rel_long atomic_add_rel_64
|
||||
#define atomic_clear_rel_long atomic_clear_rel_64
|
||||
|
||||
#define atomic_add_rel_long atomic_add_rel_64
|
||||
#define atomic_clear_rel_long atomic_clear_rel_64
|
||||
#define atomic_cmpset_rel_long atomic_cmpset_rel_64
|
||||
#define atomic_set_rel_long atomic_set_rel_64
|
||||
#define atomic_subtract_rel_long atomic_subtract_rel_64
|
||||
#define atomic_store_rel_long atomic_store_rel_64
|
||||
|
||||
#define atomic_add_rel_ptr atomic_add_rel_64
|
||||
#define atomic_clear_rel_ptr atomic_clear_rel_64
|
||||
#define atomic_cmpset_rel_ptr atomic_cmpset_rel_64
|
||||
#define atomic_set_rel_ptr atomic_set_rel_64
|
||||
#define atomic_subtract_rel_ptr atomic_subtract_rel_64
|
||||
#define atomic_store_rel_ptr atomic_store_rel_64
|
||||
|
||||
#endif /* _MACHINE_ATOMIC_H_ */
|
469
sys/riscv/include/bus.h
Normal file
469
sys/riscv/include/bus.h
Normal file
@ -0,0 +1,469 @@
|
||||
/* $NetBSD: bus.h,v 1.11 2003/07/28 17:35:54 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1996, 1997, 1998, 2001 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.
|
||||
*
|
||||
* 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) 1996 Charles M. Hannum. All rights reserved.
|
||||
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Christopher G. Demetriou
|
||||
* for the NetBSD Project.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* From: sys/arm/include/bus.h
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_BUS_H_
|
||||
#define _MACHINE_BUS_H_
|
||||
|
||||
#include <machine/_bus.h>
|
||||
|
||||
#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t)
|
||||
|
||||
#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFFUL
|
||||
#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFFUL
|
||||
#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFFUL
|
||||
#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFFUL
|
||||
|
||||
#define BUS_SPACE_MAXADDR 0xFFFFFFFFFFFFFFFFUL
|
||||
#define BUS_SPACE_MAXSIZE 0xFFFFFFFFFFFFFFFFUL
|
||||
|
||||
#define BUS_SPACE_MAP_CACHEABLE 0x01
|
||||
#define BUS_SPACE_MAP_LINEAR 0x02
|
||||
#define BUS_SPACE_MAP_PREFETCHABLE 0x04
|
||||
|
||||
#define BUS_SPACE_UNRESTRICTED (~0)
|
||||
|
||||
#define BUS_SPACE_BARRIER_READ 0x01
|
||||
#define BUS_SPACE_BARRIER_WRITE 0x02
|
||||
|
||||
|
||||
struct bus_space {
|
||||
/* cookie */
|
||||
void *bs_cookie;
|
||||
|
||||
/* mapping/unmapping */
|
||||
int (*bs_map) (void *, bus_addr_t, bus_size_t,
|
||||
int, bus_space_handle_t *);
|
||||
void (*bs_unmap) (void *, bus_space_handle_t, bus_size_t);
|
||||
int (*bs_subregion) (void *, bus_space_handle_t,
|
||||
bus_size_t, bus_size_t, bus_space_handle_t *);
|
||||
|
||||
/* allocation/deallocation */
|
||||
int (*bs_alloc) (void *, bus_addr_t, bus_addr_t,
|
||||
bus_size_t, bus_size_t, bus_size_t, int,
|
||||
bus_addr_t *, bus_space_handle_t *);
|
||||
void (*bs_free) (void *, bus_space_handle_t,
|
||||
bus_size_t);
|
||||
|
||||
/* get kernel virtual address */
|
||||
/* barrier */
|
||||
void (*bs_barrier) (void *, bus_space_handle_t,
|
||||
bus_size_t, bus_size_t, int);
|
||||
|
||||
/* read single */
|
||||
u_int8_t (*bs_r_1) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int16_t (*bs_r_2) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int32_t (*bs_r_4) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int64_t (*bs_r_8) (void *, bus_space_handle_t, bus_size_t);
|
||||
|
||||
/* read multiple */
|
||||
void (*bs_rm_1) (void *, bus_space_handle_t, bus_size_t,
|
||||
u_int8_t *, bus_size_t);
|
||||
void (*bs_rm_2) (void *, bus_space_handle_t, bus_size_t,
|
||||
u_int16_t *, bus_size_t);
|
||||
void (*bs_rm_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t *, bus_size_t);
|
||||
void (*bs_rm_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t *, bus_size_t);
|
||||
|
||||
/* read region */
|
||||
void (*bs_rr_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t *, bus_size_t);
|
||||
void (*bs_rr_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t *, bus_size_t);
|
||||
void (*bs_rr_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t *, bus_size_t);
|
||||
void (*bs_rr_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t *, bus_size_t);
|
||||
|
||||
/* write single */
|
||||
void (*bs_w_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t);
|
||||
void (*bs_w_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t);
|
||||
void (*bs_w_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t);
|
||||
void (*bs_w_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t);
|
||||
|
||||
/* write multiple */
|
||||
void (*bs_wm_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int8_t *, bus_size_t);
|
||||
void (*bs_wm_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int16_t *, bus_size_t);
|
||||
void (*bs_wm_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int32_t *, bus_size_t);
|
||||
void (*bs_wm_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int64_t *, bus_size_t);
|
||||
|
||||
/* write region */
|
||||
void (*bs_wr_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int8_t *, bus_size_t);
|
||||
void (*bs_wr_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int16_t *, bus_size_t);
|
||||
void (*bs_wr_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int32_t *, bus_size_t);
|
||||
void (*bs_wr_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int64_t *, bus_size_t);
|
||||
|
||||
/* set multiple */
|
||||
void (*bs_sm_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t, bus_size_t);
|
||||
void (*bs_sm_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t, bus_size_t);
|
||||
void (*bs_sm_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t, bus_size_t);
|
||||
void (*bs_sm_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t, bus_size_t);
|
||||
|
||||
/* set region */
|
||||
void (*bs_sr_1) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t, bus_size_t);
|
||||
void (*bs_sr_2) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t, bus_size_t);
|
||||
void (*bs_sr_4) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t, bus_size_t);
|
||||
void (*bs_sr_8) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t, bus_size_t);
|
||||
|
||||
/* copy */
|
||||
void (*bs_c_1) (void *, bus_space_handle_t, bus_size_t,
|
||||
bus_space_handle_t, bus_size_t, bus_size_t);
|
||||
void (*bs_c_2) (void *, bus_space_handle_t, bus_size_t,
|
||||
bus_space_handle_t, bus_size_t, bus_size_t);
|
||||
void (*bs_c_4) (void *, bus_space_handle_t, bus_size_t,
|
||||
bus_space_handle_t, bus_size_t, bus_size_t);
|
||||
void (*bs_c_8) (void *, bus_space_handle_t, bus_size_t,
|
||||
bus_space_handle_t, bus_size_t, bus_size_t);
|
||||
|
||||
/* read single stream */
|
||||
u_int8_t (*bs_r_1_s) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int16_t (*bs_r_2_s) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int32_t (*bs_r_4_s) (void *, bus_space_handle_t, bus_size_t);
|
||||
u_int64_t (*bs_r_8_s) (void *, bus_space_handle_t, bus_size_t);
|
||||
|
||||
/* read multiple stream */
|
||||
void (*bs_rm_1_s) (void *, bus_space_handle_t, bus_size_t,
|
||||
u_int8_t *, bus_size_t);
|
||||
void (*bs_rm_2_s) (void *, bus_space_handle_t, bus_size_t,
|
||||
u_int16_t *, bus_size_t);
|
||||
void (*bs_rm_4_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t *, bus_size_t);
|
||||
void (*bs_rm_8_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t *, bus_size_t);
|
||||
|
||||
/* read region stream */
|
||||
void (*bs_rr_1_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t *, bus_size_t);
|
||||
void (*bs_rr_2_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t *, bus_size_t);
|
||||
void (*bs_rr_4_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t *, bus_size_t);
|
||||
void (*bs_rr_8_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t *, bus_size_t);
|
||||
|
||||
/* write single stream */
|
||||
void (*bs_w_1_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int8_t);
|
||||
void (*bs_w_2_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int16_t);
|
||||
void (*bs_w_4_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int32_t);
|
||||
void (*bs_w_8_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, u_int64_t);
|
||||
|
||||
/* write multiple stream */
|
||||
void (*bs_wm_1_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int8_t *, bus_size_t);
|
||||
void (*bs_wm_2_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int16_t *, bus_size_t);
|
||||
void (*bs_wm_4_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int32_t *, bus_size_t);
|
||||
void (*bs_wm_8_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int64_t *, bus_size_t);
|
||||
|
||||
/* write region stream */
|
||||
void (*bs_wr_1_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int8_t *, bus_size_t);
|
||||
void (*bs_wr_2_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int16_t *, bus_size_t);
|
||||
void (*bs_wr_4_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int32_t *, bus_size_t);
|
||||
void (*bs_wr_8_s) (void *, bus_space_handle_t,
|
||||
bus_size_t, const u_int64_t *, bus_size_t);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Utility macros; INTERNAL USE ONLY.
|
||||
*/
|
||||
#define __bs_c(a,b) __CONCAT(a,b)
|
||||
#define __bs_opname(op,size) __bs_c(__bs_c(__bs_c(bs_,op),_),size)
|
||||
|
||||
#define __bs_rs(sz, t, h, o) \
|
||||
(*(t)->__bs_opname(r,sz))((t)->bs_cookie, h, o)
|
||||
#define __bs_ws(sz, t, h, o, v) \
|
||||
(*(t)->__bs_opname(w,sz))((t)->bs_cookie, h, o, v)
|
||||
#define __bs_nonsingle(type, sz, t, h, o, a, c) \
|
||||
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, a, c)
|
||||
#define __bs_set(type, sz, t, h, o, v, c) \
|
||||
(*(t)->__bs_opname(type,sz))((t)->bs_cookie, h, o, v, c)
|
||||
#define __bs_copy(sz, t, h1, o1, h2, o2, cnt) \
|
||||
(*(t)->__bs_opname(c,sz))((t)->bs_cookie, h1, o1, h2, o2, cnt)
|
||||
|
||||
#define __bs_opname_s(op,size) __bs_c(__bs_c(__bs_c(__bs_c(bs_,op),_),size),_s)
|
||||
#define __bs_rs_s(sz, t, h, o) \
|
||||
(*(t)->__bs_opname_s(r,sz))((t)->bs_cookie, h, o)
|
||||
#define __bs_ws_s(sz, t, h, o, v) \
|
||||
(*(t)->__bs_opname_s(w,sz))((t)->bs_cookie, h, o, v)
|
||||
#define __bs_nonsingle_s(type, sz, t, h, o, a, c) \
|
||||
(*(t)->__bs_opname_s(type,sz))((t)->bs_cookie, h, o, a, c)
|
||||
|
||||
|
||||
/*
|
||||
* Mapping and unmapping operations.
|
||||
*/
|
||||
#define bus_space_map(t, a, s, c, hp) \
|
||||
(*(t)->bs_map)((t)->bs_cookie, (a), (s), (c), (hp))
|
||||
#define bus_space_unmap(t, h, s) \
|
||||
(*(t)->bs_unmap)((t)->bs_cookie, (h), (s))
|
||||
#define bus_space_subregion(t, h, o, s, hp) \
|
||||
(*(t)->bs_subregion)((t)->bs_cookie, (h), (o), (s), (hp))
|
||||
|
||||
|
||||
/*
|
||||
* Allocation and deallocation operations.
|
||||
*/
|
||||
#define bus_space_alloc(t, rs, re, s, a, b, c, ap, hp) \
|
||||
(*(t)->bs_alloc)((t)->bs_cookie, (rs), (re), (s), (a), (b), \
|
||||
(c), (ap), (hp))
|
||||
#define bus_space_free(t, h, s) \
|
||||
(*(t)->bs_free)((t)->bs_cookie, (h), (s))
|
||||
|
||||
/*
|
||||
* Bus barrier operations.
|
||||
*/
|
||||
#define bus_space_barrier(t, h, o, l, f) \
|
||||
(*(t)->bs_barrier)((t)->bs_cookie, (h), (o), (l), (f))
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Bus read (single) operations.
|
||||
*/
|
||||
#define bus_space_read_1(t, h, o) __bs_rs(1,(t),(h),(o))
|
||||
#define bus_space_read_2(t, h, o) __bs_rs(2,(t),(h),(o))
|
||||
#define bus_space_read_4(t, h, o) __bs_rs(4,(t),(h),(o))
|
||||
#define bus_space_read_8(t, h, o) __bs_rs(8,(t),(h),(o))
|
||||
|
||||
#define bus_space_read_stream_1(t, h, o) __bs_rs_s(1,(t), (h), (o))
|
||||
#define bus_space_read_stream_2(t, h, o) __bs_rs_s(2,(t), (h), (o))
|
||||
#define bus_space_read_stream_4(t, h, o) __bs_rs_s(4,(t), (h), (o))
|
||||
#define bus_space_read_stream_8(t, h, o) __bs_rs_s(8,8,(t),(h),(o))
|
||||
|
||||
/*
|
||||
* Bus read multiple operations.
|
||||
*/
|
||||
#define bus_space_read_multi_1(t, h, o, a, c) \
|
||||
__bs_nonsingle(rm,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_2(t, h, o, a, c) \
|
||||
__bs_nonsingle(rm,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_4(t, h, o, a, c) \
|
||||
__bs_nonsingle(rm,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_8(t, h, o, a, c) \
|
||||
__bs_nonsingle(rm,8,(t),(h),(o),(a),(c))
|
||||
|
||||
#define bus_space_read_multi_stream_1(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rm,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_stream_2(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rm,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_stream_4(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rm,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_multi_stream_8(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rm,8,(t),(h),(o),(a),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Bus read region operations.
|
||||
*/
|
||||
#define bus_space_read_region_1(t, h, o, a, c) \
|
||||
__bs_nonsingle(rr,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_2(t, h, o, a, c) \
|
||||
__bs_nonsingle(rr,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_4(t, h, o, a, c) \
|
||||
__bs_nonsingle(rr,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_8(t, h, o, a, c) \
|
||||
__bs_nonsingle(rr,8,(t),(h),(o),(a),(c))
|
||||
|
||||
#define bus_space_read_region_stream_1(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rr,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_stream_2(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rr,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_stream_4(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rr,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_read_region_stream_8(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(rr,8,(t),(h),(o),(a),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Bus write (single) operations.
|
||||
*/
|
||||
#define bus_space_write_1(t, h, o, v) __bs_ws(1,(t),(h),(o),(v))
|
||||
#define bus_space_write_2(t, h, o, v) __bs_ws(2,(t),(h),(o),(v))
|
||||
#define bus_space_write_4(t, h, o, v) __bs_ws(4,(t),(h),(o),(v))
|
||||
#define bus_space_write_8(t, h, o, v) __bs_ws(8,(t),(h),(o),(v))
|
||||
|
||||
#define bus_space_write_stream_1(t, h, o, v) __bs_ws_s(1,(t),(h),(o),(v))
|
||||
#define bus_space_write_stream_2(t, h, o, v) __bs_ws_s(2,(t),(h),(o),(v))
|
||||
#define bus_space_write_stream_4(t, h, o, v) __bs_ws_s(4,(t),(h),(o),(v))
|
||||
#define bus_space_write_stream_8(t, h, o, v) __bs_ws_s(8,(t),(h),(o),(v))
|
||||
|
||||
|
||||
/*
|
||||
* Bus write multiple operations.
|
||||
*/
|
||||
#define bus_space_write_multi_1(t, h, o, a, c) \
|
||||
__bs_nonsingle(wm,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_2(t, h, o, a, c) \
|
||||
__bs_nonsingle(wm,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_4(t, h, o, a, c) \
|
||||
__bs_nonsingle(wm,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_8(t, h, o, a, c) \
|
||||
__bs_nonsingle(wm,8,(t),(h),(o),(a),(c))
|
||||
|
||||
#define bus_space_write_multi_stream_1(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wm,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_stream_2(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wm,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_stream_4(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wm,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_multi_stream_8(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wm,8,(t),(h),(o),(a),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Bus write region operations.
|
||||
*/
|
||||
#define bus_space_write_region_1(t, h, o, a, c) \
|
||||
__bs_nonsingle(wr,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_2(t, h, o, a, c) \
|
||||
__bs_nonsingle(wr,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_4(t, h, o, a, c) \
|
||||
__bs_nonsingle(wr,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_8(t, h, o, a, c) \
|
||||
__bs_nonsingle(wr,8,(t),(h),(o),(a),(c))
|
||||
|
||||
#define bus_space_write_region_stream_1(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wr,1,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_stream_2(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wr,2,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_stream_4(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wr,4,(t),(h),(o),(a),(c))
|
||||
#define bus_space_write_region_stream_8(t, h, o, a, c) \
|
||||
__bs_nonsingle_s(wr,8,(t),(h),(o),(a),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Set multiple operations.
|
||||
*/
|
||||
#define bus_space_set_multi_1(t, h, o, v, c) \
|
||||
__bs_set(sm,1,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_multi_2(t, h, o, v, c) \
|
||||
__bs_set(sm,2,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_multi_4(t, h, o, v, c) \
|
||||
__bs_set(sm,4,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_multi_8(t, h, o, v, c) \
|
||||
__bs_set(sm,8,(t),(h),(o),(v),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Set region operations.
|
||||
*/
|
||||
#define bus_space_set_region_1(t, h, o, v, c) \
|
||||
__bs_set(sr,1,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_region_2(t, h, o, v, c) \
|
||||
__bs_set(sr,2,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_region_4(t, h, o, v, c) \
|
||||
__bs_set(sr,4,(t),(h),(o),(v),(c))
|
||||
#define bus_space_set_region_8(t, h, o, v, c) \
|
||||
__bs_set(sr,8,(t),(h),(o),(v),(c))
|
||||
|
||||
|
||||
/*
|
||||
* Copy operations.
|
||||
*/
|
||||
#define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \
|
||||
__bs_copy(1, t, h1, o1, h2, o2, c)
|
||||
#define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \
|
||||
__bs_copy(2, t, h1, o1, h2, o2, c)
|
||||
#define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \
|
||||
__bs_copy(4, t, h1, o1, h2, o2, c)
|
||||
#define bus_space_copy_region_8(t, h1, o1, h2, o2, c) \
|
||||
__bs_copy(8, t, h1, o1, h2, o2, c)
|
||||
|
||||
#include <machine/bus_dma.h>
|
||||
|
||||
#endif /* _MACHINE_BUS_H_ */
|
8
sys/riscv/include/bus_dma.h
Normal file
8
sys/riscv/include/bus_dma.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#ifndef _MACHINE_BUS_DMA_H_
|
||||
#define _MACHINE_BUS_DMA_H_
|
||||
|
||||
#include <sys/bus_dma.h>
|
||||
|
||||
#endif /* !_MACHINE_BUS_DMA_H_ */
|
1
sys/riscv/include/clock.h
Normal file
1
sys/riscv/include/clock.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
93
sys/riscv/include/counter.h
Normal file
93
sys/riscv/include/counter.h
Normal file
@ -0,0 +1,93 @@
|
||||
/*-
|
||||
* Copyright (c) 2012 Konstantin Belousov <kib@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_COUNTER_H_
|
||||
#define _MACHINE_COUNTER_H_
|
||||
|
||||
#include <sys/pcpu.h>
|
||||
#ifdef INVARIANTS
|
||||
#include <sys/proc.h>
|
||||
#endif
|
||||
|
||||
#define counter_enter() critical_enter()
|
||||
#define counter_exit() critical_exit()
|
||||
|
||||
#ifdef IN_SUBR_COUNTER_C
|
||||
static inline uint64_t
|
||||
counter_u64_read_one(uint64_t *p, int cpu)
|
||||
{
|
||||
|
||||
return (*(uint64_t *)((char *)p + sizeof(struct pcpu) * cpu));
|
||||
}
|
||||
|
||||
static inline uint64_t
|
||||
counter_u64_fetch_inline(uint64_t *p)
|
||||
{
|
||||
uint64_t r;
|
||||
int i;
|
||||
|
||||
r = 0;
|
||||
for (i = 0; i < mp_ncpus; i++)
|
||||
r += counter_u64_read_one((uint64_t *)p, i);
|
||||
|
||||
return (r);
|
||||
}
|
||||
|
||||
/* XXXKIB might interrupt increment */
|
||||
static void
|
||||
counter_u64_zero_one_cpu(void *arg)
|
||||
{
|
||||
|
||||
*((uint64_t *)((char *)arg + sizeof(struct pcpu) *
|
||||
PCPU_GET(cpuid))) = 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
counter_u64_zero_inline(counter_u64_t c)
|
||||
{
|
||||
|
||||
smp_rendezvous(smp_no_rendevous_barrier, counter_u64_zero_one_cpu,
|
||||
smp_no_rendevous_barrier, c);
|
||||
}
|
||||
#endif
|
||||
|
||||
#define counter_u64_add_protected(c, inc) do { \
|
||||
CRITICAL_ASSERT(curthread); \
|
||||
*(uint64_t *)zpcpu_get(c) += (inc); \
|
||||
} while (0)
|
||||
|
||||
static inline void
|
||||
counter_u64_add(counter_u64_t c, int64_t inc)
|
||||
{
|
||||
|
||||
counter_enter();
|
||||
counter_u64_add_protected(c, inc);
|
||||
counter_exit();
|
||||
}
|
||||
|
||||
#endif /* ! _MACHINE_COUNTER_H_ */
|
95
sys/riscv/include/cpu.h
Normal file
95
sys/riscv/include/cpu.h
Normal file
@ -0,0 +1,95 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_CPU_H_
|
||||
#define _MACHINE_CPU_H_
|
||||
|
||||
#include <machine/atomic.h>
|
||||
#include <machine/frame.h>
|
||||
|
||||
#define TRAPF_PC(tfp) ((tfp)->tf_ra)
|
||||
#define TRAPF_USERMODE(tfp) (((tfp)->tf_sepc & (1ul << 63)) == 0)
|
||||
|
||||
#define cpu_getstack(td) ((td)->td_frame->tf_sp)
|
||||
#define cpu_setstack(td, sp) ((td)->td_frame->tf_sp = (sp))
|
||||
#define cpu_spinwait() /* nothing */
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
/*
|
||||
* 0x0000 CPU ID unimplemented
|
||||
* 0x0001 UC Berkeley Rocket repo
|
||||
* 0x00020x7FFE Reserved for open-source repos
|
||||
* 0x7FFF Reserved for extension
|
||||
* 0x8000 Reserved for anonymous source
|
||||
* 0x80010xFFFE Reserved for proprietary implementations
|
||||
* 0xFFFF Reserved for extension
|
||||
*/
|
||||
|
||||
#define CPU_IMPL_SHIFT 0
|
||||
#define CPU_IMPL_MASK (0xffff << CPU_IMPL_SHIFT)
|
||||
#define CPU_IMPL(mimpid) ((mimpid & CPU_IMPL_MASK) >> CPU_IMPL_SHIFT)
|
||||
#define CPU_IMPL_UNIMPLEMEN 0x0
|
||||
#define CPU_IMPL_UCB_ROCKET 0x1
|
||||
|
||||
#define CPU_PART_SHIFT 62
|
||||
#define CPU_PART_MASK (0x3ul << CPU_PART_SHIFT)
|
||||
#define CPU_PART(mcpuid) ((mcpuid & CPU_PART_MASK) >> CPU_PART_SHIFT)
|
||||
#define CPU_PART_RV32I 0x0
|
||||
#define CPU_PART_RV32E 0x1
|
||||
#define CPU_PART_RV64I 0x2
|
||||
#define CPU_PART_RV128I 0x3
|
||||
|
||||
extern char btext[];
|
||||
extern char etext[];
|
||||
|
||||
void cpu_halt(void) __dead2;
|
||||
void cpu_reset(void) __dead2;
|
||||
void fork_trampoline(void);
|
||||
void identify_cpu(void);
|
||||
void swi_vm(void *v);
|
||||
|
||||
static __inline uint64_t
|
||||
get_cyclecount(void)
|
||||
{
|
||||
|
||||
/* TODO: This is bogus */
|
||||
return (1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_CPU_H_ */
|
123
sys/riscv/include/cpufunc.h
Normal file
123
sys/riscv/include/cpufunc.h
Normal file
@ -0,0 +1,123 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_CPUFUNC_H_
|
||||
#define _MACHINE_CPUFUNC_H_
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#include <machine/riscvreg.h>
|
||||
|
||||
static __inline void
|
||||
breakpoint(void)
|
||||
{
|
||||
|
||||
__asm("ebreak");
|
||||
}
|
||||
|
||||
static __inline register_t
|
||||
intr_disable(void)
|
||||
{
|
||||
uint64_t ret;
|
||||
|
||||
__asm __volatile(
|
||||
"csrrci %0, sstatus, 1"
|
||||
: "=&r" (ret)
|
||||
);
|
||||
|
||||
return (ret & SSTATUS_IE);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
intr_restore(register_t s)
|
||||
{
|
||||
|
||||
__asm __volatile(
|
||||
"csrs sstatus, %0"
|
||||
:: "r" (s)
|
||||
);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
intr_enable(void)
|
||||
{
|
||||
|
||||
__asm __volatile(
|
||||
"csrsi sstatus, 1"
|
||||
);
|
||||
}
|
||||
|
||||
static __inline register_t
|
||||
machine_command(uint64_t cmd, uint64_t arg)
|
||||
{
|
||||
uint64_t res;
|
||||
|
||||
__asm __volatile(
|
||||
"mv t5, %2\n"
|
||||
"mv t6, %1\n"
|
||||
"ecall\n"
|
||||
"mv %0, t6" : "=&r"(res) : "r"(arg), "r"(cmd)
|
||||
);
|
||||
|
||||
return (res);
|
||||
}
|
||||
|
||||
#define cpu_nullop() riscv_nullop()
|
||||
#define cpufunc_nullop() riscv_nullop()
|
||||
#define cpu_setttb(a) riscv_setttb(a)
|
||||
|
||||
#define cpu_tlb_flushID() riscv_tlb_flushID()
|
||||
#define cpu_tlb_flushID_SE(e) riscv_tlb_flushID_SE(e)
|
||||
|
||||
#define cpu_dcache_wbinv_range(a, s) riscv_dcache_wbinv_range((a), (s))
|
||||
#define cpu_dcache_inv_range(a, s) riscv_dcache_inv_range((a), (s))
|
||||
#define cpu_dcache_wb_range(a, s) riscv_dcache_wb_range((a), (s))
|
||||
|
||||
#define cpu_idcache_wbinv_range(a, s) riscv_idcache_wbinv_range((a), (s))
|
||||
#define cpu_icache_sync_range(a, s) riscv_icache_sync_range((a), (s))
|
||||
|
||||
void riscv_nullop(void);
|
||||
void riscv_setttb(vm_offset_t);
|
||||
void riscv_tlb_flushID(void);
|
||||
void riscv_tlb_flushID_SE(vm_offset_t);
|
||||
void riscv_icache_sync_range(vm_offset_t, vm_size_t);
|
||||
void riscv_idcache_wbinv_range(vm_offset_t, vm_size_t);
|
||||
void riscv_dcache_wbinv_range(vm_offset_t, vm_size_t);
|
||||
void riscv_dcache_inv_range(vm_offset_t, vm_size_t);
|
||||
void riscv_dcache_wb_range(vm_offset_t, vm_size_t);
|
||||
|
||||
#endif /* _KERNEL */
|
||||
#endif /* _MACHINE_CPUFUNC_H_ */
|
47
sys/riscv/include/db_machdep.h
Normal file
47
sys/riscv/include/db_machdep.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_DB_MACHDEP_H_
|
||||
#define _MACHINE_DB_MACHDEP_H_
|
||||
|
||||
#include <machine/riscvreg.h>
|
||||
#include <machine/frame.h>
|
||||
#include <machine/trap.h>
|
||||
|
||||
typedef vm_offset_t db_addr_t;
|
||||
typedef long db_expr_t;
|
||||
|
||||
#endif /* !_MACHINE_DB_MACHDEP_H_ */
|
82
sys/riscv/include/dump.h
Normal file
82
sys/riscv/include/dump.h
Normal file
@ -0,0 +1,82 @@
|
||||
/*-
|
||||
* Copyright (c) 2014 EMC Corp.
|
||||
* Author: Conrad Meyer <conrad.meyer@isilon.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_DUMP_H_
|
||||
#define _MACHINE_DUMP_H_
|
||||
|
||||
#define KERNELDUMP_ARCH_VERSION KERNELDUMP_RISCV_VERSION
|
||||
#define EM_VALUE EM_RISCV
|
||||
|
||||
/* 20 phys_avail entry pairs correspond to 10 pa's */
|
||||
#define DUMPSYS_MD_PA_NPAIRS 10
|
||||
#define DUMPSYS_NUM_AUX_HDRS 0
|
||||
|
||||
static inline void
|
||||
dumpsys_pa_init(void)
|
||||
{
|
||||
|
||||
dumpsys_gen_pa_init();
|
||||
}
|
||||
|
||||
static inline struct dump_pa *
|
||||
dumpsys_pa_next(struct dump_pa *p)
|
||||
{
|
||||
|
||||
return (dumpsys_gen_pa_next(p));
|
||||
}
|
||||
|
||||
static inline void
|
||||
dumpsys_wbinv_all(void)
|
||||
{
|
||||
|
||||
dumpsys_gen_wbinv_all();
|
||||
}
|
||||
|
||||
static inline void
|
||||
dumpsys_unmap_chunk(vm_paddr_t pa, size_t s, void *va)
|
||||
{
|
||||
|
||||
dumpsys_gen_unmap_chunk(pa, s, va);
|
||||
}
|
||||
|
||||
static inline int
|
||||
dumpsys_write_aux_headers(struct dumperinfo *di)
|
||||
{
|
||||
|
||||
return (dumpsys_gen_write_aux_headers(di));
|
||||
}
|
||||
|
||||
static inline int
|
||||
dumpsys(struct dumperinfo *di)
|
||||
{
|
||||
|
||||
return (dumpsys_generic(di));
|
||||
}
|
||||
|
||||
#endif /* !_MACHINE_DUMP_H_ */
|
105
sys/riscv/include/elf.h
Normal file
105
sys/riscv/include/elf.h
Normal file
@ -0,0 +1,105 @@
|
||||
/*-
|
||||
* Copyright (c) 1996-1997 John D. Polstra.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ELF_H_
|
||||
#define _MACHINE_ELF_H_
|
||||
|
||||
/*
|
||||
* ELF definitions for the RISC-V architecture.
|
||||
*/
|
||||
|
||||
#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
|
||||
#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
|
||||
|
||||
#define __ELF_WORD_SIZE 64 /* Used by <sys/elf_generic.h> */
|
||||
#include <sys/elf_generic.h>
|
||||
|
||||
/*
|
||||
* Auxiliary vector entries for passing information to the interpreter.
|
||||
*/
|
||||
|
||||
typedef struct { /* Auxiliary vector entry on initial stack */
|
||||
int a_type; /* Entry type. */
|
||||
union {
|
||||
int a_val; /* Integer value. */
|
||||
} a_un;
|
||||
} Elf32_Auxinfo;
|
||||
|
||||
typedef struct { /* Auxiliary vector entry on initial stack */
|
||||
long a_type; /* Entry type. */
|
||||
union {
|
||||
long a_val; /* Integer value. */
|
||||
void *a_ptr; /* Address. */
|
||||
void (*a_fcn)(void); /* Function pointer (not used). */
|
||||
} a_un;
|
||||
} Elf64_Auxinfo;
|
||||
|
||||
__ElfType(Auxinfo);
|
||||
|
||||
#define ELF_ARCH EM_RISCV
|
||||
|
||||
#define ELF_MACHINE_OK(x) ((x) == (ELF_ARCH))
|
||||
|
||||
/* Values for a_type. */
|
||||
#define AT_NULL 0 /* Terminates the vector. */
|
||||
#define AT_IGNORE 1 /* Ignored entry. */
|
||||
#define AT_EXECFD 2 /* File descriptor of program to load. */
|
||||
#define AT_PHDR 3 /* Program header of program already loaded. */
|
||||
#define AT_PHENT 4 /* Size of each program header entry. */
|
||||
#define AT_PHNUM 5 /* Number of program header entries. */
|
||||
#define AT_PAGESZ 6 /* Page size in bytes. */
|
||||
#define AT_BASE 7 /* Interpreter's base address. */
|
||||
#define AT_FLAGS 8 /* Flags (unused). */
|
||||
#define AT_ENTRY 9 /* Where interpreter should transfer control. */
|
||||
#define AT_NOTELF 10 /* Program is not ELF ?? */
|
||||
#define AT_UID 11 /* Real uid. */
|
||||
#define AT_EUID 12 /* Effective uid. */
|
||||
#define AT_GID 13 /* Real gid. */
|
||||
#define AT_EGID 14 /* Effective gid. */
|
||||
#define AT_EXECPATH 15 /* Path to the executable. */
|
||||
#define AT_CANARY 16 /* Canary for SSP */
|
||||
#define AT_CANARYLEN 17 /* Length of the canary. */
|
||||
#define AT_OSRELDATE 18 /* OSRELDATE. */
|
||||
#define AT_NCPUS 19 /* Number of CPUs. */
|
||||
#define AT_PAGESIZES 20 /* Pagesizes. */
|
||||
#define AT_PAGESIZESLEN 21 /* Number of pagesizes. */
|
||||
#define AT_TIMEKEEP 22 /* Pointer to timehands. */
|
||||
#define AT_STACKPROT 23 /* Initial stack protection. */
|
||||
|
||||
#define AT_COUNT 24 /* Count of defined aux entry types. */
|
||||
|
||||
/* Define "machine" characteristics */
|
||||
#define ELF_TARG_CLASS ELFCLASS64
|
||||
#define ELF_TARG_DATA ELFDATA2LSB
|
||||
#define ELF_TARG_MACH EM_RISCV
|
||||
#define ELF_TARG_VER 1
|
||||
|
||||
/* TODO: set correct value */
|
||||
#define ET_DYN_LOAD_ADDR 0x100000
|
||||
|
||||
#endif /* !_MACHINE_ELF_H_ */
|
124
sys/riscv/include/endian.h
Normal file
124
sys/riscv/include/endian.h
Normal file
@ -0,0 +1,124 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 David E. O'Brien
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* @(#)endian.h 8.1 (Berkeley) 6/10/93
|
||||
* $NetBSD: endian.h,v 1.7 1999/08/21 05:53:51 simonb Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_ENDIAN_H_
|
||||
#define _MACHINE_ENDIAN_H_
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
/*
|
||||
* Definitions for byte order, according to byte significance from low
|
||||
* address to high.
|
||||
*/
|
||||
#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
|
||||
#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
|
||||
#define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
|
||||
|
||||
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#define LITTLE_ENDIAN _LITTLE_ENDIAN
|
||||
#define BIG_ENDIAN _BIG_ENDIAN
|
||||
#define PDP_ENDIAN _PDP_ENDIAN
|
||||
#define BYTE_ORDER _BYTE_ORDER
|
||||
#endif
|
||||
|
||||
#define _QUAD_HIGHWORD 1
|
||||
#define _QUAD_LOWWORD 0
|
||||
#define __ntohl(x) (__bswap32(x))
|
||||
#define __ntohs(x) (__bswap16(x))
|
||||
#define __htonl(x) (__bswap32(x))
|
||||
#define __htons(x) (__bswap16(x))
|
||||
|
||||
static __inline __uint64_t
|
||||
__bswap64(__uint64_t _x)
|
||||
{
|
||||
__uint64_t ret;
|
||||
|
||||
ret = (_x >> 56);
|
||||
ret |= ((_x >> 40) & 0xff00);
|
||||
ret |= ((_x >> 24) & 0xff0000);
|
||||
ret |= ((_x >> 8) & 0xff000000);
|
||||
ret |= ((_x << 8) & ((__uint64_t)0xff << 32));
|
||||
ret |= ((_x << 24) & ((__uint64_t)0xff << 40));
|
||||
ret |= ((_x << 40) & ((__uint64_t)0xff << 48));
|
||||
ret |= (_x << 56);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static __inline __uint32_t
|
||||
__bswap32_var(__uint32_t _x)
|
||||
{
|
||||
|
||||
return ((_x >> 24) | ((_x >> 8) & 0xff00) | ((_x << 8) & 0xff0000) |
|
||||
((_x << 24) & 0xff000000));
|
||||
}
|
||||
|
||||
static __inline __uint16_t
|
||||
__bswap16_var(__uint16_t _x)
|
||||
{
|
||||
__uint32_t ret;
|
||||
|
||||
ret = ((_x >> 8) | ((_x << 8) & 0xff00));
|
||||
|
||||
return ((__uint16_t)ret);
|
||||
}
|
||||
|
||||
#ifdef __OPTIMIZE__
|
||||
|
||||
#define __bswap32_constant(x) \
|
||||
((((x) & 0xff000000U) >> 24) | \
|
||||
(((x) & 0x00ff0000U) >> 8) | \
|
||||
(((x) & 0x0000ff00U) << 8) | \
|
||||
(((x) & 0x000000ffU) << 24))
|
||||
|
||||
#define __bswap16_constant(x) \
|
||||
((((x) & 0xff00) >> 8) | \
|
||||
(((x) & 0x00ff) << 8))
|
||||
|
||||
#define __bswap16(x) \
|
||||
((__uint16_t)(__builtin_constant_p(x) ? \
|
||||
__bswap16_constant(x) : \
|
||||
__bswap16_var(x)))
|
||||
|
||||
#define __bswap32(x) \
|
||||
((__uint32_t)(__builtin_constant_p(x) ? \
|
||||
__bswap32_constant(x) : \
|
||||
__bswap32_var(x)))
|
||||
|
||||
#else
|
||||
#define __bswap16(x) __bswap16_var(x)
|
||||
#define __bswap32(x) __bswap32_var(x)
|
||||
|
||||
#endif /* __OPTIMIZE__ */
|
||||
#endif /* !_MACHINE_ENDIAN_H_ */
|
1
sys/riscv/include/exec.h
Normal file
1
sys/riscv/include/exec.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
111
sys/riscv/include/float.h
Normal file
111
sys/riscv/include/float.h
Normal file
@ -0,0 +1,111 @@
|
||||
/*-
|
||||
* Copyright (c) 1989 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from: @(#)float.h 7.1 (Berkeley) 5/8/90
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_FLOAT_H_
|
||||
#define _MACHINE_FLOAT_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
extern int __flt_rounds(void);
|
||||
__END_DECLS
|
||||
|
||||
#define FLT_RADIX 2 /* b */
|
||||
#define FLT_ROUNDS __flt_rounds()
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define FLT_EVAL_METHOD 0
|
||||
#define DECIMAL_DIG 17 /* max precision in decimal digits */
|
||||
#endif
|
||||
|
||||
#define FLT_MANT_DIG 24 /* p */
|
||||
#define FLT_EPSILON 1.19209290E-07F /* b**(1-p) */
|
||||
#define FLT_DIG 6 /* floor((p-1)*log10(b))+(b == 10) */
|
||||
#define FLT_MIN_EXP (-125) /* emin */
|
||||
#define FLT_MIN 1.17549435E-38F /* b**(emin-1) */
|
||||
#define FLT_MIN_10_EXP (-37) /* ceil(log10(b**(emin-1))) */
|
||||
#define FLT_MAX_EXP 128 /* emax */
|
||||
#define FLT_MAX 3.40282347E+38F /* (1-b**(-p))*b**emax */
|
||||
#define FLT_MAX_10_EXP 38 /* floor(log10((1-b**(-p))*b**emax)) */
|
||||
#if __ISO_C_VISIBLE >= 2011
|
||||
#define FLT_TRUE_MIN 1.40129846E-45F /* b**(emin-p) */
|
||||
#define FLT_DECIMAL_DIG 9 /* ceil(1+p*log10(b)) */
|
||||
#define FLT_HAS_SUBNORM 1
|
||||
#endif /* __ISO_C_VISIBLE >= 2011 */
|
||||
|
||||
#define DBL_MANT_DIG 53
|
||||
#define DBL_EPSILON 2.2204460492503131E-16
|
||||
#define DBL_DIG 15
|
||||
#define DBL_MIN_EXP (-1021)
|
||||
#define DBL_MIN 2.2250738585072014E-308
|
||||
#define DBL_MIN_10_EXP (-307)
|
||||
#define DBL_MAX_EXP 1024
|
||||
#define DBL_MAX 1.7976931348623157E+308
|
||||
#define DBL_MAX_10_EXP 308
|
||||
#if __ISO_C_VISIBLE >= 2011
|
||||
#define DBL_TRUE_MIN 4.9406564584124654E-324
|
||||
#define DBL_DECIMAL_DIG 17
|
||||
#define DBL_HAS_SUBNORM 1
|
||||
#endif /* __ISO_C_VISIBLE >= 2011 */
|
||||
|
||||
#define LDBL_MANT_DIG DBL_MANT_DIG
|
||||
#define LDBL_EPSILON ((long double)DBL_EPSILON)
|
||||
#define LDBL_DIG DBL_DIG
|
||||
#define LDBL_MIN_EXP DBL_MIN_EXP
|
||||
#define LDBL_MIN ((long double)DBL_MIN)
|
||||
#define LDBL_MIN_10_EXP DBL_MIN_10_EXP
|
||||
#define LDBL_MAX_EXP DBL_MAX_EXP
|
||||
#define LDBL_MAX ((long double)DBL_MAX)
|
||||
#define LDBL_MAX_10_EXP DBL_MAX_10_EXP
|
||||
#if __ISO_C_VISIBLE >= 2011
|
||||
#define LDBL_TRUE_MIN ((long double)DBL_TRUE_MIN)
|
||||
#define LDBL_DECIMAL_DIG DBL_DECIMAL_DIG
|
||||
#define LDBL_HAS_SUBNORM DBL_HAS_SUBNORM
|
||||
#endif /* __ISO_C_VISIBLE >= 2011 */
|
||||
|
||||
#if 0 /* RISCVTODO */
|
||||
#define LDBL_MANT_DIG 113
|
||||
#define LDBL_EPSILON 1.925929944387235853055977942584927319E-34L
|
||||
#define LDBL_DIG 33
|
||||
#define LDBL_MIN_EXP (-16381)
|
||||
#define LDBL_MIN 3.362103143112093506262677817321752603E-4932L
|
||||
#define LDBL_MIN_10_EXP (-4931)
|
||||
#define LDBL_MAX_EXP (+16384)
|
||||
#define LDBL_MAX 1.189731495357231765085759326628007016E+4932L
|
||||
#define LDBL_MAX_10_EXP (+4932)
|
||||
#if __ISO_C_VISIBLE >= 2011
|
||||
#define LDBL_TRUE_MIN 6.475175119438025110924438958227646552E-4966L
|
||||
#define LDBL_DECIMAL_DIG 36
|
||||
#define LDBL_HAS_SUBNORM 1
|
||||
#endif /* __ISO_C_VISIBLE >= 2011 */
|
||||
#endif
|
||||
|
||||
#endif /* _MACHINE_FLOAT_H_ */
|
3
sys/riscv/include/floatingpoint.h
Normal file
3
sys/riscv/include/floatingpoint.h
Normal file
@ -0,0 +1,3 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#include <machine/ieeefp.h>
|
72
sys/riscv/include/frame.h
Normal file
72
sys/riscv/include/frame.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_FRAME_H_
|
||||
#define _MACHINE_FRAME_H_
|
||||
|
||||
#ifndef LOCORE
|
||||
|
||||
#include <sys/signal.h>
|
||||
#include <sys/ucontext.h>
|
||||
|
||||
/*
|
||||
* NOTE: keep this structure in sync with struct reg and struct mcontext.
|
||||
*/
|
||||
struct trapframe {
|
||||
uint64_t tf_ra;
|
||||
uint64_t tf_sp;
|
||||
uint64_t tf_gp;
|
||||
uint64_t tf_tp;
|
||||
uint64_t tf_t[7];
|
||||
uint64_t tf_s[12];
|
||||
uint64_t tf_a[8];
|
||||
uint64_t tf_sepc;
|
||||
uint64_t tf_sstatus;
|
||||
uint64_t tf_sbadaddr;
|
||||
uint64_t tf_scause;
|
||||
};
|
||||
|
||||
/*
|
||||
* Signal frame. Pushed onto user stack before calling sigcode.
|
||||
*/
|
||||
struct sigframe {
|
||||
siginfo_t sf_si; /* actual saved siginfo */
|
||||
ucontext_t sf_uc; /* actual saved ucontext */
|
||||
};
|
||||
|
||||
#endif /* !LOCORE */
|
||||
|
||||
#endif /* !_MACHINE_FRAME_H_ */
|
8
sys/riscv/include/ieeefp.h
Normal file
8
sys/riscv/include/ieeefp.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* $FreeBSD$ */
|
||||
|
||||
#ifndef _MACHINE_IEEEFP_H_
|
||||
#define _MACHINE_IEEEFP_H_
|
||||
|
||||
/* TODO */
|
||||
|
||||
#endif /* _MACHINE_IEEEFP_H_ */
|
52
sys/riscv/include/in_cksum.h
Normal file
52
sys/riscv/include/in_cksum.h
Normal file
@ -0,0 +1,52 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from tahoe: in_cksum.c 1.2 86/01/05
|
||||
* from: @(#)in_cksum.c 1.3 (Berkeley) 1/19/91
|
||||
* from: Id: in_cksum.c,v 1.8 1995/12/03 18:35:19 bde Exp
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_IN_CKSUM_H_
|
||||
#define _MACHINE_IN_CKSUM_H_ 1
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef _KERNEL
|
||||
#define in_cksum(m, len) in_cksum_skip(m, len, 0)
|
||||
u_short in_addword(u_short sum, u_short b);
|
||||
u_short in_cksum_skip(struct mbuf *m, int len, int skip);
|
||||
u_int do_cksum(const void *, int);
|
||||
#if defined(IPVERSION) && (IPVERSION == 4)
|
||||
u_int in_cksum_hdr(const struct ip *);
|
||||
#endif
|
||||
|
||||
u_short in_pseudo(u_int sum, u_int b, u_int c);
|
||||
|
||||
#endif /* _KERNEL */
|
||||
#endif /* _MACHINE_IN_CKSUM_H_ */
|
54
sys/riscv/include/intr.h
Normal file
54
sys/riscv/include/intr.h
Normal file
@ -0,0 +1,54 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_INTR_MACHDEP_H_
|
||||
#define _MACHINE_INTR_MACHDEP_H_
|
||||
|
||||
struct trapframe;
|
||||
|
||||
void riscv_init_interrupts(void);
|
||||
int riscv_teardown_intr(void *);
|
||||
int riscv_config_intr(u_int, enum intr_trigger, enum intr_polarity);
|
||||
int riscv_setup_intr(const char *, driver_filter_t *, driver_intr_t *,
|
||||
void *, int, int, void **);
|
||||
void riscv_cpu_intr(struct trapframe *);
|
||||
|
||||
typedef unsigned long * riscv_intrcnt_t;
|
||||
|
||||
riscv_intrcnt_t riscv_intrcnt_create(const char *);
|
||||
void riscv_intrcnt_setname(riscv_intrcnt_t, const char *);
|
||||
|
||||
#endif /* !_MACHINE_INTR_MACHDEP_H_ */
|
58
sys/riscv/include/kdb.h
Normal file
58
sys/riscv/include/kdb.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 Marcel Moolenaar
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_KDB_H_
|
||||
#define _MACHINE_KDB_H_
|
||||
|
||||
#include <machine/cpufunc.h>
|
||||
|
||||
#define KDB_STOPPEDPCB(pc) &stoppcbs[pc->pc_cpuid]
|
||||
|
||||
static __inline void
|
||||
kdb_cpu_clear_singlestep(void)
|
||||
{
|
||||
}
|
||||
|
||||
static __inline void
|
||||
kdb_cpu_set_singlestep(void)
|
||||
{
|
||||
}
|
||||
|
||||
static __inline void
|
||||
kdb_cpu_sync_icache(unsigned char *addr, size_t size)
|
||||
{
|
||||
|
||||
cpu_icache_sync_range((vm_offset_t)addr, size);
|
||||
}
|
||||
|
||||
static __inline void
|
||||
kdb_cpu_trap(int type, int code)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* _MACHINE_KDB_H_ */
|
51
sys/riscv/include/machdep.h
Normal file
51
sys/riscv/include/machdep.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_MACHDEP_H_
|
||||
#define _MACHINE_MACHDEP_H_
|
||||
|
||||
struct riscv_bootparams {
|
||||
vm_offset_t kern_l1pt; /* Kernel L1 base */
|
||||
vm_offset_t kern_stack;
|
||||
};
|
||||
|
||||
extern vm_paddr_t physmap[];
|
||||
extern u_int physmap_idx;
|
||||
|
||||
vm_offset_t fake_preload_metadata(struct riscv_bootparams *rbp);
|
||||
void initriscv(struct riscv_bootparams *);
|
||||
|
||||
#endif /* _MACHINE_MACHDEP_H_ */
|
49
sys/riscv/include/md_var.h
Normal file
49
sys/riscv/include/md_var.h
Normal file
@ -0,0 +1,49 @@
|
||||
/*-
|
||||
* Copyright (c) 1995 Bruce D. Evans.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 author nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* from: FreeBSD: src/sys/i386/include/md_var.h,v 1.40 2001/07/12
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_MD_VAR_H_
|
||||
#define _MACHINE_MD_VAR_H_
|
||||
|
||||
extern long Maxmem;
|
||||
extern char sigcode[];
|
||||
extern int szsigcode;
|
||||
extern uint64_t *vm_page_dump;
|
||||
extern int vm_page_dump_size;
|
||||
|
||||
struct dumperinfo;
|
||||
|
||||
void busdma_swi(void);
|
||||
void dump_add_page(vm_paddr_t);
|
||||
void dump_drop_page(vm_paddr_t);
|
||||
int minidumpsys(struct dumperinfo *);
|
||||
|
||||
#endif /* !_MACHINE_MD_VAR_H_ */
|
40
sys/riscv/include/memdev.h
Normal file
40
sys/riscv/include/memdev.h
Normal file
@ -0,0 +1,40 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 Mark R V Murray
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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
|
||||
* in this position and unchanged.
|
||||
* 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 AUTHORS ``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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_MEMDEV_H_
|
||||
#define _MACHINE_MEMDEV_H_
|
||||
|
||||
#define CDEV_MINOR_MEM 0
|
||||
#define CDEV_MINOR_KMEM 1
|
||||
|
||||
d_open_t memopen;
|
||||
d_read_t memrw;
|
||||
#define memioctl (d_ioctl_t *)NULL
|
||||
#define memmmap (d_mmap_t *)NULL
|
||||
|
||||
#endif /* _MACHINE_MEMDEV_H_ */
|
48
sys/riscv/include/minidump.h
Normal file
48
sys/riscv/include/minidump.h
Normal file
@ -0,0 +1,48 @@
|
||||
/*-
|
||||
* Copyright (c) 2006 Peter Wemm
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* From i386: FreeBSD: 157909 2006-04-21 04:28:43Z peter
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_MINIDUMP_H_
|
||||
#define _MACHINE_MINIDUMP_H_ 1
|
||||
|
||||
#define MINIDUMP_MAGIC "minidump FreeBSD/riscv"
|
||||
#define MINIDUMP_VERSION 1
|
||||
|
||||
struct minidumphdr {
|
||||
char magic[24];
|
||||
uint32_t version;
|
||||
uint32_t msgbufsize;
|
||||
uint32_t bitmapsize;
|
||||
uint32_t pmapsize;
|
||||
uint64_t kernbase;
|
||||
uint64_t dmapphys;
|
||||
uint64_t dmapbase;
|
||||
uint64_t dmapend;
|
||||
};
|
||||
|
||||
#endif /* _MACHINE_MINIDUMP_H_ */
|
39
sys/riscv/include/ofw_machdep.h
Normal file
39
sys/riscv/include/ofw_machdep.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 by Thomas Moestl <tmm@FreeBSD.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_OFW_MACHDEP_H_
|
||||
#define _MACHINE_OFW_MACHDEP_H_
|
||||
|
||||
#include <vm/vm.h>
|
||||
|
||||
typedef uint32_t cell_t;
|
||||
struct mem_region {
|
||||
vm_offset_t mr_start;
|
||||
vm_size_t mr_size;
|
||||
};
|
||||
|
||||
#endif /* _MACHINE_OFW_MACHDEP_H_ */
|
108
sys/riscv/include/param.h
Normal file
108
sys/riscv/include/param.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* 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 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.
|
||||
*
|
||||
* from: @(#)param.h 5.8 (Berkeley) 6/28/91
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PARAM_H_
|
||||
#define _MACHINE_PARAM_H_
|
||||
|
||||
/*
|
||||
* Machine dependent constants for RISC-V.
|
||||
*/
|
||||
|
||||
#include <machine/_align.h>
|
||||
|
||||
#define STACKALIGNBYTES (16 - 1)
|
||||
#define STACKALIGN(p) ((uint64_t)(p) & ~STACKALIGNBYTES)
|
||||
|
||||
#ifndef MACHINE
|
||||
#define MACHINE "riscv"
|
||||
#endif
|
||||
#ifndef MACHINE_ARCH
|
||||
#define MACHINE_ARCH "riscv64"
|
||||
#endif
|
||||
|
||||
#if defined(SMP) || defined(KLD_MODULE)
|
||||
#ifndef MAXCPU
|
||||
#define MAXCPU 2
|
||||
#endif
|
||||
#else
|
||||
#define MAXCPU 1
|
||||
#endif /* SMP || KLD_MODULE */
|
||||
|
||||
#ifndef MAXMEMDOM
|
||||
#define MAXMEMDOM 1
|
||||
#endif
|
||||
|
||||
#define ALIGNBYTES _ALIGNBYTES
|
||||
#define ALIGN(p) _ALIGN(p)
|
||||
/*
|
||||
* ALIGNED_POINTER is a boolean macro that checks whether an address
|
||||
* is valid to fetch data elements of type t from on this architecture.
|
||||
* This does not reflect the optimal alignment, just the possibility
|
||||
* (within reasonable limits).
|
||||
*/
|
||||
#define ALIGNED_POINTER(p, t) ((((u_long)(p)) & (sizeof(t) - 1)) == 0)
|
||||
|
||||
/*
|
||||
* CACHE_LINE_SIZE is the compile-time maximum cache line size for an
|
||||
* architecture. It should be used with appropriate caution.
|
||||
*/
|
||||
#define CACHE_LINE_SHIFT 6
|
||||
#define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT)
|
||||
|
||||
#define PAGE_SHIFT 12
|
||||
#define PAGE_SIZE (1 << PAGE_SHIFT) /* Page size */
|
||||
#define PAGE_MASK (PAGE_SIZE - 1)
|
||||
|
||||
#define MAXPAGESIZES 1 /* maximum number of supported page sizes */
|
||||
|
||||
#ifndef KSTACK_PAGES
|
||||
#define KSTACK_PAGES 4 /* pages of kernel stack (with pcb) */
|
||||
#endif
|
||||
|
||||
#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */
|
||||
#define PCPU_PAGES 1
|
||||
|
||||
/*
|
||||
* Mach derived conversion macros
|
||||
*/
|
||||
#define round_page(x) (((unsigned long)(x) + PAGE_MASK) & ~PAGE_MASK)
|
||||
#define trunc_page(x) ((unsigned long)(x) & ~PAGE_MASK)
|
||||
|
||||
#define atop(x) ((unsigned long)(x) >> PAGE_SHIFT)
|
||||
#define ptoa(x) ((unsigned long)(x) << PAGE_SHIFT)
|
||||
|
||||
#define riscv_btop(x) ((unsigned long)(x) >> PAGE_SHIFT)
|
||||
#define riscv_ptob(x) ((unsigned long)(x) << PAGE_SHIFT)
|
||||
|
||||
#define pgtok(x) ((unsigned long)(x) * (PAGE_SIZE / 1024))
|
||||
|
||||
#endif /* !_MACHINE_PARAM_H_ */
|
64
sys/riscv/include/pcb.h
Normal file
64
sys/riscv/include/pcb.h
Normal file
@ -0,0 +1,64 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PCB_H_
|
||||
#define _MACHINE_PCB_H_
|
||||
|
||||
#ifndef LOCORE
|
||||
|
||||
struct trapframe;
|
||||
|
||||
struct pcb {
|
||||
uint64_t pcb_ra;
|
||||
uint64_t pcb_sp;
|
||||
uint64_t pcb_gp;
|
||||
uint64_t pcb_tp;
|
||||
uint64_t pcb_t[7];
|
||||
uint64_t pcb_s[12];
|
||||
uint64_t pcb_a[8];
|
||||
uint64_t pcb_sepc;
|
||||
vm_offset_t pcb_l1addr; /* L1 page tables base address */
|
||||
vm_offset_t pcb_onfault;
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
void makectx(struct trapframe *tf, struct pcb *pcb);
|
||||
int savectx(struct pcb *pcb) __returns_twice;
|
||||
#endif
|
||||
|
||||
#endif /* !LOCORE */
|
||||
|
||||
#endif /* !_MACHINE_PCB_H_ */
|
74
sys/riscv/include/pcpu.h
Normal file
74
sys/riscv/include/pcpu.h
Normal file
@ -0,0 +1,74 @@
|
||||
/*-
|
||||
* Copyright (c) 1999 Luoqi Chen <luoqi@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* from: FreeBSD: src/sys/i386/include/globaldata.h,v 1.27 2001/04/27
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PCPU_H_
|
||||
#define _MACHINE_PCPU_H_
|
||||
|
||||
#include <machine/cpu.h>
|
||||
#include <machine/cpufunc.h>
|
||||
|
||||
#define ALT_STACK_SIZE 128
|
||||
|
||||
#define PCPU_MD_FIELDS \
|
||||
char __pad[129]
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
struct pcb;
|
||||
struct pcpu;
|
||||
extern struct pcpu *pcpup;
|
||||
|
||||
static inline struct pcpu *
|
||||
get_pcpu(void)
|
||||
{
|
||||
|
||||
return (pcpup);
|
||||
}
|
||||
|
||||
static inline struct thread *
|
||||
get_curthread(void)
|
||||
{
|
||||
struct thread *td;
|
||||
|
||||
td = (struct thread *)*(uint64_t *)pcpup;
|
||||
|
||||
return (td);
|
||||
}
|
||||
|
||||
#define curthread get_curthread()
|
||||
|
||||
#define PCPU_GET(member) (get_pcpu()->pc_ ## member)
|
||||
#define PCPU_ADD(member, value) (get_pcpu()->pc_ ## member += (value))
|
||||
#define PCPU_INC(member) PCPU_ADD(member, 1)
|
||||
#define PCPU_PTR(member) (&get_pcpu()->pc_ ## member)
|
||||
#define PCPU_SET(member,value) (get_pcpu()->pc_ ## member = (value))
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_MACHINE_PCPU_H_ */
|
160
sys/riscv/include/pmap.h
Normal file
160
sys/riscv/include/pmap.h
Normal file
@ -0,0 +1,160 @@
|
||||
/*-
|
||||
* Copyright (c) 1991 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* the Systems Programming Group of the University of Utah Computer
|
||||
* Science Department and William Jolitz of UUNET Technologies Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PMAP_H_
|
||||
#define _MACHINE_PMAP_H_
|
||||
|
||||
#include <machine/pte.h>
|
||||
|
||||
#ifndef LOCORE
|
||||
|
||||
#include <sys/queue.h>
|
||||
#include <sys/_lock.h>
|
||||
#include <sys/_mutex.h>
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#define vtophys(va) pmap_kextract((vm_offset_t)(va))
|
||||
|
||||
#endif
|
||||
|
||||
#define pmap_page_get_memattr(m) ((m)->md.pv_memattr)
|
||||
#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0)
|
||||
void pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma);
|
||||
|
||||
/*
|
||||
* Pmap stuff
|
||||
*/
|
||||
|
||||
struct md_page {
|
||||
TAILQ_HEAD(,pv_entry) pv_list;
|
||||
int pv_gen;
|
||||
vm_memattr_t pv_memattr;
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure is used to hold a virtual<->physical address
|
||||
* association and is used mostly by bootstrap code
|
||||
*/
|
||||
struct pv_addr {
|
||||
SLIST_ENTRY(pv_addr) pv_list;
|
||||
vm_offset_t pv_va;
|
||||
vm_paddr_t pv_pa;
|
||||
};
|
||||
|
||||
|
||||
struct pmap {
|
||||
struct mtx pm_mtx;
|
||||
struct pmap_statistics pm_stats; /* pmap statictics */
|
||||
pd_entry_t *pm_l1;
|
||||
TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */
|
||||
};
|
||||
|
||||
typedef struct pv_entry {
|
||||
vm_offset_t pv_va; /* virtual address for mapping */
|
||||
TAILQ_ENTRY(pv_entry) pv_next;
|
||||
} *pv_entry_t;
|
||||
|
||||
/*
|
||||
* pv_entries are allocated in chunks per-process. This avoids the
|
||||
* need to track per-pmap assignments.
|
||||
*/
|
||||
#define _NPCM 3
|
||||
#define _NPCPV 168
|
||||
struct pv_chunk {
|
||||
struct pmap * pc_pmap;
|
||||
TAILQ_ENTRY(pv_chunk) pc_list;
|
||||
uint64_t pc_map[_NPCM]; /* bitmap; 1 = free */
|
||||
TAILQ_ENTRY(pv_chunk) pc_lru;
|
||||
struct pv_entry pc_pventry[_NPCPV];
|
||||
};
|
||||
|
||||
typedef struct pmap *pmap_t;
|
||||
|
||||
#ifdef _KERNEL
|
||||
extern struct pmap kernel_pmap_store;
|
||||
#define kernel_pmap (&kernel_pmap_store)
|
||||
#define pmap_kernel() kernel_pmap
|
||||
|
||||
#define PMAP_ASSERT_LOCKED(pmap) \
|
||||
mtx_assert(&(pmap)->pm_mtx, MA_OWNED)
|
||||
#define PMAP_LOCK(pmap) mtx_lock(&(pmap)->pm_mtx)
|
||||
#define PMAP_LOCK_ASSERT(pmap, type) \
|
||||
mtx_assert(&(pmap)->pm_mtx, (type))
|
||||
#define PMAP_LOCK_DESTROY(pmap) mtx_destroy(&(pmap)->pm_mtx)
|
||||
#define PMAP_LOCK_INIT(pmap) mtx_init(&(pmap)->pm_mtx, "pmap", \
|
||||
NULL, MTX_DEF | MTX_DUPOK)
|
||||
#define PMAP_OWNED(pmap) mtx_owned(&(pmap)->pm_mtx)
|
||||
#define PMAP_MTX(pmap) (&(pmap)->pm_mtx)
|
||||
#define PMAP_TRYLOCK(pmap) mtx_trylock(&(pmap)->pm_mtx)
|
||||
#define PMAP_UNLOCK(pmap) mtx_unlock(&(pmap)->pm_mtx)
|
||||
|
||||
#define PHYS_AVAIL_SIZE 10
|
||||
extern vm_paddr_t phys_avail[];
|
||||
extern vm_paddr_t dump_avail[];
|
||||
extern vm_offset_t virtual_avail;
|
||||
extern vm_offset_t virtual_end;
|
||||
|
||||
/*
|
||||
* Macros to test if a mapping is mappable with an L1 Section mapping
|
||||
* or an L2 Large Page mapping.
|
||||
*/
|
||||
#define L1_MAPPABLE_P(va, pa, size) \
|
||||
((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE)
|
||||
|
||||
void pmap_bootstrap(vm_offset_t, vm_paddr_t, vm_size_t);
|
||||
void pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t);
|
||||
vm_paddr_t pmap_kextract(vm_offset_t va);
|
||||
void pmap_kremove(vm_offset_t);
|
||||
void pmap_kremove_device(vm_offset_t, vm_size_t);
|
||||
|
||||
void *pmap_mapdev(vm_offset_t, vm_size_t);
|
||||
void *pmap_mapbios(vm_paddr_t, vm_size_t);
|
||||
void pmap_unmapdev(vm_offset_t, vm_size_t);
|
||||
void pmap_unmapbios(vm_offset_t, vm_size_t);
|
||||
|
||||
boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t);
|
||||
void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t);
|
||||
|
||||
bool pmap_get_tables(pmap_t, vm_offset_t, pd_entry_t **, pd_entry_t **,
|
||||
pt_entry_t **);
|
||||
|
||||
#define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list))
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !LOCORE */
|
||||
|
||||
#endif /* !_MACHINE_PMAP_H_ */
|
65
sys/riscv/include/pmc_mdep.h
Normal file
65
sys/riscv/include/pmc_mdep.h
Normal file
@ -0,0 +1,65 @@
|
||||
/*-
|
||||
* Copyright (c) 2009 Rui Paulo <rpaulo@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PMC_MDEP_H_
|
||||
#define _MACHINE_PMC_MDEP_H_
|
||||
|
||||
#define PMC_MDEP_CLASS_INDEX_RISCV 1
|
||||
/*
|
||||
* On the RISC-V platform we don't support any PMCs yet.
|
||||
*/
|
||||
#include <dev/hwpmc/hwpmc_riscv.h>
|
||||
|
||||
union pmc_md_op_pmcallocate {
|
||||
uint64_t __pad[4];
|
||||
};
|
||||
|
||||
/* Logging */
|
||||
#define PMCLOG_READADDR PMCLOG_READ64
|
||||
#define PMCLOG_EMITADDR PMCLOG_EMIT64
|
||||
|
||||
#ifdef _KERNEL
|
||||
union pmc_md_pmc {
|
||||
struct pmc_md_riscv_pmc pm_riscv;
|
||||
};
|
||||
|
||||
#define PMC_IN_KERNEL_STACK(S,START,END) \
|
||||
((S) >= (START) && (S) < (END))
|
||||
#define PMC_IN_KERNEL(va) INKERNEL((va))
|
||||
#define PMC_IN_USERSPACE(va) ((va) <= VM_MAXUSER_ADDRESS)
|
||||
#define PMC_TRAPFRAME_TO_PC(TF) ((TF)->tf_ra)
|
||||
#define PMC_TRAPFRAME_TO_FP(TF) (0) /* stub */
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
struct pmc_mdep *pmc_riscv_initialize(void);
|
||||
void pmc_riscv_finalize(struct pmc_mdep *_md);
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_MACHINE_PMC_MDEP_H_ */
|
60
sys/riscv/include/proc.h
Normal file
60
sys/riscv/include/proc.h
Normal file
@ -0,0 +1,60 @@
|
||||
/*-
|
||||
* Copyright (c) 1991 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from: @(#)proc.h 7.1 (Berkeley) 5/15/91
|
||||
* from: FreeBSD: src/sys/i386/include/proc.h,v 1.11 2001/06/29
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PROC_H_
|
||||
#define _MACHINE_PROC_H_
|
||||
|
||||
struct mdthread {
|
||||
int md_spinlock_count; /* (k) */
|
||||
register_t md_saved_sstatus_ie; /* (k) */
|
||||
};
|
||||
|
||||
struct mdproc {
|
||||
int dummy;
|
||||
};
|
||||
|
||||
#define KINFO_PROC_SIZE 1088
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#define MAXARGS 8
|
||||
struct syscall_args {
|
||||
u_int code;
|
||||
struct sysent *callp;
|
||||
register_t args[MAXARGS];
|
||||
int narg;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_PROC_H_ */
|
78
sys/riscv/include/profile.h
Normal file
78
sys/riscv/include/profile.h
Normal file
@ -0,0 +1,78 @@
|
||||
/*-
|
||||
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Author: Chris G. Demetriou
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and
|
||||
* its documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||||
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie the
|
||||
* rights to redistribute these changes.
|
||||
*
|
||||
* from: NetBSD: profile.h,v 1.9 1997/04/06 08:47:37 cgd Exp
|
||||
* from: FreeBSD: src/sys/alpha/include/profile.h,v 1.4 1999/12/29
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PROFILE_H_
|
||||
#define _MACHINE_PROFILE_H_
|
||||
|
||||
#if !defined(_KERNEL) && !defined(_SYS_CDEFS_H_)
|
||||
#error this file needs sys/cdefs.h as a prerequisite
|
||||
#endif
|
||||
|
||||
#define FUNCTION_ALIGNMENT 32
|
||||
|
||||
typedef u_long fptrdiff_t;
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
||||
#include <machine/cpufunc.h>
|
||||
|
||||
#define _MCOUNT_DECL void mcount
|
||||
#define MCOUNT
|
||||
|
||||
#define MCOUNT_DECL(s) register_t s;
|
||||
#define MCOUNT_ENTER(s) {s = intr_disable(); }
|
||||
#define MCOUNT_EXIT(s) {intr_restore(s); }
|
||||
|
||||
void bintr(void);
|
||||
void btrap(void);
|
||||
void eintr(void);
|
||||
void user(void);
|
||||
|
||||
#define MCOUNT_FROMPC_USER(pc) \
|
||||
((pc < (uintfptr_t)VM_MAXUSER_ADDRESS) ? (uintfptr_t)user : pc)
|
||||
|
||||
#define MCOUNT_FROMPC_INTR(pc) \
|
||||
((pc >= (uintfptr_t)btrap && pc < (uintfptr_t)eintr) ? \
|
||||
((pc >= (uintfptr_t)bintr) ? (uintfptr_t)bintr : \
|
||||
(uintfptr_t)btrap) : ~0UL)
|
||||
|
||||
void mcount(uintfptr_t frompc, uintfptr_t selfpc);
|
||||
|
||||
#else /* !_KERNEL */
|
||||
|
||||
typedef unsigned long long uintfptr_t;
|
||||
|
||||
#define _MCOUNT_DECL void mcount
|
||||
#define MCOUNT
|
||||
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#endif /* !_MACHINE_PROFILE_H_ */
|
1
sys/riscv/include/psl.h
Normal file
1
sys/riscv/include/psl.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
100
sys/riscv/include/pte.h
Normal file
100
sys/riscv/include/pte.h
Normal file
@ -0,0 +1,100 @@
|
||||
/*-
|
||||
* Copyright (c) 2014 Andrew Turner
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PTE_H_
|
||||
#define _MACHINE_PTE_H_
|
||||
|
||||
#ifndef LOCORE
|
||||
typedef uint64_t pd_entry_t; /* page directory entry */
|
||||
typedef uint64_t pt_entry_t; /* page table entry */
|
||||
#endif
|
||||
|
||||
/* Level 0 table, 512GiB per entry */
|
||||
#define L0_SHIFT 39
|
||||
|
||||
/* Level 1 table, 1GiB per entry */
|
||||
#define L1_SHIFT 30
|
||||
#define L1_SIZE (1 << L1_SHIFT)
|
||||
#define L1_OFFSET (L1_SIZE - 1)
|
||||
|
||||
/* Level 2 table, 2MiB per entry */
|
||||
#define L2_SHIFT 21
|
||||
#define L2_SIZE (1 << L2_SHIFT)
|
||||
#define L2_OFFSET (L2_SIZE - 1)
|
||||
|
||||
/* Level 3 table, 4KiB per entry */
|
||||
#define L3_SHIFT 12
|
||||
#define L3_SIZE (1 << L3_SHIFT)
|
||||
#define L3_OFFSET (L3_SIZE - 1)
|
||||
|
||||
#define Ln_ENTRIES (1 << 9)
|
||||
#define Ln_ADDR_MASK (Ln_ENTRIES - 1)
|
||||
|
||||
/* Bits 9:7 are reserved for software */
|
||||
#define PTE_SW_MANAGED (1 << 8)
|
||||
#define PTE_SW_WIRED (1 << 7)
|
||||
#define PTE_DIRTY (1 << 6) /* Virtual page is written */
|
||||
#define PTE_REF (1 << 5) /* Virtual page is referenced */
|
||||
#define PTE_VALID (1 << 0) /* Virtual page is valid */
|
||||
#define PTE_TYPE_S 1
|
||||
#define PTE_TYPE_M (0xf << PTE_TYPE_S)
|
||||
#define PTE_TYPE_PTR 0
|
||||
#define PTE_TYPE_PTR_G 1
|
||||
#define PTE_TYPE_SROURX 2 /* Supervisor read-only, user read-execute page. */
|
||||
#define PTE_TYPE_SRWURWX 3 /* Supervisor read-write, user read-write-execute page. */
|
||||
#define PTE_TYPE_SURO 4 /* Supervisor and user read-only page. */
|
||||
#define PTE_TYPE_SURW 5 /* Supervisor and user read-write page. */
|
||||
#define PTE_TYPE_SURX 6 /* Supervisor and user read-execute page. */
|
||||
#define PTE_TYPE_SURWX 7 /* Supervisor and User Read Write Execute */
|
||||
#define PTE_TYPE_SRO 8 /* Supervisor read-only page. */
|
||||
#define PTE_TYPE_SRW 9 /* Supervisor read-write page. */
|
||||
#define PTE_TYPE_SRX 10 /* Supervisor read-execute page. */
|
||||
#define PTE_TYPE_SRWX 11 /* Supervisor read-write-execute page. */
|
||||
#define PTE_TYPE_SRO_G 12 /* Supervisor read-only page--global mapping. */
|
||||
#define PTE_TYPE_SRW_G 13 /* Supervisor read-write page--global mapping. */
|
||||
#define PTE_TYPE_SRX_G 14 /* Supervisor read-execute page--global mapping. */
|
||||
#define PTE_TYPE_SRWX_G 15 /* Supervisor Read Write Execute Global */
|
||||
|
||||
#define PTE_PPN0_S 10
|
||||
#define PTE_PPN1_S 19
|
||||
#define PTE_PPN2_S 28
|
||||
#define PTE_PPN3_S 37
|
||||
#define PTE_SIZE 8
|
||||
|
||||
#endif /* !_MACHINE_PTE_H_ */
|
||||
|
||||
/* End of pte.h */
|
1
sys/riscv/include/ptrace.h
Normal file
1
sys/riscv/include/ptrace.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
72
sys/riscv/include/reg.h
Normal file
72
sys/riscv/include/reg.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_REG_H_
|
||||
#define _MACHINE_REG_H_
|
||||
|
||||
struct reg {
|
||||
uint64_t ra; /* return address */
|
||||
uint64_t sp; /* stack pointer */
|
||||
uint64_t gp; /* global pointer */
|
||||
uint64_t tp; /* thread pointer */
|
||||
uint64_t t[7]; /* temporaries */
|
||||
uint64_t s[12]; /* saved registers */
|
||||
uint64_t a[8]; /* function arguments */
|
||||
uint64_t sepc; /* exception program counter */
|
||||
uint64_t sstatus; /* status register */
|
||||
};
|
||||
|
||||
struct fpreg {
|
||||
int dummy;
|
||||
};
|
||||
|
||||
struct dbreg {
|
||||
int dummy;
|
||||
};
|
||||
|
||||
#ifdef _KERNEL
|
||||
/*
|
||||
* XXX these interfaces are MI, so they should be declared in a MI place.
|
||||
*/
|
||||
int fill_regs(struct thread *, struct reg *);
|
||||
int set_regs(struct thread *, struct reg *);
|
||||
int fill_fpregs(struct thread *, struct fpreg *);
|
||||
int set_fpregs(struct thread *, struct fpreg *);
|
||||
int fill_dbregs(struct thread *, struct dbreg *);
|
||||
int set_dbregs(struct thread *, struct dbreg *);
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_REG_H_ */
|
1
sys/riscv/include/reloc.h
Normal file
1
sys/riscv/include/reloc.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
46
sys/riscv/include/resource.h
Normal file
46
sys/riscv/include/resource.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright 1998 Massachusetts Institute of Technology
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software and
|
||||
* its documentation for any purpose and without fee is hereby
|
||||
* granted, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies, that both the above
|
||||
* copyright notice and this permission notice appear in all
|
||||
* supporting documentation, and that the name of M.I.T. not be used
|
||||
* in advertising or publicity pertaining to distribution of the
|
||||
* software without specific, written prior permission. M.I.T. makes
|
||||
* no representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS
|
||||
* ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
|
||||
* SHALL M.I.T. 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_RESOURCE_H_
|
||||
#define _MACHINE_RESOURCE_H_ 1
|
||||
|
||||
/*
|
||||
* Definitions of resource types for Intel Architecture machines
|
||||
* with support for legacy ISA devices and drivers.
|
||||
*/
|
||||
|
||||
#define SYS_RES_IRQ 1 /* interrupt lines */
|
||||
#define SYS_RES_DRQ 2 /* isa dma lines */
|
||||
#define SYS_RES_MEMORY 3 /* i/o memory */
|
||||
#define SYS_RES_IOPORT 4 /* i/o ports */
|
||||
#define SYS_RES_GPIO 5 /* general purpose i/o */
|
||||
|
||||
#endif /* !_MACHINE_RESOURCE_H_ */
|
153
sys/riscv/include/riscvreg.h
Normal file
153
sys/riscv/include/riscvreg.h
Normal file
@ -0,0 +1,153 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_RISCVREG_H_
|
||||
#define _MACHINE_RISCVREG_H_
|
||||
|
||||
/* Machine mode requests */
|
||||
#define ECALL_MTIMECMP 0x1
|
||||
#define ECALL_CLEAR_PENDING 0x2
|
||||
#define ECALL_HTIF_CMD 0x3
|
||||
#define ECALL_HTIF_GET_ENTRY 0x4
|
||||
#define ECALL_MCPUID_GET 0x5
|
||||
#define ECALL_MIMPID_GET 0x6
|
||||
|
||||
#define EXCP_SHIFT 0
|
||||
#define EXCP_MASK (0xf << EXCP_SHIFT)
|
||||
#define EXCP_INSTR_ADDR_MISALIGNED 0
|
||||
#define EXCP_INSTR_ACCESS_FAULT 1
|
||||
#define EXCP_INSTR_ILLEGAL 2
|
||||
#define EXCP_INSTR_BREAKPOINT 3
|
||||
#define EXCP_RESERVED_0 4
|
||||
#define EXCP_LOAD_ACCESS_FAULT 5
|
||||
#define EXCP_AMO_ADDR_MISALIGNED 6
|
||||
#define EXCP_STORE_ACCESS_FAULT 7
|
||||
#define EXCP_ENV_CALL 8
|
||||
#define EXCP_RESERVED_1 9
|
||||
#define EXCP_INTR (1 << 31)
|
||||
#define EXCP_INTR_SOFTWARE 0
|
||||
#define EXCP_INTR_TIMER 1
|
||||
#define EXCP_INTR_HTIF 2
|
||||
|
||||
#define SSTATUS_IE (1 << 0)
|
||||
#define SSTATUS_PIE (1 << 3)
|
||||
#define SSTATUS_PS (1 << 4)
|
||||
|
||||
#define MSTATUS_MPRV (1 << 16)
|
||||
#define MSTATUS_PRV_SHIFT 1
|
||||
#define MSTATUS_PRV1_SHIFT 4
|
||||
#define MSTATUS_PRV2_SHIFT 7
|
||||
#define MSTATUS_PRV_MASK (0x3 << MSTATUS_PRV_SHIFT)
|
||||
#define MSTATUS_PRV_U 0 /* user */
|
||||
#define MSTATUS_PRV_S 1 /* supervisor */
|
||||
#define MSTATUS_PRV_H 2 /* hypervisor */
|
||||
#define MSTATUS_PRV_M 3 /* machine */
|
||||
|
||||
#define MSTATUS_VM_SHIFT 17
|
||||
#define MSTATUS_VM_MASK 0x1f
|
||||
#define MSTATUS_VM_MBARE 0
|
||||
#define MSTATUS_VM_MBB 1
|
||||
#define MSTATUS_VM_MBBID 2
|
||||
#define MSTATUS_VM_SV32 8
|
||||
#define MSTATUS_VM_SV39 9
|
||||
#define MSTATUS_VM_SV48 10
|
||||
|
||||
#define MIE_SSIE (1 << 1)
|
||||
#define MIE_HSIE (1 << 2)
|
||||
#define MIE_MSIE (1 << 3)
|
||||
#define MIE_STIE (1 << 5)
|
||||
#define MIE_HTIE (1 << 6)
|
||||
#define MIE_MTIE (1 << 7)
|
||||
|
||||
#define MIP_SSIP (1 << 1)
|
||||
#define MIP_HSIP (1 << 2)
|
||||
#define MIP_MSIP (1 << 3)
|
||||
#define MIP_STIP (1 << 5)
|
||||
#define MIP_HTIP (1 << 6)
|
||||
#define MIP_MTIP (1 << 7)
|
||||
|
||||
#define SR_IE (1 << 0)
|
||||
#define SR_IE1 (1 << 3)
|
||||
#define SR_IE2 (1 << 6)
|
||||
#define SR_IE3 (1 << 9)
|
||||
|
||||
#define SIE_SSIE (1 << 1)
|
||||
#define SIE_STIE (1 << 5)
|
||||
|
||||
/* Note: sip register is not yet implement in Spike simulator */
|
||||
#define SIP_STIP (1 << 5)
|
||||
|
||||
#define CSR_ZIMM(val) \
|
||||
(__builtin_constant_p(val) && ((u_long)(val) < 32))
|
||||
|
||||
#define csr_swap(csr, val) \
|
||||
({ if (CSR_ZIMM(val)) \
|
||||
__asm __volatile("csrrwi %0, " #csr ", %1" \
|
||||
: "=r" (val) : "i" (val)); \
|
||||
else \
|
||||
__asm __volatile("csrrw %0, " #csr ", %1" \
|
||||
: "=r" (val) : "r" (val)); \
|
||||
val; \
|
||||
})
|
||||
|
||||
#define csr_write(csr, val) \
|
||||
({ if (CSR_ZIMM(val)) \
|
||||
__asm __volatile("csrwi " #csr ", %0" :: "i" (val)); \
|
||||
else \
|
||||
__asm __volatile("csrw " #csr ", %0" :: "r" (val)); \
|
||||
})
|
||||
|
||||
#define csr_set(csr, val) \
|
||||
({ if (CSR_ZIMM(val)) \
|
||||
__asm __volatile("csrsi " #csr ", %0" :: "i" (val)); \
|
||||
else \
|
||||
__asm __volatile("csrs " #csr ", %0" :: "r" (val)); \
|
||||
})
|
||||
|
||||
#define csr_clear(csr, val) \
|
||||
({ if (CSR_ZIMM(val)) \
|
||||
__asm __volatile("csrci " #csr ", %0" :: "i" (val)); \
|
||||
else \
|
||||
__asm __volatile("csrc " #csr ", %0" :: "r" (val)); \
|
||||
})
|
||||
|
||||
#define csr_read(csr) \
|
||||
({ u_long val; \
|
||||
__asm __volatile("csrr %0, " #csr : "=r" (val)); \
|
||||
val; \
|
||||
})
|
||||
|
||||
#endif /* !_MACHINE_RISCVREG_H_ */
|
46
sys/riscv/include/runq.h
Normal file
46
sys/riscv/include/runq.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 Jake Burkholder <jake@FreeBSD.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_RUNQ_H_
|
||||
#define _MACHINE_RUNQ_H_
|
||||
|
||||
#define RQB_LEN (1) /* Number of priority status words. */
|
||||
#define RQB_L2BPW (6) /* Log2(sizeof(rqb_word_t) * NBBY)). */
|
||||
#define RQB_BPW (1<<RQB_L2BPW) /* Bits in an rqb_word_t. */
|
||||
|
||||
#define RQB_BIT(pri) (1ul << ((pri) & (RQB_BPW - 1)))
|
||||
#define RQB_WORD(pri) ((pri) >> RQB_L2BPW)
|
||||
|
||||
#define RQB_FFS(word) (ffsl(word) - 1)
|
||||
|
||||
/*
|
||||
* Type of run queue status word.
|
||||
*/
|
||||
typedef unsigned long rqb_word_t;
|
||||
|
||||
#endif
|
63
sys/riscv/include/setjmp.h
Normal file
63
sys/riscv/include/setjmp.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_SETJMP_H_
|
||||
#define _MACHINE_SETJMP_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#define _JBLEN 32 /* sp, ra, [f]s0-11, magic val, sigmask */
|
||||
#define _JB_SIGMASK 21
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
#define _JB_MAGIC__SETJMP 0xbe87fd8a2910af00
|
||||
#define _JB_MAGIC_SETJMP 0xbe87fd8a2910af01
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
/*
|
||||
* jmp_buf and sigjmp_buf are encapsulated in different structs to force
|
||||
* compile-time diagnostics for mismatches. The structs are the same
|
||||
* internally to avoid some run-time errors for mismatches.
|
||||
*/
|
||||
#if __BSD_VISIBLE || __POSIX_VISIBLE || __XSI_VISIBLE
|
||||
typedef struct _sigjmp_buf { long _sjb[_JBLEN + 1]; } sigjmp_buf[1];
|
||||
#endif
|
||||
|
||||
typedef struct _jmp_buf { long _jb[_JBLEN + 1]; } jmp_buf[1];
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* !_MACHINE_SETJMP_H_ */
|
51
sys/riscv/include/sf_buf.h
Normal file
51
sys/riscv/include/sf_buf.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*-
|
||||
* Copyright (c) 2003, 2005 Alan L. Cox <alc@cs.rice.edu>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_SF_BUF_H_
|
||||
#define _MACHINE_SF_BUF_H_
|
||||
|
||||
/*
|
||||
* On this machine, the only purpose for which sf_buf is used is to implement
|
||||
* an opaque pointer required by the machine-independent parts of the kernel.
|
||||
* That pointer references the vm_page that is "mapped" by the sf_buf. The
|
||||
* actual mapping is provided by the direct virtual-to-physical mapping.
|
||||
*/
|
||||
static inline vm_offset_t
|
||||
sf_buf_kva(struct sf_buf *sf)
|
||||
{
|
||||
|
||||
return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf)));
|
||||
}
|
||||
|
||||
static inline vm_page_t
|
||||
sf_buf_page(struct sf_buf *sf)
|
||||
{
|
||||
|
||||
return ((vm_page_t)sf);
|
||||
}
|
||||
#endif /* !_MACHINE_SF_BUF_H_ */
|
50
sys/riscv/include/signal.h
Normal file
50
sys/riscv/include/signal.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*-
|
||||
* Copyright (c) 1986, 1989, 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* @(#)signal.h 8.1 (Berkeley) 6/11/93
|
||||
* from: FreeBSD: src/sys/i386/include/signal.h,v 1.13 2000/11/09
|
||||
* from: FreeBSD: src/sys/sparc64/include/signal.h,v 1.6 2001/09/30 18:52:17
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_SIGNAL_H_
|
||||
#define _MACHINE_SIGNAL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
typedef long sig_atomic_t;
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
struct sigcontext {
|
||||
int _dummy;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_SIGNAL_H_ */
|
1
sys/riscv/include/smp.h
Normal file
1
sys/riscv/include/smp.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
79
sys/riscv/include/stdarg.h
Normal file
79
sys/riscv/include/stdarg.h
Normal file
@ -0,0 +1,79 @@
|
||||
/*-
|
||||
* Copyright (c) 2002 David E. O'Brien. All rights reserved.
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* @(#)stdarg.h 8.1 (Berkeley) 6/10/93
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_STDARG_H_
|
||||
#define _MACHINE_STDARG_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef _VA_LIST_DECLARED
|
||||
#define _VA_LIST_DECLARED
|
||||
typedef __va_list va_list;
|
||||
#endif
|
||||
|
||||
#ifdef __GNUCLIKE_BUILTIN_STDARG
|
||||
|
||||
#define va_start(ap, last) \
|
||||
__builtin_va_start((ap), (last))
|
||||
|
||||
#define va_arg(ap, type) \
|
||||
__builtin_va_arg((ap), type)
|
||||
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define va_copy(dest, src) \
|
||||
__builtin_va_copy((dest), (src))
|
||||
#endif
|
||||
|
||||
#define va_end(ap) \
|
||||
__builtin_va_end(ap)
|
||||
|
||||
#elif defined(lint)
|
||||
/* Provide a fake implementation for lint's benefit */
|
||||
#define __va_size(type) \
|
||||
(((sizeof(type) + sizeof(long) - 1) / sizeof(long)) * sizeof(long))
|
||||
#define va_start(ap, last) \
|
||||
((ap) = (va_list)&(last) + __va_size(last))
|
||||
#define va_copy(dst, src) \
|
||||
((dst) = (src))
|
||||
#define va_arg(ap, type) \
|
||||
(*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
|
||||
#define va_end(ap)
|
||||
|
||||
#else /* !__GNUCLIKE_BUILTIN_STDARG */
|
||||
|
||||
#error no support for your compiler
|
||||
|
||||
#endif /* __GNUCLIKE_BUILTIN_STDARG */
|
||||
|
||||
#endif /* !_MACHINE_STDARG_H_ */
|
47
sys/riscv/include/sysarch.h
Normal file
47
sys/riscv/include/sysarch.h
Normal file
@ -0,0 +1,47 @@
|
||||
/*-
|
||||
* Copyright (c) 1993 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from: FreeBSD: src/sys/i386/include/sysarch.h,v 1.14 2000/09/21
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Architecture specific syscalls (RISC-V)
|
||||
*/
|
||||
#ifndef _MACHINE_SYSARCH_H_
|
||||
#define _MACHINE_SYSARCH_H_
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
__BEGIN_DECLS
|
||||
int sysarch(int _number, void *_args);
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_MACHINE_SYSARCH_H_ */
|
1
sys/riscv/include/trap.h
Normal file
1
sys/riscv/include/trap.h
Normal file
@ -0,0 +1 @@
|
||||
/* $FreeBSD$ */
|
70
sys/riscv/include/ucontext.h
Normal file
70
sys/riscv/include/ucontext.h
Normal file
@ -0,0 +1,70 @@
|
||||
/*-
|
||||
* Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Portions of this software were developed by SRI International and the
|
||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||
* FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
|
||||
*
|
||||
* Portions of this software were developed by the University of Cambridge
|
||||
* Computer Laboratory as part of the CTSRD Project, with support from the
|
||||
* UK Higher Education Innovation Fund (HEIF).
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_UCONTEXT_H_
|
||||
#define _MACHINE_UCONTEXT_H_
|
||||
|
||||
struct gpregs {
|
||||
__register_t gp_ra;
|
||||
__register_t gp_sp;
|
||||
__register_t gp_gp;
|
||||
__register_t gp_tp;
|
||||
__register_t gp_t[7];
|
||||
__register_t gp_s[12];
|
||||
__register_t gp_a[8];
|
||||
__register_t gp_sepc;
|
||||
__register_t gp_sstatus;
|
||||
};
|
||||
|
||||
struct fpregs {
|
||||
__uint128_t fp_x[32];
|
||||
__uint64_t fp_fcsr;
|
||||
int fp_flags;
|
||||
int pad;
|
||||
};
|
||||
|
||||
struct __mcontext {
|
||||
struct gpregs mc_gpregs;
|
||||
struct fpregs mc_fpregs;
|
||||
int mc_flags;
|
||||
#define _MC_FP_VALID 0x1 /* Set when mc_fpregs has valid data */
|
||||
int mc_pad;
|
||||
__uint64_t mc_spare[8]; /* Space for expansion */
|
||||
};
|
||||
|
||||
typedef struct __mcontext mcontext_t;
|
||||
|
||||
#endif /* !_MACHINE_UCONTEXT_H_ */
|
34
sys/riscv/include/vdso.h
Normal file
34
sys/riscv/include/vdso.h
Normal file
@ -0,0 +1,34 @@
|
||||
/*-
|
||||
* Copyright 2012 Konstantin Belousov <kib@FreeBSD.ORG>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR ``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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_VDSO_H_
|
||||
#define _MACHINE_VDSO_H_
|
||||
|
||||
#define VDSO_TIMEHANDS_MD \
|
||||
uint32_t th_res[8];
|
||||
|
||||
#endif /* !_MACHINE_VDSO_H_ */
|
39
sys/riscv/include/vm.h
Normal file
39
sys/riscv/include/vm.h
Normal file
@ -0,0 +1,39 @@
|
||||
/*-
|
||||
* Copyright (c) 2009 Alan L. Cox <alc@cs.rice.edu>
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 AUTHOR 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 AUTHOR 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_VM_H_
|
||||
#define _MACHINE_VM_H_
|
||||
|
||||
/* Memory attribute configuration. */
|
||||
#define VM_MEMATTR_DEVICE 0
|
||||
#define VM_MEMATTR_UNCACHEABLE 1
|
||||
#define VM_MEMATTR_WRITE_BACK 2
|
||||
|
||||
#define VM_MEMATTR_DEFAULT VM_MEMATTR_WRITE_BACK
|
||||
|
||||
#endif /* !_MACHINE_VM_H_ */
|
239
sys/riscv/include/vmparam.h
Normal file
239
sys/riscv/include/vmparam.h
Normal file
@ -0,0 +1,239 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
* Copyright (c) 1994 John S. Dyson
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* William Jolitz.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* from: @(#)vmparam.h 5.9 (Berkeley) 5/12/91
|
||||
* from: FreeBSD: src/sys/i386/include/vmparam.h,v 1.33 2000/03/30
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_VMPARAM_H_
|
||||
#define _MACHINE_VMPARAM_H_
|
||||
|
||||
/*
|
||||
* Virtual memory related constants, all in bytes
|
||||
*/
|
||||
#ifndef MAXTSIZ
|
||||
#define MAXTSIZ (32*1024*1024) /* max text size */
|
||||
#endif
|
||||
#ifndef DFLDSIZ
|
||||
#define DFLDSIZ (128*1024*1024) /* initial data size limit */
|
||||
#endif
|
||||
#ifndef MAXDSIZ
|
||||
#define MAXDSIZ (128*1024*1024) /* max data size */
|
||||
#endif
|
||||
#ifndef DFLSSIZ
|
||||
#define DFLSSIZ (2*1024*1024) /* initial stack size limit */
|
||||
#endif
|
||||
#ifndef MAXSSIZ
|
||||
#define MAXSSIZ (8*1024*1024) /* max stack size */
|
||||
#endif
|
||||
#ifndef SGROWSIZ
|
||||
#define SGROWSIZ (128*1024) /* amount to grow stack */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The physical address space is sparsely populated.
|
||||
*/
|
||||
#define VM_PHYSSEG_SPARSE
|
||||
|
||||
/*
|
||||
* The number of PHYSSEG entries must be one greater than the number
|
||||
* of phys_avail entries because the phys_avail entry that spans the
|
||||
* largest physical address that is accessible by ISA DMA is split
|
||||
* into two PHYSSEG entries.
|
||||
*/
|
||||
#define VM_PHYSSEG_MAX 64
|
||||
|
||||
/*
|
||||
* Create two free page pools: VM_FREEPOOL_DEFAULT is the default pool
|
||||
* from which physical pages are allocated and VM_FREEPOOL_DIRECT is
|
||||
* the pool from which physical pages for small UMA objects are
|
||||
* allocated.
|
||||
*/
|
||||
#define VM_NFREEPOOL 2
|
||||
#define VM_FREEPOOL_DEFAULT 0
|
||||
#define VM_FREEPOOL_DIRECT 1
|
||||
|
||||
/*
|
||||
* Create two free page lists: VM_FREELIST_DEFAULT is for physical
|
||||
* pages that are above the largest physical address that is
|
||||
* accessible by ISA DMA and VM_FREELIST_ISADMA is for physical pages
|
||||
* that are below that address.
|
||||
*/
|
||||
#define VM_NFREELIST 2
|
||||
#define VM_FREELIST_DEFAULT 0
|
||||
#define VM_FREELIST_ISADMA 1
|
||||
|
||||
/*
|
||||
* An allocation size of 16MB is supported in order to optimize the
|
||||
* use of the direct map by UMA. Specifically, a cache line contains
|
||||
* at most four TTEs, collectively mapping 16MB of physical memory.
|
||||
* By reducing the number of distinct 16MB "pages" that are used by UMA,
|
||||
* the physical memory allocator reduces the likelihood of both 4MB
|
||||
* page TLB misses and cache misses caused by 4MB page TLB misses.
|
||||
*/
|
||||
#define VM_NFREEORDER 12
|
||||
|
||||
/*
|
||||
* Enable superpage reservations: 1 level.
|
||||
*/
|
||||
#ifndef VM_NRESERVLEVEL
|
||||
#define VM_NRESERVLEVEL 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Level 0 reservations consist of 512 pages.
|
||||
*/
|
||||
#ifndef VM_LEVEL_0_ORDER
|
||||
#define VM_LEVEL_0_ORDER 9
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Address space layout.
|
||||
*
|
||||
* RISC-V implements up to a 48 bit virtual address space. The address space is
|
||||
* split into 2 regions at each end of the 64 bit address space, with an
|
||||
* out of range "hole" in the middle.
|
||||
*
|
||||
* We limit the size of the two spaces to 39 bits each.
|
||||
*
|
||||
* Upper region: 0xffffffffffffffff
|
||||
* 0xffffffffc0000000
|
||||
*
|
||||
* Hole: 0xffffffffbfffffff
|
||||
* 0x0000000080000000
|
||||
*
|
||||
* Lower region: 0x000000007fffffff
|
||||
* 0x0000000000000000
|
||||
*
|
||||
* We use the upper region for the kernel, and the lower region for userland.
|
||||
*
|
||||
* We define some interesting address constants:
|
||||
*
|
||||
* VM_MIN_ADDRESS and VM_MAX_ADDRESS define the start and end of the entire
|
||||
* 64 bit address space, mostly just for convenience.
|
||||
*
|
||||
* VM_MIN_KERNEL_ADDRESS and VM_MAX_KERNEL_ADDRESS define the start and end of
|
||||
* mappable kernel virtual address space.
|
||||
*
|
||||
* VM_MIN_USER_ADDRESS and VM_MAX_USER_ADDRESS define the start and end of the
|
||||
* user address space.
|
||||
*/
|
||||
#define VM_MIN_ADDRESS (0x0000000000000000UL)
|
||||
#define VM_MAX_ADDRESS (0xffffffffffffffffUL)
|
||||
|
||||
/* 256 MiB of kernel addresses */
|
||||
#define VM_MIN_KERNEL_ADDRESS (0xffffffffc0000000UL)
|
||||
#define VM_MAX_KERNEL_ADDRESS (0xffffffffcfffffffUL)
|
||||
|
||||
/* Direct Map for 512 MiB of PA: 0x0 - 0x1fffffff */
|
||||
#define DMAP_MIN_ADDRESS (0xffffffffd0000000UL)
|
||||
#define DMAP_MAX_ADDRESS (0xffffffffefffffffUL)
|
||||
|
||||
#define DMAP_MIN_PHYSADDR (0x0000000000000000UL)
|
||||
#define DMAP_MAX_PHYSADDR (DMAP_MAX_ADDRESS - DMAP_MIN_ADDRESS)
|
||||
|
||||
/* True if pa is in the dmap range */
|
||||
#define PHYS_IN_DMAP(pa) ((pa) <= DMAP_MAX_PHYSADDR)
|
||||
/* True if va is in the dmap range */
|
||||
#define VIRT_IN_DMAP(va) ((va) >= DMAP_MIN_ADDRESS && \
|
||||
(va) <= DMAP_MAX_ADDRESS)
|
||||
|
||||
#define PHYS_TO_DMAP(pa) \
|
||||
({ \
|
||||
KASSERT(PHYS_IN_DMAP(pa), \
|
||||
("%s: PA out of range, PA: 0x%lx", __func__, \
|
||||
(vm_paddr_t)(pa))); \
|
||||
(pa) | DMAP_MIN_ADDRESS; \
|
||||
})
|
||||
|
||||
#define DMAP_TO_PHYS(va) \
|
||||
({ \
|
||||
KASSERT(VIRT_IN_DMAP(va), \
|
||||
("%s: VA out of range, VA: 0x%lx", __func__, \
|
||||
(vm_offset_t)(va))); \
|
||||
(va) & ~DMAP_MIN_ADDRESS; \
|
||||
})
|
||||
|
||||
#define VM_MIN_USER_ADDRESS (0x0000000000000000UL)
|
||||
#define VM_MAX_USER_ADDRESS (0x0000000080000000UL)
|
||||
|
||||
#define VM_MINUSER_ADDRESS (VM_MIN_USER_ADDRESS)
|
||||
#define VM_MAXUSER_ADDRESS (VM_MAX_USER_ADDRESS)
|
||||
|
||||
#define KERNBASE (VM_MIN_KERNEL_ADDRESS)
|
||||
#define USRSTACK (VM_MAX_USER_ADDRESS)
|
||||
#define KERNENTRY (0x200)
|
||||
|
||||
/*
|
||||
* How many physical pages per kmem arena virtual page.
|
||||
*/
|
||||
#ifndef VM_KMEM_SIZE_SCALE
|
||||
#define VM_KMEM_SIZE_SCALE (3)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Optional floor (in bytes) on the size of the kmem arena.
|
||||
*/
|
||||
#ifndef VM_KMEM_SIZE_MIN
|
||||
#define VM_KMEM_SIZE_MIN (16 * 1024 * 1024)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Optional ceiling (in bytes) on the size of the kmem arena: 60% of the
|
||||
* kernel map.
|
||||
*/
|
||||
#ifndef VM_KMEM_SIZE_MAX
|
||||
#define VM_KMEM_SIZE_MAX ((VM_MAX_KERNEL_ADDRESS - \
|
||||
VM_MIN_KERNEL_ADDRESS + 1) * 3 / 5)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Initial pagein size of beginning of executable file.
|
||||
*/
|
||||
#ifndef VM_INITIAL_PAGEIN
|
||||
#define VM_INITIAL_PAGEIN 16
|
||||
#endif
|
||||
|
||||
/*
|
||||
* RISCVTODO
|
||||
* #define UMA_MD_SMALL_ALLOC
|
||||
*/
|
||||
|
||||
extern u_int tsb_kernel_ldd_phys;
|
||||
extern vm_offset_t vm_max_kernel_address;
|
||||
extern vm_offset_t init_pt_va;
|
||||
|
||||
#define ZERO_REGION_SIZE (64 * 1024) /* 64KB */
|
||||
|
||||
#endif /* !_MACHINE_VMPARAM_H_ */
|
Loading…
Reference in New Issue
Block a user