mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add FreeBSD support to OpenZFS
Add the FreeBSD platform code to the OpenZFS repository. As of this commit the source can be compiled and tested on FreeBSD 11 and 12. Subsequent commits are now required to compile on FreeBSD and Linux. Additionally, they must pass the ZFS Test Suite on FreeBSD which is being run by the CI. As of this commit 1230 tests pass on FreeBSD and there are no unexpected failures. Reviewed-by: Sean Eric Fagan <sef@ixsystems.com> Reviewed-by: Jorgen Lundman <lundman@lundman.net> Reviewed-by: Richard Laager <rlaager@wiktel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Co-authored-by: Ryan Moeller <ryan@iXsystems.com> Signed-off-by: Matt Macy <mmacy@FreeBSD.org> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #898 Closes #8987
This commit is contained in:
		
							parent
							
								
									75c62019f3
								
							
						
					
					
						commit
						9f0a21e641
					
				
							
								
								
									
										5
									
								
								.github/suppressions.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/suppressions.txt
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +1,6 @@ | |||||||
| preprocessorErrorDirective:./module/zfs/vdev_raidz_math_avx512f.c:243 | preprocessorErrorDirective:./module/zfs/vdev_raidz_math_avx512f.c:243 | ||||||
| preprocessorErrorDirective:./module/zfs/vdev_raidz_math_sse2.c:266 | preprocessorErrorDirective:./module/zfs/vdev_raidz_math_sse2.c:266 | ||||||
| 
 | uninitvar:module/os/freebsd/zfs/vdev_geom.c | ||||||
|  | uninitvar:module/os/freebsd/zfs/zfs_vfsops.c | ||||||
|  | uninitvar:module/os/freebsd/spl/spl_zone.c | ||||||
|  | uninitvar:lib/libzutil/os/freebsd/zutil_import_os.c | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -62,4 +62,9 @@ cscope.* | |||||||
| *.patch | *.patch | ||||||
| *.orig | *.orig | ||||||
| *.log | *.log | ||||||
|  | *.tmp | ||||||
| venv | venv | ||||||
|  | 
 | ||||||
|  | *.so | ||||||
|  | *.so.debug | ||||||
|  | *.so.full | ||||||
|  | |||||||
| @ -104,8 +104,9 @@ commitcheck: | |||||||
| 	fi | 	fi | ||||||
| 
 | 
 | ||||||
| cstyle: | cstyle: | ||||||
| 	@find ${top_srcdir} -name build -prune -o -name '*.[hc]' \
 | 	@find ${top_srcdir} -name build -prune -o -type f -name '*.[hc]' \
 | ||||||
| 		! -name 'zfs_config.*' ! -name '*.mod.c' -type f \
 | 		! -name 'zfs_config.*' ! -name '*.mod.c' \
 | ||||||
|  | 		! -name 'opt_global.h' ! -name '*_if*.h' \
 | ||||||
| 		-exec ${top_srcdir}/scripts/cstyle.pl -cpP {} \+ | 		-exec ${top_srcdir}/scripts/cstyle.pl -cpP {} \+ | ||||||
| 
 | 
 | ||||||
| filter_executable = -exec test -x '{}' \; -print | filter_executable = -exec test -x '{}' \; -print | ||||||
|  | |||||||
| @ -19,8 +19,6 @@ This repository contains the code for running OpenZFS on Linux and FreeBSD. | |||||||
| Full documentation for installing OpenZFS on your favorite Linux distribution can | Full documentation for installing OpenZFS on your favorite Linux distribution can | ||||||
| be found at the [ZoL Site](https://zfsonlinux.org/). | be found at the [ZoL Site](https://zfsonlinux.org/). | ||||||
| 
 | 
 | ||||||
| FreeBSD support is a work in progress.  See the [PR](https://github.com/openzfs/zfs/pull/8987). |  | ||||||
| 
 |  | ||||||
| # Contribute & Develop | # Contribute & Develop | ||||||
| 
 | 
 | ||||||
| We have a separate document with [contribution guidelines](./.github/CONTRIBUTING.md). | We have a separate document with [contribution guidelines](./.github/CONTRIBUTING.md). | ||||||
| @ -34,3 +32,4 @@ For more details see the NOTICE, LICENSE and COPYRIGHT files; `UCRL-CODE-235197` | |||||||
| 
 | 
 | ||||||
| # Supported Kernels | # Supported Kernels | ||||||
|   * The `META` file contains the officially recognized supported Linux kernel versions. |   * The `META` file contains the officially recognized supported Linux kernel versions. | ||||||
|  |   * Supported FreeBSD versions are 12-STABLE and 13-CURRENT. | ||||||
|  | |||||||
| @ -1,10 +1,10 @@ | |||||||
| SUBDIRS  = zfs zpool zdb zhack zinject zstream zstreamdump ztest | SUBDIRS  = zfs zpool zdb zhack zinject zstream zstreamdump ztest | ||||||
| SUBDIRS += fsck_zfs vdev_id raidz_test zgenhostid | SUBDIRS += fsck_zfs vdev_id raidz_test | ||||||
| 
 | 
 | ||||||
| if USING_PYTHON | if USING_PYTHON | ||||||
| SUBDIRS += arcstat arc_summary dbufstat | SUBDIRS += arcstat arc_summary dbufstat | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| if BUILD_LINUX | if BUILD_LINUX | ||||||
| SUBDIRS += mount_zfs zed zvol_id zvol_wait | SUBDIRS += mount_zfs zed zgenhostid zvol_id zvol_wait | ||||||
| endif | endif | ||||||
|  | |||||||
| @ -11,6 +11,10 @@ zpool_SOURCES = \ | |||||||
| 	zpool_util.h \
 | 	zpool_util.h \
 | ||||||
| 	zpool_vdev.c | 	zpool_vdev.c | ||||||
| 
 | 
 | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | zpool_SOURCES += os/freebsd/zpool_vdev_os.c | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| if BUILD_LINUX | if BUILD_LINUX | ||||||
| zpool_SOURCES += os/linux/zpool_vdev_os.c | zpool_SOURCES += os/linux/zpool_vdev_os.c | ||||||
| endif | endif | ||||||
| @ -20,6 +24,9 @@ zpool_LDADD = \ | |||||||
| 	$(top_builddir)/lib/libuutil/libuutil.la \
 | 	$(top_builddir)/lib/libuutil/libuutil.la \
 | ||||||
| 	$(top_builddir)/lib/libzfs/libzfs.la | 	$(top_builddir)/lib/libzfs/libzfs.la | ||||||
| 
 | 
 | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | zpool_LDADD += -L/usr/local/lib -lintl -lgeom | ||||||
|  | endif | ||||||
| zpool_LDADD += -lm $(LIBBLKID) | zpool_LDADD += -lm $(LIBBLKID) | ||||||
| 
 | 
 | ||||||
| zpoolconfdir = $(sysconfdir)/zfs/zpool.d | zpoolconfdir = $(sysconfdir)/zfs/zpool.d | ||||||
|  | |||||||
							
								
								
									
										113
									
								
								cmd/zpool/os/freebsd/zpool_vdev_os.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								cmd/zpool/os/freebsd/zpool_vdev_os.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. | ||||||
|  |  * Copyright (c) 2013, 2018 by Delphix. All rights reserved. | ||||||
|  |  * Copyright (c) 2016, 2017 Intel Corporation. | ||||||
|  |  * Copyright 2016 Igor Kozhukhov <ikozhukhov@gmail.com>. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Functions to convert between a list of vdevs and an nvlist representing the | ||||||
|  |  * configuration.  Each entry in the list can be one of: | ||||||
|  |  * | ||||||
|  |  * 	Device vdevs | ||||||
|  |  * 		disk=(path=..., devid=...) | ||||||
|  |  * 		file=(path=...) | ||||||
|  |  * | ||||||
|  |  * 	Group vdevs | ||||||
|  |  * 		raidz[1|2]=(...) | ||||||
|  |  * 		mirror=(...) | ||||||
|  |  * | ||||||
|  |  * 	Hot spares | ||||||
|  |  * | ||||||
|  |  * While the underlying implementation supports it, group vdevs cannot contain | ||||||
|  |  * other group vdevs.  All userland verification of devices is contained within | ||||||
|  |  * this file.  If successful, the nvlist returned can be passed directly to the | ||||||
|  |  * kernel; we've done as much verification as possible in userland. | ||||||
|  |  * | ||||||
|  |  * Hot spares are a special case, and passed down as an array of disk vdevs, at | ||||||
|  |  * the same level as the root of the vdev tree. | ||||||
|  |  * | ||||||
|  |  * The only function exported by this file is 'make_root_vdev'.  The | ||||||
|  |  * function performs several passes: | ||||||
|  |  * | ||||||
|  |  * 	1. Construct the vdev specification.  Performs syntax validation and | ||||||
|  |  *         makes sure each device is valid. | ||||||
|  |  * 	2. Check for devices in use.  Using libdiskmgt, makes sure that no | ||||||
|  |  *         devices are also in use.  Some can be overridden using the 'force' | ||||||
|  |  *         flag, others cannot. | ||||||
|  |  * 	3. Check for replication errors if the 'force' flag is not specified. | ||||||
|  |  *         validates that the replication level is consistent across the | ||||||
|  |  *         entire pool. | ||||||
|  |  * 	4. Call libzfs to label any whole disks with an EFI label. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <assert.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <libintl.h> | ||||||
|  | #include <libnvpair.h> | ||||||
|  | #include <libzutil.h> | ||||||
|  | #include <limits.h> | ||||||
|  | #include <sys/spa.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <paths.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <sys/disk.h> | ||||||
|  | #include <sys/mntent.h> | ||||||
|  | #include <libgeom.h> | ||||||
|  | 
 | ||||||
|  | #include "zpool_util.h" | ||||||
|  | #include <sys/zfs_context.h> | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | check_device(const char *name, boolean_t force, boolean_t isspare, | ||||||
|  |     boolean_t iswholedisk) | ||||||
|  | { | ||||||
|  | 	char path[MAXPATHLEN]; | ||||||
|  | 
 | ||||||
|  | 	if (strncmp(name, _PATH_DEV, sizeof (_PATH_DEV) - 1) != 0) | ||||||
|  | 		snprintf(path, sizeof (path), "%s%s", _PATH_DEV, name); | ||||||
|  | 	else | ||||||
|  | 		strlcpy(path, name, sizeof (path)); | ||||||
|  | 
 | ||||||
|  | 	return (check_file(path, force, isspare)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | boolean_t | ||||||
|  | check_sector_size_database(char *path, int *sector_size) | ||||||
|  | { | ||||||
|  | 	return (0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | zpool_vdev_enable_file(struct stat64 *statbuf, boolean_t *wholedisk) | ||||||
|  | { | ||||||
|  | 	if (S_ISCHR(statbuf->st_mode)) { | ||||||
|  | 		statbuf->st_mode &= ~S_IFCHR; | ||||||
|  | 		statbuf->st_mode |= S_IFBLK; | ||||||
|  | 		*wholedisk = B_FALSE; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -941,6 +941,10 @@ make_disks(zpool_handle_t *zhp, nvlist_t *nv) | |||||||
| 		if (fd == -1) { | 		if (fd == -1) { | ||||||
| 			if (errno == EBUSY) | 			if (errno == EBUSY) | ||||||
| 				is_exclusive = 1; | 				is_exclusive = 1; | ||||||
|  | #ifdef __FreeBSD__ | ||||||
|  | 			if (errno == EPERM) | ||||||
|  | 				is_exclusive = 1; | ||||||
|  | #endif | ||||||
| 		} else { | 		} else { | ||||||
| 			(void) close(fd); | 			(void) close(fd); | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -14,26 +14,48 @@ DEFAULT_INCLUDES += \ | |||||||
| 	-I$(top_srcdir)/lib/libspl/include/os/linux | 	-I$(top_srcdir)/lib/libspl/include/os/linux | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | DEFAULT_INCLUDES += \ | ||||||
|  | 	-I$(top_srcdir)/lib/libspl/include/os/freebsd | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| AM_LIBTOOLFLAGS = --silent | AM_LIBTOOLFLAGS = --silent | ||||||
| 
 | 
 | ||||||
| AM_CFLAGS  = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing | AM_CFLAGS  = -std=gnu99 -Wall -Wstrict-prototypes -fno-strict-aliasing | ||||||
| AM_CFLAGS += $(NO_OMIT_FRAME_POINTER) | AM_CFLAGS += $(NO_OMIT_FRAME_POINTER) | ||||||
| AM_CFLAGS += $(DEBUG_CFLAGS) | AM_CFLAGS += $(DEBUG_CFLAGS) | ||||||
| AM_CFLAGS += $(ASAN_CFLAGS) | AM_CFLAGS += $(ASAN_CFLAGS) | ||||||
| AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) | AM_CFLAGS += $(CODE_COVERAGE_CFLAGS) $(NO_FORMAT_ZERO_LENGTH) | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | AM_CFLAGS += -fPIC -Werror -Wno-unknown-pragmas -Wno-enum-conversion | ||||||
|  | AM_CFLAGS += -include $(top_srcdir)/include/os/freebsd/spl/sys/ccompile.h | ||||||
|  | AM_CFLAGS += -I/usr/include -I/usr/local/include | ||||||
|  | AM_CFLAGS += -D_MACHINE_ENDIAN_H_ | ||||||
|  | endif | ||||||
| 
 | 
 | ||||||
| AM_CPPFLAGS  = -D_GNU_SOURCE | AM_CPPFLAGS  = -D_GNU_SOURCE | ||||||
| AM_CPPFLAGS += -D_REENTRANT | AM_CPPFLAGS += -D_REENTRANT | ||||||
| AM_CPPFLAGS += -D_FILE_OFFSET_BITS=64 | AM_CPPFLAGS += -D_FILE_OFFSET_BITS=64 | ||||||
| AM_CPPFLAGS += -D_LARGEFILE64_SOURCE | AM_CPPFLAGS += -D_LARGEFILE64_SOURCE | ||||||
| AM_CPPFLAGS += -DHAVE_LARGE_STACKS=1 | AM_CPPFLAGS += -DHAVE_LARGE_STACKS=1 | ||||||
| AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\" |  | ||||||
| AM_CPPFLAGS += -DLIBEXECDIR=\"$(libexecdir)\" | AM_CPPFLAGS += -DLIBEXECDIR=\"$(libexecdir)\" | ||||||
| AM_CPPFLAGS += -DRUNSTATEDIR=\"$(runstatedir)\" | AM_CPPFLAGS += -DRUNSTATEDIR=\"$(runstatedir)\" | ||||||
| AM_CPPFLAGS += -DSBINDIR=\"$(sbindir)\" | AM_CPPFLAGS += -DSBINDIR=\"$(sbindir)\" | ||||||
| AM_CPPFLAGS += -DSYSCONFDIR=\"$(sysconfdir)\" | AM_CPPFLAGS += -DSYSCONFDIR=\"$(sysconfdir)\" | ||||||
| AM_CPPFLAGS += $(DEBUG_CPPFLAGS) | AM_CPPFLAGS += $(DEBUG_CPPFLAGS) | ||||||
| AM_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS) | AM_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS) | ||||||
|  | if BUILD_LINUX | ||||||
|  | AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-linux-user\" | ||||||
|  | endif | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | AM_CPPFLAGS += -DTEXT_DOMAIN=\"zfs-freebsd-user\" | ||||||
|  | endif | ||||||
| 
 | 
 | ||||||
| AM_LDFLAGS  = $(DEBUG_LDFLAGS) | AM_LDFLAGS  = $(DEBUG_LDFLAGS) | ||||||
| AM_LDFLAGS += $(ASAN_LDFLAGS) | AM_LDFLAGS += $(ASAN_LDFLAGS) | ||||||
|  | 
 | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | AM_LDFLAGS += -fstack-protector-strong -shared | ||||||
|  | AM_LDFLAGS += -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel | ||||||
|  | AM_LDFLAGS += -lm | ||||||
|  | endif | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [ | |||||||
| 	i?86) | 	i?86) | ||||||
| 		TARGET_CPU=i386 | 		TARGET_CPU=i386 | ||||||
| 		;; | 		;; | ||||||
| 	x86_64) | 	amd64|x86_64) | ||||||
| 		TARGET_CPU=x86_64 | 		TARGET_CPU=x86_64 | ||||||
| 		;; | 		;; | ||||||
| 	powerpc*) | 	powerpc*) | ||||||
|  | |||||||
| @ -87,6 +87,27 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION], [ | |||||||
| 	AC_SUBST([NO_FORMAT_TRUNCATION]) | 	AC_SUBST([NO_FORMAT_TRUNCATION]) | ||||||
| ]) | ]) | ||||||
| 
 | 
 | ||||||
|  | dnl # | ||||||
|  | dnl # Check if gcc supports -Wno-format-truncation option. | ||||||
|  | dnl # | ||||||
|  | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH], [ | ||||||
|  | 	AC_MSG_CHECKING([whether $CC supports -Wno-format-zero-length]) | ||||||
|  | 
 | ||||||
|  | 	saved_flags="$CFLAGS" | ||||||
|  | 	CFLAGS="$CFLAGS -Werror -Wno-format-zero-length" | ||||||
|  | 
 | ||||||
|  | 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | ||||||
|  | 		NO_FORMAT_ZERO_LENGTH=-Wno-format-zero-length | ||||||
|  | 		AC_MSG_RESULT([yes]) | ||||||
|  | 	], [ | ||||||
|  | 		NO_FORMAT_ZERO_LENGTH= | ||||||
|  | 		AC_MSG_RESULT([no]) | ||||||
|  | 	]) | ||||||
|  | 
 | ||||||
|  | 	CFLAGS="$saved_flags" | ||||||
|  | 	AC_SUBST([NO_FORMAT_ZERO_LENGTH]) | ||||||
|  | ]) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| dnl # | dnl # | ||||||
| dnl # Check if gcc supports -Wno-bool-compare option. | dnl # Check if gcc supports -Wno-bool-compare option. | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ dnl # | |||||||
| dnl # Default ZFS kernel configuration | dnl # Default ZFS kernel configuration | ||||||
| dnl # | dnl # | ||||||
| AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ | AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ | ||||||
|  | 	AM_COND_IF([BUILD_LINUX], [ | ||||||
| 		dnl # Setup the kernel build environment. | 		dnl # Setup the kernel build environment. | ||||||
| 		ZFS_AC_KERNEL | 		ZFS_AC_KERNEL | ||||||
| 		ZFS_AC_QAT | 		ZFS_AC_QAT | ||||||
| @ -26,6 +27,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ | |||||||
| 
 | 
 | ||||||
| 		AC_SUBST(KERNEL_MAKE) | 		AC_SUBST(KERNEL_MAKE) | ||||||
| 	]) | 	]) | ||||||
|  | ]) | ||||||
| 
 | 
 | ||||||
| dnl # | dnl # | ||||||
| dnl # Generate and compile all of the kernel API test cases to determine | dnl # Generate and compile all of the kernel API test cases to determine | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ dnl # Checks if host toolchain supports SIMD instructions | |||||||
| dnl # | dnl # | ||||||
| AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [ | AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD], [ | ||||||
| 	case "$host_cpu" in | 	case "$host_cpu" in | ||||||
| 		x86_64 | x86 | i686) | 		amd64 | x86_64 | x86 | i686) | ||||||
| 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE | 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE | ||||||
| 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2 | 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE2 | ||||||
| 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3 | 			ZFS_AC_CONFIG_TOOLCHAIN_CAN_BUILD_SSE3 | ||||||
|  | |||||||
| @ -4,14 +4,16 @@ dnl # | |||||||
| AC_DEFUN([ZFS_AC_CONFIG_USER], [ | AC_DEFUN([ZFS_AC_CONFIG_USER], [ | ||||||
| 	ZFS_AC_CONFIG_USER_GETTEXT | 	ZFS_AC_CONFIG_USER_GETTEXT | ||||||
| 	ZFS_AC_CONFIG_USER_MOUNT_HELPER | 	ZFS_AC_CONFIG_USER_MOUNT_HELPER | ||||||
| 	ZFS_AC_CONFIG_USER_UDEV |  | ||||||
| 	ZFS_AC_CONFIG_USER_SYSTEMD |  | ||||||
| 	ZFS_AC_CONFIG_USER_SYSVINIT | 	ZFS_AC_CONFIG_USER_SYSVINIT | ||||||
| 	ZFS_AC_CONFIG_USER_DRACUT | 	ZFS_AC_CONFIG_USER_DRACUT | ||||||
| 	ZFS_AC_CONFIG_USER_ZLIB | 	ZFS_AC_CONFIG_USER_ZLIB | ||||||
|  | 	AM_COND_IF([BUILD_LINUX], [ | ||||||
|  | 		ZFS_AC_CONFIG_USER_UDEV | ||||||
|  | 		ZFS_AC_CONFIG_USER_SYSTEMD | ||||||
| 		ZFS_AC_CONFIG_USER_LIBUUID | 		ZFS_AC_CONFIG_USER_LIBUUID | ||||||
| 	ZFS_AC_CONFIG_USER_LIBTIRPC |  | ||||||
| 		ZFS_AC_CONFIG_USER_LIBBLKID | 		ZFS_AC_CONFIG_USER_LIBBLKID | ||||||
|  | 	]) | ||||||
|  | 	ZFS_AC_CONFIG_USER_LIBTIRPC | ||||||
| 	ZFS_AC_CONFIG_USER_LIBUDEV | 	ZFS_AC_CONFIG_USER_LIBUDEV | ||||||
| 	ZFS_AC_CONFIG_USER_LIBSSL | 	ZFS_AC_CONFIG_USER_LIBSSL | ||||||
| 	ZFS_AC_CONFIG_USER_LIBAIO | 	ZFS_AC_CONFIG_USER_LIBAIO | ||||||
| @ -19,10 +21,9 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [ | |||||||
| 	ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS | 	ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS | ||||||
| 	ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV | 	ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV | ||||||
| 	ZFS_AC_CONFIG_USER_ZFSEXEC | 	ZFS_AC_CONFIG_USER_ZFSEXEC | ||||||
| 
 |  | ||||||
| 	ZFS_AC_TEST_FRAMEWORK | 	ZFS_AC_TEST_FRAMEWORK | ||||||
| 
 | 
 | ||||||
| 	AC_CHECK_FUNCS([mlockall strlcat strlcpy]) | 	AC_CHECK_FUNCS([issetugid mlockall strlcat strlcpy]) | ||||||
| ]) | ]) | ||||||
| 
 | 
 | ||||||
| dnl # | dnl # | ||||||
|  | |||||||
| @ -157,6 +157,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ | |||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE | 	ZFS_AC_CONFIG_ALWAYS_CC_NO_BOOL_COMPARE | ||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN | 	ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN | ||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION | 	ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION | ||||||
|  | 	ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH | ||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER | 	ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER | ||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA | 	ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA | ||||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_ASAN | 	ZFS_AC_CONFIG_ALWAYS_CC_ASAN | ||||||
| @ -173,13 +174,6 @@ AC_DEFUN([ZFS_AC_CONFIG], [ | |||||||
|         dnl # Remove the previous build test directory. |         dnl # Remove the previous build test directory. | ||||||
|         rm -Rf build |         rm -Rf build | ||||||
| 
 | 
 | ||||||
| 	AC_ARG_VAR([TEST_JOBS], |  | ||||||
| 	    [simultaneous jobs during configure (defaults to $(nproc))]) |  | ||||||
| 	if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then |  | ||||||
| 		TEST_JOBS=$(nproc) |  | ||||||
| 	fi |  | ||||||
| 	AC_SUBST(TEST_JOBS) |  | ||||||
| 
 |  | ||||||
| 	ZFS_CONFIG=all | 	ZFS_CONFIG=all | ||||||
| 	AC_ARG_WITH([config], | 	AC_ARG_WITH([config], | ||||||
| 		AS_HELP_STRING([--with-config=CONFIG], | 		AS_HELP_STRING([--with-config=CONFIG], | ||||||
| @ -197,6 +191,16 @@ AC_DEFUN([ZFS_AC_CONFIG], [ | |||||||
| 
 | 
 | ||||||
| 	ZFS_AC_CONFIG_ALWAYS | 	ZFS_AC_CONFIG_ALWAYS | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 	AM_COND_IF([BUILD_LINUX], [ | ||||||
|  | 		AC_ARG_VAR([TEST_JOBS], | ||||||
|  | 		    [simultaneous jobs during configure (defaults to $(nproc))]) | ||||||
|  | 		if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then | ||||||
|  | 			TEST_JOBS=$(nproc) | ||||||
|  | 		fi | ||||||
|  | 		AC_SUBST(TEST_JOBS) | ||||||
|  | 	]) | ||||||
|  | 
 | ||||||
| 	case "$ZFS_CONFIG" in | 	case "$ZFS_CONFIG" in | ||||||
| 		kernel) ZFS_AC_CONFIG_KERNEL ;; | 		kernel) ZFS_AC_CONFIG_KERNEL ;; | ||||||
| 		user)	ZFS_AC_CONFIG_USER   ;; | 		user)	ZFS_AC_CONFIG_USER   ;; | ||||||
| @ -405,7 +409,7 @@ dnl # Using the VENDOR tag from config.guess set the default | |||||||
| dnl # package type for 'make pkg': (rpm | deb | tgz) | dnl # package type for 'make pkg': (rpm | deb | tgz) | ||||||
| dnl # | dnl # | ||||||
| AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | ||||||
| 	AC_MSG_CHECKING([linux distribution]) | 	AC_MSG_CHECKING([os distribution]) | ||||||
| 	if test -f /etc/toss-release ; then | 	if test -f /etc/toss-release ; then | ||||||
| 		VENDOR=toss ; | 		VENDOR=toss ; | ||||||
| 	elif test -f /etc/fedora-release ; then | 	elif test -f /etc/fedora-release ; then | ||||||
| @ -428,6 +432,8 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | |||||||
| 		VENDOR=debian ; | 		VENDOR=debian ; | ||||||
| 	elif test -f /etc/alpine-release ; then | 	elif test -f /etc/alpine-release ; then | ||||||
| 		VENDOR=alpine ; | 		VENDOR=alpine ; | ||||||
|  | 	elif test -f /bin/freebsd-version ; then | ||||||
|  | 		VENDOR=freebsd ; | ||||||
| 	else | 	else | ||||||
| 		VENDOR= ; | 		VENDOR= ; | ||||||
| 	fi | 	fi | ||||||
| @ -447,13 +453,17 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | |||||||
| 		lunar)      DEFAULT_PACKAGE=tgz  ;; | 		lunar)      DEFAULT_PACKAGE=tgz  ;; | ||||||
| 		ubuntu)     DEFAULT_PACKAGE=deb  ;; | 		ubuntu)     DEFAULT_PACKAGE=deb  ;; | ||||||
| 		debian)     DEFAULT_PACKAGE=deb  ;; | 		debian)     DEFAULT_PACKAGE=deb  ;; | ||||||
|  | 		freebsd)    DEFAULT_PACKAGE=pkg  ;; | ||||||
| 		*)          DEFAULT_PACKAGE=rpm  ;; | 		*)          DEFAULT_PACKAGE=rpm  ;; | ||||||
| 	esac | 	esac | ||||||
| 	AC_MSG_RESULT([$DEFAULT_PACKAGE]) | 	AC_MSG_RESULT([$DEFAULT_PACKAGE]) | ||||||
| 	AC_SUBST(DEFAULT_PACKAGE) | 	AC_SUBST(DEFAULT_PACKAGE) | ||||||
| 
 | 
 | ||||||
| 	DEFAULT_INIT_DIR=$sysconfdir/init.d |  | ||||||
| 	AC_MSG_CHECKING([default init directory]) | 	AC_MSG_CHECKING([default init directory]) | ||||||
|  | 	case "$VENDOR" in | ||||||
|  | 		freebsd)    DEFAULT_INIT_DIR=$sysconfdir/rc.d  ;; | ||||||
|  | 		*)          DEFAULT_INIT_DIR=$sysconfdir/init.d;; | ||||||
|  | 	esac | ||||||
| 	AC_MSG_RESULT([$DEFAULT_INIT_DIR]) | 	AC_MSG_RESULT([$DEFAULT_INIT_DIR]) | ||||||
| 	AC_SUBST(DEFAULT_INIT_DIR) | 	AC_SUBST(DEFAULT_INIT_DIR) | ||||||
| 
 | 
 | ||||||
| @ -470,6 +480,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | |||||||
| 		lunar)      DEFAULT_INIT_SCRIPT=lunar  ;; | 		lunar)      DEFAULT_INIT_SCRIPT=lunar  ;; | ||||||
| 		ubuntu)     DEFAULT_INIT_SCRIPT=lsb    ;; | 		ubuntu)     DEFAULT_INIT_SCRIPT=lsb    ;; | ||||||
| 		debian)     DEFAULT_INIT_SCRIPT=lsb    ;; | 		debian)     DEFAULT_INIT_SCRIPT=lsb    ;; | ||||||
|  | 		freebsd)    DEFAULT_INIT_SCRIPT=freebsd;; | ||||||
| 		*)          DEFAULT_INIT_SCRIPT=lsb    ;; | 		*)          DEFAULT_INIT_SCRIPT=lsb    ;; | ||||||
| 	esac | 	esac | ||||||
| 	AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT]) | 	AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT]) | ||||||
| @ -485,6 +496,7 @@ AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [ | |||||||
| 		sles)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;; | 		sles)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;; | ||||||
| 		ubuntu)     DEFAULT_INITCONF_DIR=/etc/default   ;; | 		ubuntu)     DEFAULT_INITCONF_DIR=/etc/default   ;; | ||||||
| 		debian)     DEFAULT_INITCONF_DIR=/etc/default   ;; | 		debian)     DEFAULT_INITCONF_DIR=/etc/default   ;; | ||||||
|  | 		freebsd)    DEFAULT_INITCONF_DIR=$sysconfdir/rc.conf.d;; | ||||||
| 		*)          DEFAULT_INITCONF_DIR=/etc/default   ;; | 		*)          DEFAULT_INITCONF_DIR=/etc/default   ;; | ||||||
| 	esac | 	esac | ||||||
| 	AC_MSG_RESULT([$DEFAULT_INITCONF_DIR]) | 	AC_MSG_RESULT([$DEFAULT_INITCONF_DIR]) | ||||||
| @ -506,7 +518,9 @@ dnl # Default ZFS package configuration | |||||||
| dnl # | dnl # | ||||||
| AC_DEFUN([ZFS_AC_PACKAGE], [ | AC_DEFUN([ZFS_AC_PACKAGE], [ | ||||||
| 	ZFS_AC_DEFAULT_PACKAGE | 	ZFS_AC_DEFAULT_PACKAGE | ||||||
|  | 	AS_IF([test x$VENDOR != xfreebsd], [ | ||||||
| 		ZFS_AC_RPM | 		ZFS_AC_RPM | ||||||
| 		ZFS_AC_DPKG | 		ZFS_AC_DPKG | ||||||
| 		ZFS_AC_ALIEN | 		ZFS_AC_ALIEN | ||||||
| 	]) | 	]) | ||||||
|  | ]) | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								configure.ac
									
									
									
									
									
								
							| @ -109,6 +109,14 @@ AC_CONFIG_FILES([ | |||||||
| 	etc/zfs/Makefile | 	etc/zfs/Makefile | ||||||
| 	include/Makefile | 	include/Makefile | ||||||
| 	include/os/Makefile | 	include/os/Makefile | ||||||
|  | 	include/os/freebsd/Makefile | ||||||
|  | 	include/os/freebsd/linux/Makefile | ||||||
|  | 	include/os/freebsd/spl/Makefile | ||||||
|  | 	include/os/freebsd/spl/acl/Makefile | ||||||
|  | 	include/os/freebsd/spl/rpc/Makefile | ||||||
|  | 	include/os/freebsd/spl/sys/Makefile | ||||||
|  | 	include/os/freebsd/zfs/Makefile | ||||||
|  | 	include/os/freebsd/zfs/sys/Makefile | ||||||
| 	include/os/linux/Makefile | 	include/os/linux/Makefile | ||||||
| 	include/os/linux/kernel/Makefile | 	include/os/linux/kernel/Makefile | ||||||
| 	include/os/linux/kernel/linux/Makefile | 	include/os/linux/kernel/linux/Makefile | ||||||
| @ -138,6 +146,8 @@ AC_CONFIG_FILES([ | |||||||
| 	lib/libspl/include/ia32/Makefile | 	lib/libspl/include/ia32/Makefile | ||||||
| 	lib/libspl/include/ia32/sys/Makefile | 	lib/libspl/include/ia32/sys/Makefile | ||||||
| 	lib/libspl/include/os/Makefile | 	lib/libspl/include/os/Makefile | ||||||
|  | 	lib/libspl/include/os/freebsd/Makefile | ||||||
|  | 	lib/libspl/include/os/freebsd/sys/Makefile | ||||||
| 	lib/libspl/include/os/linux/Makefile | 	lib/libspl/include/os/linux/Makefile | ||||||
| 	lib/libspl/include/os/linux/sys/Makefile | 	lib/libspl/include/os/linux/sys/Makefile | ||||||
| 	lib/libspl/include/rpc/Makefile | 	lib/libspl/include/rpc/Makefile | ||||||
|  | |||||||
| @ -1,2 +1,5 @@ | |||||||
| SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs zcp | SUBDIRS = bash_completion.d pyzfs zcp | ||||||
|  | if BUILD_LINUX | ||||||
|  | SUBDIRS += bpftrace dracut initramfs | ||||||
|  | endif | ||||||
| DIST_SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs zcp | DIST_SUBDIRS = bash_completion.d bpftrace dracut initramfs pyzfs zcp | ||||||
|  | |||||||
| @ -1,2 +1,5 @@ | |||||||
| SUBDIRS = default zfs sudoers.d $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD) | SUBDIRS = zfs sudoers.d | ||||||
|  | if BUILD_LINUX | ||||||
|  | SUBDIRS += default $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD) | ||||||
|  | endif | ||||||
| DIST_SUBDIRS = default init.d zfs systemd modules-load.d sudoers.d | DIST_SUBDIRS = default init.d zfs systemd modules-load.d sudoers.d | ||||||
|  | |||||||
| @ -1,3 +1,6 @@ | |||||||
| if BUILD_LINUX | if BUILD_LINUX | ||||||
| SUBDIRS = linux | SUBDIRS = linux | ||||||
| endif | endif | ||||||
|  | if BUILD_FREEBSD | ||||||
|  | SUBDIRS = freebsd | ||||||
|  | endif | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								include/os/freebsd/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | SUBDIRS = linux spl zfs | ||||||
							
								
								
									
										5
									
								
								include/os/freebsd/linux/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								include/os/freebsd/linux/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | KERNEL_H = \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/linux/compiler.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/linux/types.h | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST = $(KERNEL_H) | ||||||
							
								
								
									
										101
									
								
								include/os/freebsd/linux/compiler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								include/os/freebsd/linux/compiler.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2010 Isilon Systems, Inc. | ||||||
|  |  * Copyright (c) 2010 iXsystems, Inc. | ||||||
|  |  * Copyright (c) 2010 Panasas, Inc. | ||||||
|  |  * Copyright (c) 2013-2016 Mellanox Technologies, Ltd. | ||||||
|  |  * Copyright (c) 2015 François Tigeot | ||||||
|  |  * 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 unmodified, 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	_LINUX_COMPILER_H_ | ||||||
|  | #define	_LINUX_COMPILER_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/cdefs.h> | ||||||
|  | 
 | ||||||
|  | #define	__user | ||||||
|  | #define	__kernel | ||||||
|  | #define	__safe | ||||||
|  | #define	__force | ||||||
|  | #define	__nocast | ||||||
|  | #define	__iomem | ||||||
|  | #define	__chk_user_ptr(x)		((void)0) | ||||||
|  | #define	__chk_io_ptr(x)			((void)0) | ||||||
|  | #define	__builtin_warning(x, y...)	(1) | ||||||
|  | #define	__acquires(x) | ||||||
|  | #define	__releases(x) | ||||||
|  | #define	__acquire(x)			do { } while (0) | ||||||
|  | #define	__release(x)			do { } while (0) | ||||||
|  | #define	__cond_lock(x, c)		(c) | ||||||
|  | #define	__bitwise | ||||||
|  | #define	__devinitdata | ||||||
|  | #define	__deprecated | ||||||
|  | #define	__init | ||||||
|  | #define	__initconst | ||||||
|  | #define	__devinit | ||||||
|  | #define	__devexit | ||||||
|  | #define	__exit | ||||||
|  | #define	__rcu | ||||||
|  | #define	__percpu | ||||||
|  | #define	__weak __weak_symbol | ||||||
|  | #define	__malloc | ||||||
|  | #define	___stringify(...)		#__VA_ARGS__ | ||||||
|  | #define	__stringify(...)		___stringify(__VA_ARGS__) | ||||||
|  | #define	__attribute_const__		__attribute__((__const__)) | ||||||
|  | #undef __always_inline | ||||||
|  | #define	__always_inline			inline | ||||||
|  | #define	noinline			__noinline | ||||||
|  | #define	____cacheline_aligned		__aligned(CACHE_LINE_SIZE) | ||||||
|  | 
 | ||||||
|  | #ifndef _KERNEL | ||||||
|  | #define	likely(x)			__builtin_expect(!!(x), 1) | ||||||
|  | #define	unlikely(x)			__builtin_expect(!!(x), 0) | ||||||
|  | #endif | ||||||
|  | #define	typeof(x)			__typeof(x) | ||||||
|  | 
 | ||||||
|  | #define	uninitialized_var(x)		x = x | ||||||
|  | #define	__maybe_unused			__unused | ||||||
|  | #define	__always_unused			__unused | ||||||
|  | #define	__must_check			__result_use_check | ||||||
|  | 
 | ||||||
|  | #define	__printf(a, b)			__printflike(a, b) | ||||||
|  | 
 | ||||||
|  | #define	barrier()			__asm__ __volatile__("": : :"memory") | ||||||
|  | #define	smp_rmb()		rmb() | ||||||
|  | #define	___PASTE(a, b) a##b | ||||||
|  | #define	__PASTE(a, b) ___PASTE(a, b) | ||||||
|  | 
 | ||||||
|  | #define	ACCESS_ONCE(x)			(*(volatile __typeof(x) *)&(x)) | ||||||
|  | 
 | ||||||
|  | #define	WRITE_ONCE(x, v) do {		\ | ||||||
|  | 	barrier();			\ | ||||||
|  | 	ACCESS_ONCE(x) = (v);		\ | ||||||
|  | 	barrier();			\ | ||||||
|  | } while (0) | ||||||
|  | 
 | ||||||
|  | #define	lockless_dereference(p) READ_ONCE(p) | ||||||
|  | 
 | ||||||
|  | #define	_AT(T, X)	((T)(X)) | ||||||
|  | 
 | ||||||
|  | #endif	/* _LINUX_COMPILER_H_ */ | ||||||
							
								
								
									
										80
									
								
								include/os/freebsd/linux/types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								include/os/freebsd/linux/types.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,80 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2010 Isilon Systems, Inc. | ||||||
|  |  * Copyright (c) 2010 iXsystems, Inc. | ||||||
|  |  * Copyright (c) 2010 Panasas, Inc. | ||||||
|  |  * Copyright (c) 2013-2017 Mellanox Technologies, Ltd. | ||||||
|  |  * 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 unmodified, 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	_LINUX_TYPES_H_ | ||||||
|  | #define	_LINUX_TYPES_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/cdefs.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/systm.h> | ||||||
|  | #include <linux/compiler.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #ifndef __bitwise__ | ||||||
|  | #ifdef __CHECKER__ | ||||||
|  | #define	__bitwise__ __attribute__((bitwise)) | ||||||
|  | #else | ||||||
|  | #define	__bitwise__ | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | typedef uint16_t __le16; | ||||||
|  | typedef uint16_t __be16; | ||||||
|  | typedef uint32_t __le32; | ||||||
|  | typedef uint32_t __be32; | ||||||
|  | typedef uint64_t __le64; | ||||||
|  | typedef uint64_t __be64; | ||||||
|  | 
 | ||||||
|  | typedef unsigned gfp_t; | ||||||
|  | typedef uint64_t loff_t; | ||||||
|  | typedef vm_paddr_t resource_size_t; | ||||||
|  | typedef uint16_t __bitwise__ __sum16; | ||||||
|  | typedef unsigned long pgoff_t; | ||||||
|  | typedef unsigned __poll_t; | ||||||
|  | 
 | ||||||
|  | typedef uint64_t u64; | ||||||
|  | typedef u64 phys_addr_t; | ||||||
|  | 
 | ||||||
|  | typedef size_t __kernel_size_t; | ||||||
|  | 
 | ||||||
|  | #define	DECLARE_BITMAP(n, bits)						\ | ||||||
|  | 	unsigned long n[howmany(bits, sizeof (long) * 8)] | ||||||
|  | 
 | ||||||
|  | typedef unsigned long irq_hw_number_t; | ||||||
|  | 
 | ||||||
|  | struct rcu_head { | ||||||
|  | 	void *raw[2]; | ||||||
|  | } __aligned(sizeof (void *)); | ||||||
|  | 
 | ||||||
|  | typedef void (*rcu_callback_t)(struct rcu_head *head); | ||||||
|  | typedef void (*call_rcu_func_t)(struct rcu_head *head, rcu_callback_t func); | ||||||
|  | typedef int linux_task_fn_t(void *data); | ||||||
|  | 
 | ||||||
|  | #endif	/* _LINUX_TYPES_H_ */ | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | SUBDIRS = acl rpc sys | ||||||
							
								
								
									
										4
									
								
								include/os/freebsd/spl/acl/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								include/os/freebsd/spl/acl/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | KERNEL_H = \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/acl/acl_common.h | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST = $(KERNEL_H) | ||||||
							
								
								
									
										68
									
								
								include/os/freebsd/spl/acl/acl_common.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								include/os/freebsd/spl/acl/acl_common.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. | ||||||
|  |  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_ACL_COMMON_H | ||||||
|  | #define	_ACL_COMMON_H | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/acl.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | typedef struct trivial_acl { | ||||||
|  | 	uint32_t	allow0;		/* allow mask for bits only in owner */ | ||||||
|  | 	uint32_t	deny1;		/* deny mask for bits not in owner */ | ||||||
|  | 	uint32_t	deny2;		/* deny mask for bits not in group */ | ||||||
|  | 	uint32_t	owner;		/* allow mask matching mode */ | ||||||
|  | 	uint32_t	group;		/* allow mask matching mode */ | ||||||
|  | 	uint32_t	everyone;	/* allow mask matching mode */ | ||||||
|  | } trivial_acl_t; | ||||||
|  | 
 | ||||||
|  | extern int acltrivial(const char *); | ||||||
|  | extern void adjust_ace_pair(ace_t *pair, mode_t mode); | ||||||
|  | extern void adjust_ace_pair_common(void *, size_t, size_t, mode_t); | ||||||
|  | extern int ace_trivial(ace_t *acep, int aclcnt); | ||||||
|  | extern int ace_trivial_common(void *, int, | ||||||
|  |     uint64_t (*walk)(void *, uint64_t, int aclcnt, uint16_t *, uint16_t *, | ||||||
|  |     uint32_t *mask)); | ||||||
|  | #if !defined(_KERNEL) | ||||||
|  | extern acl_t *acl_alloc(acl_type_t); | ||||||
|  | extern void acl_free(acl_t *aclp); | ||||||
|  | extern int acl_translate(acl_t *aclp, int target_flavor, boolean_t isdir, | ||||||
|  |     uid_t owner, gid_t group); | ||||||
|  | #endif	/* !_KERNEL */ | ||||||
|  | int cmp2acls(void *a, void *b); | ||||||
|  | int acl_trivial_create(mode_t mode, boolean_t isdir, ace_t **acl, int *count); | ||||||
|  | void acl_trivial_access_masks(mode_t mode, boolean_t isdir, | ||||||
|  |     trivial_acl_t *masks); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _ACL_COMMON_H */ | ||||||
							
								
								
									
										8
									
								
								include/os/freebsd/spl/rpc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								include/os/freebsd/spl/rpc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | COMMON_H = | ||||||
|  | 
 | ||||||
|  | KERNEL_H = \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/rpc/xdr.h | ||||||
|  | 
 | ||||||
|  | USER_H = | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST = $(COMMON_H) $(KERNEL_H) $(USER_H) | ||||||
							
								
								
									
										71
									
								
								include/os/freebsd/spl/rpc/xdr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								include/os/freebsd/spl/rpc/xdr.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | |||||||
|  | /*
 | ||||||
|  |  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for | ||||||
|  |  * unrestricted use provided that this legend is included on all tape | ||||||
|  |  * media and as a part of the software program in whole or part.  Users | ||||||
|  |  * may copy or modify Sun RPC without charge, but are not authorized | ||||||
|  |  * to license or distribute it to anyone else except as part of a product or | ||||||
|  |  * program developed by the user. | ||||||
|  |  * | ||||||
|  |  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE | ||||||
|  |  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR | ||||||
|  |  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. | ||||||
|  |  * | ||||||
|  |  * Sun RPC is provided with no support and without any obligation on the | ||||||
|  |  * part of Sun Microsystems, Inc. to assist in its use, correction, | ||||||
|  |  * modification or enhancement. | ||||||
|  |  * | ||||||
|  |  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE | ||||||
|  |  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC | ||||||
|  |  * OR ANY PART THEREOF. | ||||||
|  |  * | ||||||
|  |  * In no event will Sun Microsystems, Inc. be liable for any lost revenue | ||||||
|  |  * or profits or other special, indirect and consequential damages, even if | ||||||
|  |  * Sun has been advised of the possibility of such damages. | ||||||
|  |  * | ||||||
|  |  * Sun Microsystems, Inc. | ||||||
|  |  * 2550 Garcia Avenue | ||||||
|  |  * Mountain View, California  94043 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_OPENSOLARIS_RPC_XDR_H_ | ||||||
|  | #define	_OPENSOLARIS_RPC_XDR_H_ | ||||||
|  | 
 | ||||||
|  | #include <rpc/types.h> | ||||||
|  | #include_next <rpc/xdr.h> | ||||||
|  | 
 | ||||||
|  | #ifndef _KERNEL | ||||||
|  | 
 | ||||||
|  | #include <assert.h> | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Taken from sys/xdr/xdr_mem.c. | ||||||
|  |  * | ||||||
|  |  * FreeBSD's userland XDR doesn't implement control method (only the kernel), | ||||||
|  |  * but OpenSolaris nvpair still depend on it, so we have to implement it here. | ||||||
|  |  */ | ||||||
|  | static __inline bool_t | ||||||
|  | xdrmem_control(XDR *xdrs, int request, void *info) | ||||||
|  | { | ||||||
|  | 	xdr_bytesrec *xptr; | ||||||
|  | 
 | ||||||
|  | 	switch (request) { | ||||||
|  | 	case XDR_GET_BYTES_AVAIL: | ||||||
|  | 		xptr = (xdr_bytesrec *)info; | ||||||
|  | 		xptr->xc_is_last_record = TRUE; | ||||||
|  | 		xptr->xc_num_avail = xdrs->x_handy; | ||||||
|  | 		return (TRUE); | ||||||
|  | 	default: | ||||||
|  | 		assert(!"unexpected request"); | ||||||
|  | 	} | ||||||
|  | 	return (FALSE); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #undef XDR_CONTROL | ||||||
|  | #define	XDR_CONTROL(xdrs, req, op)					\ | ||||||
|  | 	(((xdrs)->x_ops->x_control == NULL) ?				\ | ||||||
|  | 	    xdrmem_control((xdrs), (req), (op)) :			\ | ||||||
|  | 	    (*(xdrs)->x_ops->x_control)(xdrs, req, op)) | ||||||
|  | 
 | ||||||
|  | #endif	/* !_KERNEL */ | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_RPC_XDR_H_ */ | ||||||
							
								
								
									
										72
									
								
								include/os/freebsd/spl/sys/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								include/os/freebsd/spl/sys/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | KERNEL_H = \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/acl_impl.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/acl.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/atomic.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/byteorder.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/callb.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/ccompile.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/cmn_err.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/condvar.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/console.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/cred.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/ctype.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/debug.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/dirent.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/disp.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/dkio.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/endian.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/extdirent.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/file.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/freebsd_rwlock.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/inttypes.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/isa_defs.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/kmem_cache.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/kmem.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/kstat.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/list_impl.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/list.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/lock.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/Makefile.am \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/misc.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/mod_os.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/mode.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/mount.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/mutex.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/param.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/policy.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/proc.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/processor.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/procfs_list.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/random.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/rwlock.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/sdt.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/sid.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/sig.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/simd_x86.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/simd.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/spl_condvar.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/string.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/strings.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/sunddi.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/sysmacros.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/systeminfo.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/systm.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/taskq.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/thread.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/time.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/timer.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/trace_zfs.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/trace.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/types.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/types32.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/uio.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/uuid.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/vfs.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/vm.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/vmsystm.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/vnode_impl.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/vnode.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/zmod.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/spl/sys/zone.h | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST = $(KERNEL_H) | ||||||
							
								
								
									
										216
									
								
								include/os/freebsd/spl/sys/acl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								include/os/freebsd/spl/sys/acl.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,216 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2014 Garrett D'Amore <garrett@damore.org> | ||||||
|  |  * | ||||||
|  |  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  * Copyright 2017 RackTop Systems. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_ACL_H | ||||||
|  | #define	_SYS_ACL_H | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/acl_impl.h> | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * When compiling OpenSolaris kernel code, this file is included instead of the | ||||||
|  |  * FreeBSD one.  Include the original sys/acl.h as well. | ||||||
|  |  */ | ||||||
|  | #undef _SYS_ACL_H | ||||||
|  | #include_next <sys/acl.h> | ||||||
|  | #define	_SYS_ACL_H | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	MAX_ACL_ENTRIES		(1024)	/* max entries of each type */ | ||||||
|  | typedef struct { | ||||||
|  | 	int		a_type;		/* the type of ACL entry */ | ||||||
|  | 	uid_t		a_id;		/* the entry in -uid or gid */ | ||||||
|  | 	o_mode_t	a_perm;		/* the permission field */ | ||||||
|  | } aclent_t; | ||||||
|  | 
 | ||||||
|  | typedef struct ace { | ||||||
|  | 	uid_t		a_who;		/* uid or gid */ | ||||||
|  | 	uint32_t	a_access_mask;	/* read,write,... */ | ||||||
|  | 	uint16_t	a_flags;	/* see below */ | ||||||
|  | 	uint16_t	a_type;		/* allow or deny */ | ||||||
|  | } ace_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following are Defined types for an aclent_t. | ||||||
|  |  */ | ||||||
|  | #define	USER_OBJ	(0x01)		/* object owner */ | ||||||
|  | #define	USER		(0x02)		/* additional users */ | ||||||
|  | #define	GROUP_OBJ	(0x04)		/* owning group of the object */ | ||||||
|  | #define	GROUP		(0x08)		/* additional groups */ | ||||||
|  | #define	CLASS_OBJ	(0x10)		/* file group class and mask entry */ | ||||||
|  | #define	OTHER_OBJ	(0x20)		/* other entry for the object */ | ||||||
|  | #define	ACL_DEFAULT	(0x1000)	/* default flag */ | ||||||
|  | /* default object owner */ | ||||||
|  | #define	DEF_USER_OBJ	(ACL_DEFAULT | USER_OBJ) | ||||||
|  | /* default additional users */ | ||||||
|  | #define	DEF_USER	(ACL_DEFAULT | USER) | ||||||
|  | /* default owning group */ | ||||||
|  | #define	DEF_GROUP_OBJ	(ACL_DEFAULT | GROUP_OBJ) | ||||||
|  | /* default additional groups */ | ||||||
|  | #define	DEF_GROUP	(ACL_DEFAULT | GROUP) | ||||||
|  | /* default mask entry */ | ||||||
|  | #define	DEF_CLASS_OBJ	(ACL_DEFAULT | CLASS_OBJ) | ||||||
|  | /* default other entry */ | ||||||
|  | #define	DEF_OTHER_OBJ	(ACL_DEFAULT | OTHER_OBJ) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following are defined for ace_t. | ||||||
|  |  */ | ||||||
|  | #define	ACE_READ_DATA		0x00000001 | ||||||
|  | #define	ACE_LIST_DIRECTORY	0x00000001 | ||||||
|  | #define	ACE_WRITE_DATA		0x00000002 | ||||||
|  | #define	ACE_ADD_FILE		0x00000002 | ||||||
|  | #define	ACE_APPEND_DATA		0x00000004 | ||||||
|  | #define	ACE_ADD_SUBDIRECTORY	0x00000004 | ||||||
|  | #define	ACE_READ_NAMED_ATTRS	0x00000008 | ||||||
|  | #define	ACE_WRITE_NAMED_ATTRS	0x00000010 | ||||||
|  | #define	ACE_EXECUTE		0x00000020 | ||||||
|  | #define	ACE_DELETE_CHILD	0x00000040 | ||||||
|  | #define	ACE_READ_ATTRIBUTES	0x00000080 | ||||||
|  | #define	ACE_WRITE_ATTRIBUTES	0x00000100 | ||||||
|  | #define	ACE_DELETE		0x00010000 | ||||||
|  | #define	ACE_READ_ACL		0x00020000 | ||||||
|  | #define	ACE_WRITE_ACL		0x00040000 | ||||||
|  | #define	ACE_WRITE_OWNER		0x00080000 | ||||||
|  | #define	ACE_SYNCHRONIZE		0x00100000 | ||||||
|  | 
 | ||||||
|  | #define	ACE_FILE_INHERIT_ACE		0x0001 | ||||||
|  | #define	ACE_DIRECTORY_INHERIT_ACE	0x0002 | ||||||
|  | #define	ACE_NO_PROPAGATE_INHERIT_ACE	0x0004 | ||||||
|  | #define	ACE_INHERIT_ONLY_ACE		0x0008 | ||||||
|  | #define	ACE_SUCCESSFUL_ACCESS_ACE_FLAG	0x0010 | ||||||
|  | #define	ACE_FAILED_ACCESS_ACE_FLAG	0x0020 | ||||||
|  | #define	ACE_IDENTIFIER_GROUP		0x0040 | ||||||
|  | #define	ACE_INHERITED_ACE		0x0080 | ||||||
|  | #define	ACE_OWNER			0x1000 | ||||||
|  | #define	ACE_GROUP			0x2000 | ||||||
|  | #define	ACE_EVERYONE			0x4000 | ||||||
|  | 
 | ||||||
|  | #define	ACE_ACCESS_ALLOWED_ACE_TYPE	0x0000 | ||||||
|  | #define	ACE_ACCESS_DENIED_ACE_TYPE	0x0001 | ||||||
|  | #define	ACE_SYSTEM_AUDIT_ACE_TYPE	0x0002 | ||||||
|  | #define	ACE_SYSTEM_ALARM_ACE_TYPE	0x0003 | ||||||
|  | 
 | ||||||
|  | #define	ACL_AUTO_INHERIT		0x0001 | ||||||
|  | #define	ACL_PROTECTED			0x0002 | ||||||
|  | #define	ACL_DEFAULTED			0x0004 | ||||||
|  | #define	ACL_FLAGS_ALL			(ACL_AUTO_INHERIT|ACL_PROTECTED| \ | ||||||
|  |     ACL_DEFAULTED) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * These are only applicable in a CIFS context. | ||||||
|  |  */ | ||||||
|  | #define	ACE_ACCESS_ALLOWED_COMPOUND_ACE_TYPE		0x04 | ||||||
|  | #define	ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE		0x05 | ||||||
|  | #define	ACE_ACCESS_DENIED_OBJECT_ACE_TYPE		0x06 | ||||||
|  | #define	ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE		0x07 | ||||||
|  | #define	ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE		0x08 | ||||||
|  | #define	ACE_ACCESS_ALLOWED_CALLBACK_ACE_TYPE		0x09 | ||||||
|  | #define	ACE_ACCESS_DENIED_CALLBACK_ACE_TYPE		0x0A | ||||||
|  | #define	ACE_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE	0x0B | ||||||
|  | #define	ACE_ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE	0x0C | ||||||
|  | #define	ACE_SYSTEM_AUDIT_CALLBACK_ACE_TYPE		0x0D | ||||||
|  | #define	ACE_SYSTEM_ALARM_CALLBACK_ACE_TYPE		0x0E | ||||||
|  | #define	ACE_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE	0x0F | ||||||
|  | #define	ACE_SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE	0x10 | ||||||
|  | 
 | ||||||
|  | #define	ACE_ALL_TYPES	0x001F | ||||||
|  | 
 | ||||||
|  | typedef struct ace_object { | ||||||
|  | 	uid_t		a_who;		/* uid or gid */ | ||||||
|  | 	uint32_t	a_access_mask;	/* read,write,... */ | ||||||
|  | 	uint16_t	a_flags;	/* see below */ | ||||||
|  | 	uint16_t	a_type;		/* allow or deny */ | ||||||
|  | 	uint8_t		a_obj_type[16];	/* obj type */ | ||||||
|  | 	uint8_t		a_inherit_obj_type[16];  /* inherit obj */ | ||||||
|  | } ace_object_t; | ||||||
|  | 
 | ||||||
|  | #define	ACE_ALL_PERMS	(ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ | ||||||
|  |     ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \ | ||||||
|  |     ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \ | ||||||
|  |     ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_WRITE_ACL| \ | ||||||
|  |     ACE_WRITE_OWNER|ACE_SYNCHRONIZE) | ||||||
|  | 
 | ||||||
|  | #define	ACE_ALL_WRITE_PERMS (ACE_WRITE_DATA|ACE_APPEND_DATA| \ | ||||||
|  |     ACE_WRITE_ATTRIBUTES|ACE_WRITE_NAMED_ATTRS|ACE_WRITE_ACL| \ | ||||||
|  |     ACE_WRITE_OWNER|ACE_DELETE|ACE_DELETE_CHILD) | ||||||
|  | 
 | ||||||
|  | #define	ACE_READ_PERMS	(ACE_READ_DATA|ACE_READ_ACL|ACE_READ_ATTRIBUTES| \ | ||||||
|  |     ACE_READ_NAMED_ATTRS) | ||||||
|  | 
 | ||||||
|  | #define	ACE_WRITE_PERMS	(ACE_WRITE_DATA|ACE_APPEND_DATA|ACE_WRITE_ATTRIBUTES| \ | ||||||
|  |     ACE_WRITE_NAMED_ATTRS) | ||||||
|  | 
 | ||||||
|  | #define	ACE_MODIFY_PERMS (ACE_READ_DATA|ACE_LIST_DIRECTORY|ACE_WRITE_DATA| \ | ||||||
|  |     ACE_ADD_FILE|ACE_APPEND_DATA|ACE_ADD_SUBDIRECTORY|ACE_READ_NAMED_ATTRS| \ | ||||||
|  |     ACE_WRITE_NAMED_ATTRS|ACE_EXECUTE|ACE_DELETE_CHILD|ACE_READ_ATTRIBUTES| \ | ||||||
|  |     ACE_WRITE_ATTRIBUTES|ACE_DELETE|ACE_READ_ACL|ACE_SYNCHRONIZE) | ||||||
|  | /*
 | ||||||
|  |  * The following flags are supported by both NFSv4 ACLs and ace_t. | ||||||
|  |  */ | ||||||
|  | #define	ACE_NFSV4_SUP_FLAGS (ACE_FILE_INHERIT_ACE | \ | ||||||
|  |     ACE_DIRECTORY_INHERIT_ACE | \ | ||||||
|  |     ACE_NO_PROPAGATE_INHERIT_ACE | \ | ||||||
|  |     ACE_INHERIT_ONLY_ACE | \ | ||||||
|  |     ACE_INHERITED_ACE | \ | ||||||
|  |     ACE_IDENTIFIER_GROUP) | ||||||
|  | 
 | ||||||
|  | #define	ACE_TYPE_FLAGS		(ACE_OWNER|ACE_GROUP|ACE_EVERYONE| \ | ||||||
|  |     ACE_IDENTIFIER_GROUP) | ||||||
|  | #define	ACE_INHERIT_FLAGS	(ACE_FILE_INHERIT_ACE| ACL_INHERITED_ACE| \ | ||||||
|  |     ACE_DIRECTORY_INHERIT_ACE|ACE_NO_PROPAGATE_INHERIT_ACE|ACE_INHERIT_ONLY_ACE) | ||||||
|  | 
 | ||||||
|  | /* cmd args to acl(2) for aclent_t  */ | ||||||
|  | #define	GETACL			1 | ||||||
|  | #define	SETACL			2 | ||||||
|  | #define	GETACLCNT		3 | ||||||
|  | 
 | ||||||
|  | /* cmd's to manipulate ace acls. */ | ||||||
|  | #define	ACE_GETACL		4 | ||||||
|  | #define	ACE_SETACL		5 | ||||||
|  | #define	ACE_GETACLCNT		6 | ||||||
|  | 
 | ||||||
|  | /* minimal acl entries from GETACLCNT */ | ||||||
|  | #define	MIN_ACL_ENTRIES		4 | ||||||
|  | 
 | ||||||
|  | extern void aces_from_acl(ace_t *aces, int *nentries, const struct acl *aclp); | ||||||
|  | extern int acl_from_aces(struct acl *aclp, const ace_t *aces, int nentries); | ||||||
|  | extern void ksort(caddr_t, int, int, int (*)(void *, void *)); | ||||||
|  | extern int cmp2acls(void *, void *); | ||||||
|  | 
 | ||||||
|  | extern int acl(const char *path, int cmd, int cnt, void *buf); | ||||||
|  | extern int facl(int fd, int cmd, int cnt, void *buf); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _SYS_ACL_H */ | ||||||
							
								
								
									
										61
									
								
								include/os/freebsd/spl/sys/acl_impl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								include/os/freebsd/spl/sys/acl_impl.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_ACL_IMPL_H | ||||||
|  | #define	_SYS_ACL_IMPL_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * acl flags | ||||||
|  |  * | ||||||
|  |  * ACL_AUTO_INHERIT, ACL_PROTECTED and ACL_DEFAULTED | ||||||
|  |  * flags can also be stored in this field. | ||||||
|  |  */ | ||||||
|  | #define	ACL_IS_TRIVIAL	0x10000 | ||||||
|  | #define	ACL_IS_DIR	0x20000 | ||||||
|  | 
 | ||||||
|  | typedef enum acl_type { | ||||||
|  | 	ACLENT_T = 0, | ||||||
|  | 	ACE_T = 1 | ||||||
|  | } zfs_acl_type_t; | ||||||
|  | 
 | ||||||
|  | struct acl_info { | ||||||
|  | 	zfs_acl_type_t acl_type;	/* style of acl */ | ||||||
|  | 	int acl_cnt;			/* number of acl entries */ | ||||||
|  | 	int acl_entry_size;		/* sizeof acl entry */ | ||||||
|  | 	int acl_flags;			/* special flags about acl */ | ||||||
|  | 	void *acl_aclp;			/* the acl */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _SYS_ACL_IMPL_H */ | ||||||
							
								
								
									
										188
									
								
								include/os/freebsd/spl/sys/atomic.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								include/os/freebsd/spl/sys/atomic.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,188 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_ATOMIC_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_ATOMIC_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <machine/atomic.h> | ||||||
|  | 
 | ||||||
|  | #define	casptr(_a, _b, _c)	\ | ||||||
|  | 	atomic_cmpset_ptr((volatile uintptr_t *)(_a), \ | ||||||
|  | 	    (uintptr_t)(_b), \ | ||||||
|  | 	    (uintptr_t)(_c)) | ||||||
|  | #define	cas32	atomic_cmpset_32 | ||||||
|  | #define	atomic_sub_64 atomic_subtract_64 | ||||||
|  | 
 | ||||||
|  | #if defined(__i386__) || defined(KLD_MODULE) | ||||||
|  | #define	I386_HAVE_ATOMIC64 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if !defined(__LP64__) && !defined(__mips_n32) && \ | ||||||
|  | 	!defined(ARM_HAVE_ATOMIC64) && !defined(I386_HAVE_ATOMIC64) | ||||||
|  | extern void atomic_add_64(volatile uint64_t *target, int64_t delta); | ||||||
|  | extern void atomic_dec_64(volatile uint64_t *target); | ||||||
|  | #endif | ||||||
|  | #ifndef __sparc64__ | ||||||
|  | #if defined(__LP64__) || defined(__mips_n32) ||	\ | ||||||
|  |     defined(ARM_HAVE_ATOMIC64) || defined(I386_HAVE_ATOMIC64) | ||||||
|  | 
 | ||||||
|  | #define	membar_producer() wmb() | ||||||
|  | 
 | ||||||
|  | static __inline uint64_t | ||||||
|  | atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | #ifdef __i386__ | ||||||
|  | 	atomic_fcmpset_64(target, &cmp, newval); | ||||||
|  | #else | ||||||
|  | 	atomic_fcmpset_long(target, &cmp, newval); | ||||||
|  | #endif | ||||||
|  | 	return (cmp); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint32_t | ||||||
|  | atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t newval) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	atomic_fcmpset_int(target, &cmp, newval); | ||||||
|  | 	return (cmp); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint64_t | ||||||
|  | atomic_add_64_nv(volatile uint64_t *target, int64_t delta) | ||||||
|  | { | ||||||
|  | 	uint64_t prev; | ||||||
|  | 
 | ||||||
|  | 	prev = atomic_fetchadd_long(target, delta); | ||||||
|  | 
 | ||||||
|  | 	return (prev + delta); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | extern uint32_t atomic_cas_32(volatile uint32_t *target, uint32_t cmp, | ||||||
|  |     uint32_t newval); | ||||||
|  | extern uint64_t atomic_cas_64(volatile uint64_t *target, uint64_t cmp, | ||||||
|  |     uint64_t newval); | ||||||
|  | extern uint64_t atomic_add_64_nv(volatile uint64_t *target, int64_t delta); | ||||||
|  | extern void membar_producer(void); | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | extern uint8_t atomic_or_8_nv(volatile uint8_t *target, uint8_t value); | ||||||
|  | 
 | ||||||
|  | #if defined(__sparc64__) || defined(__powerpc__) || defined(__arm__) || \ | ||||||
|  |     defined(__mips__) || defined(__aarch64__) || defined(__riscv) | ||||||
|  | extern void atomic_or_8(volatile uint8_t *target, uint8_t value); | ||||||
|  | #else | ||||||
|  | static __inline void | ||||||
|  | atomic_or_8(volatile uint8_t *target, uint8_t value) | ||||||
|  | { | ||||||
|  | 	atomic_set_8(target, value); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | static __inline uint32_t | ||||||
|  | atomic_add_32_nv(volatile uint32_t *target, int32_t delta) | ||||||
|  | { | ||||||
|  | 	return (atomic_fetchadd_32(target, delta) + delta); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint32_t | ||||||
|  | atomic_add_int_nv(volatile uint32_t *target, int delta) | ||||||
|  | { | ||||||
|  | 	return (atomic_add_32_nv(target, delta)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | atomic_dec_32(volatile uint32_t *target) | ||||||
|  | { | ||||||
|  | 	atomic_subtract_32(target, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint32_t | ||||||
|  | atomic_dec_32_nv(volatile uint32_t *target) | ||||||
|  | { | ||||||
|  | 	return (atomic_fetchadd_32(target, -1) - 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #if defined(__LP64__) || defined(__mips_n32) || \ | ||||||
|  |     defined(ARM_HAVE_ATOMIC64) || defined(I386_HAVE_ATOMIC64) | ||||||
|  | static __inline void | ||||||
|  | atomic_dec_64(volatile uint64_t *target) | ||||||
|  | { | ||||||
|  | 	atomic_subtract_64(target, 1); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | atomic_inc_32(volatile uint32_t *target) | ||||||
|  | { | ||||||
|  | 	atomic_add_32(target, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint32_t | ||||||
|  | atomic_inc_32_nv(volatile uint32_t *target) | ||||||
|  | { | ||||||
|  | 	return (atomic_add_32_nv(target, 1)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | atomic_inc_64(volatile uint64_t *target) | ||||||
|  | { | ||||||
|  | 	atomic_add_64(target, 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint64_t | ||||||
|  | atomic_inc_64_nv(volatile uint64_t *target) | ||||||
|  | { | ||||||
|  | 	return (atomic_add_64_nv(target, 1)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint64_t | ||||||
|  | atomic_dec_64_nv(volatile uint64_t *target) | ||||||
|  | { | ||||||
|  | 	return (atomic_add_64_nv(target, -1)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #if !defined(COMPAT_32BIT) && defined(__LP64__) | ||||||
|  | static __inline void * | ||||||
|  | atomic_cas_ptr(volatile void *target, void *cmp,  void *newval) | ||||||
|  | { | ||||||
|  | 	return ((void *)atomic_cas_64((volatile uint64_t *)target, | ||||||
|  | 	    (uint64_t)cmp, (uint64_t)newval)); | ||||||
|  | } | ||||||
|  | #else | ||||||
|  | static __inline void * | ||||||
|  | atomic_cas_ptr(volatile void *target, void *cmp,  void *newval) | ||||||
|  | { | ||||||
|  | 	return ((void *)atomic_cas_32((volatile uint32_t *)target, | ||||||
|  | 	    (uint32_t)cmp, (uint32_t)newval)); | ||||||
|  | } | ||||||
|  | #endif	/* !defined(COMPAT_32BIT) && defined(__LP64__) */ | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_ATOMIC_H_ */ | ||||||
							
								
								
									
										93
									
								
								include/os/freebsd/spl/sys/byteorder.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								include/os/freebsd/spl/sys/byteorder.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,93 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  * | ||||||
|  |  * $FreeBSD$ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/ | ||||||
|  | /*	  All Rights Reserved  	*/ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * University Copyright- Copyright (c) 1982, 1986, 1988 | ||||||
|  |  * The Regents of the University of California | ||||||
|  |  * All Rights Reserved | ||||||
|  |  * | ||||||
|  |  * University Acknowledgment- Portions of this document are derived from | ||||||
|  |  * software developed by the University of California, Berkeley, and its | ||||||
|  |  * contributors. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _OPENSOLARIS_SYS_BYTEORDER_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_BYTEORDER_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/endian.h> | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros to reverse byte order | ||||||
|  |  */ | ||||||
|  | #define	BSWAP_8(x)	((x) & 0xff) | ||||||
|  | #define	BSWAP_16(x)	((BSWAP_8(x) << 8) | BSWAP_8((x) >> 8)) | ||||||
|  | #define	BSWAP_32(x)	((BSWAP_16(x) << 16) | BSWAP_16((x) >> 16)) | ||||||
|  | #define	BSWAP_64(x)	((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32)) | ||||||
|  | 
 | ||||||
|  | #define	BMASK_8(x)	((x) & 0xff) | ||||||
|  | #define	BMASK_16(x)	((x) & 0xffff) | ||||||
|  | #define	BMASK_32(x)	((x) & 0xffffffff) | ||||||
|  | #define	BMASK_64(x)	(x) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros to convert from a specific byte order to/from native byte order | ||||||
|  |  */ | ||||||
|  | #if BYTE_ORDER == BIG_ENDIAN | ||||||
|  | #define	BE_8(x)		BMASK_8(x) | ||||||
|  | #define	BE_16(x)	BMASK_16(x) | ||||||
|  | #define	BE_32(x)	BMASK_32(x) | ||||||
|  | #define	BE_64(x)	BMASK_64(x) | ||||||
|  | #define	LE_8(x)		BSWAP_8(x) | ||||||
|  | #define	LE_16(x)	BSWAP_16(x) | ||||||
|  | #define	LE_32(x)	BSWAP_32(x) | ||||||
|  | #define	LE_64(x)	BSWAP_64(x) | ||||||
|  | #else | ||||||
|  | #define	LE_8(x)		BMASK_8(x) | ||||||
|  | #define	LE_16(x)	BMASK_16(x) | ||||||
|  | #define	LE_32(x)	BMASK_32(x) | ||||||
|  | #define	LE_64(x)	BMASK_64(x) | ||||||
|  | #define	BE_8(x)		BSWAP_8(x) | ||||||
|  | #define	BE_16(x)	BSWAP_16(x) | ||||||
|  | #define	BE_32(x)	BSWAP_32(x) | ||||||
|  | #define	BE_64(x)	BSWAP_64(x) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if BYTE_ORDER == BIG_ENDIAN | ||||||
|  | #define	htonll(x)	BMASK_64(x) | ||||||
|  | #define	ntohll(x)	BMASK_64(x) | ||||||
|  | #else | ||||||
|  | #define	htonll(x)	BSWAP_64(x) | ||||||
|  | #define	ntohll(x)	BSWAP_64(x) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	BE_IN32(xa)	htonl(*((uint32_t *)(void *)(xa))) | ||||||
|  | 
 | ||||||
|  | #endif /* _OPENSOLARIS_SYS_BYTEORDER_H_ */ | ||||||
							
								
								
									
										213
									
								
								include/os/freebsd/spl/sys/callb.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								include/os/freebsd/spl/sys/callb.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,213 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_CALLB_H | ||||||
|  | #define	_SYS_CALLB_H | ||||||
|  | 
 | ||||||
|  | #include <sys/condvar.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * definitions of callback classes (c_class) | ||||||
|  |  * | ||||||
|  |  * Callbacks belong in the same class if (1) their callback routines | ||||||
|  |  * do the same kind of processing (ideally, using the same callback function) | ||||||
|  |  * and (2) they can/should be executed at the same time in a cpr | ||||||
|  |  * suspend/resume operation. | ||||||
|  |  * | ||||||
|  |  * Note: The DAEMON class, in particular, is for stopping kernel threads | ||||||
|  |  * and nothing else.  The CALLB_* macros below should be used to deal | ||||||
|  |  * with kernel threads, and the callback function should be callb_generic_cpr. | ||||||
|  |  * Another idiosyncrasy of the DAEMON class is that if a suspend operation | ||||||
|  |  * fails, some of the callback functions may be called with the RESUME | ||||||
|  |  * code which were never called with SUSPEND.  Not a problem currently, | ||||||
|  |  * but see bug 4201851. | ||||||
|  |  */ | ||||||
|  | #define	CB_CL_CPR_DAEMON	0 | ||||||
|  | #define	CB_CL_CPR_VM		1 | ||||||
|  | #define	CB_CL_CPR_CALLOUT	2 | ||||||
|  | #define	CB_CL_CPR_OBP		3 | ||||||
|  | #define	CB_CL_CPR_FB		4 | ||||||
|  | #define	CB_CL_PANIC		5 | ||||||
|  | #define	CB_CL_CPR_RPC		6 | ||||||
|  | #define	CB_CL_CPR_PROMPRINTF	7 | ||||||
|  | #define	CB_CL_UADMIN		8 | ||||||
|  | #define	CB_CL_CPR_PM		9 | ||||||
|  | #define	CB_CL_HALT		10 | ||||||
|  | #define	CB_CL_CPR_DMA		11 | ||||||
|  | #define	CB_CL_CPR_POST_USER	12 | ||||||
|  | #define	CB_CL_UADMIN_PRE_VFS    13 | ||||||
|  | #define	CB_CL_MDBOOT		CB_CL_UADMIN | ||||||
|  | #define	CB_CL_ENTER_DEBUGGER	14 | ||||||
|  | #define	CB_CL_CPR_POST_KERNEL	15 | ||||||
|  | #define	CB_CL_CPU_DEEP_IDLE	16 | ||||||
|  | #define	NCBCLASS		17 /* CHANGE ME if classes are added/removed */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * CB_CL_CPR_DAEMON class specific definitions are given below: | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * code for CPR callb_execute_class | ||||||
|  |  */ | ||||||
|  | #define	CB_CODE_CPR_CHKPT	0 | ||||||
|  | #define	CB_CODE_CPR_RESUME	1 | ||||||
|  | 
 | ||||||
|  | typedef	void *		callb_id_t; | ||||||
|  | /*
 | ||||||
|  |  * Per kernel thread structure for CPR daemon callbacks. | ||||||
|  |  * Must be protected by either a existing lock in the daemon or | ||||||
|  |  * a new lock created for such a purpose. | ||||||
|  |  */ | ||||||
|  | typedef struct callb_cpr { | ||||||
|  | 	kmutex_t	*cc_lockp;	/* lock to protect this struct */ | ||||||
|  | 	char		cc_events;	/* various events for CPR */ | ||||||
|  | 	callb_id_t	cc_id;		/* callb id address */ | ||||||
|  | 	kcondvar_t	cc_callb_cv;	/* cv for callback waiting */ | ||||||
|  | 	kcondvar_t	cc_stop_cv;	/* cv to checkpoint block */ | ||||||
|  | } callb_cpr_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * cc_events definitions | ||||||
|  |  */ | ||||||
|  | #define	CALLB_CPR_START		1	/* a checkpoint request's started */ | ||||||
|  | #define	CALLB_CPR_SAFE		2	/* thread is safe for CPR */ | ||||||
|  | #define	CALLB_CPR_ALWAYS_SAFE	4	/* thread is ALWAYS safe for CPR */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used when checking that all kernel threads are stopped. | ||||||
|  |  */ | ||||||
|  | #define	CALLB_MAX_RETRY		3	/* when waiting for kthread to sleep */ | ||||||
|  | #define	CALLB_THREAD_DELAY	10	/* ticks allowed to reach sleep */ | ||||||
|  | #define	CPR_KTHREAD_TIMEOUT_SEC	90	/* secs before callback times out -- */ | ||||||
|  | 					/* due to pwr mgmt of disks, make -- */ | ||||||
|  | 					/* big enough for worst spinup time */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * | ||||||
|  |  * CALLB_CPR_INIT macro is used by kernel threads to add their entry to | ||||||
|  |  * the callback table and perform other initialization.  It automatically | ||||||
|  |  * adds the thread as being in the callback class CB_CL_CPR_DAEMON. | ||||||
|  |  * | ||||||
|  |  *	cp    - ptr to the callb_cpr_t structure for this kernel thread | ||||||
|  |  * | ||||||
|  |  *	lockp - pointer to mutex protecting the callb_cpr_t stuct | ||||||
|  |  * | ||||||
|  |  *	func  - pointer to the callback function for this kernel thread. | ||||||
|  |  *		It has the prototype boolean_t <func>(void *arg, int code) | ||||||
|  |  *		where: arg	- ptr to the callb_cpr_t structure | ||||||
|  |  *		       code	- not used for this type of callback | ||||||
|  |  *		returns: B_TRUE if successful; B_FALSE if unsuccessful. | ||||||
|  |  * | ||||||
|  |  *	name  - a string giving the name of the kernel thread | ||||||
|  |  * | ||||||
|  |  * Note: lockp is the lock to protect the callb_cpr_t (cp) structure | ||||||
|  |  * later on.  No lock held is needed for this initialization. | ||||||
|  |  */ | ||||||
|  | #define	CALLB_CPR_INIT(cp, lockp, func, name)	{			\ | ||||||
|  | 		strlcpy(curthread->td_name, (name),			\ | ||||||
|  | 		    sizeof (curthread->td_name));			\ | ||||||
|  | 		bzero((caddr_t)(cp), sizeof (callb_cpr_t));		\ | ||||||
|  | 		(cp)->cc_lockp = lockp;					\ | ||||||
|  | 		(cp)->cc_id = callb_add(func, (void *)(cp),		\ | ||||||
|  | 			CB_CL_CPR_DAEMON, name);			\ | ||||||
|  | 		cv_init(&(cp)->cc_callb_cv, NULL, CV_DEFAULT, NULL);	\ | ||||||
|  | 		cv_init(&(cp)->cc_stop_cv, NULL, CV_DEFAULT, NULL);	\ | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | #ifndef __lock_lint | ||||||
|  | #define	CALLB_CPR_ASSERT(cp)	ASSERT(MUTEX_HELD((cp)->cc_lockp)); | ||||||
|  | #else | ||||||
|  | #define	CALLB_CPR_ASSERT(cp) | ||||||
|  | #endif | ||||||
|  | /*
 | ||||||
|  |  * Some threads (like the idle threads) do not adhere to the callback | ||||||
|  |  * protocol and are always considered safe.  Such threads must never exit. | ||||||
|  |  * They register their presence by calling this macro during their | ||||||
|  |  * initialization. | ||||||
|  |  * | ||||||
|  |  * Args: | ||||||
|  |  *	t	- thread pointer of the client kernel thread | ||||||
|  |  *	name	- a string giving the name of the kernel thread | ||||||
|  |  */ | ||||||
|  | #define	CALLB_CPR_INIT_SAFE(t, name) {					\ | ||||||
|  | 		(void) callb_add_thread(callb_generic_cpr_safe,		\ | ||||||
|  | 		(void *) &callb_cprinfo_safe, CB_CL_CPR_DAEMON,		\ | ||||||
|  | 		    name, t);						\ | ||||||
|  | 	} | ||||||
|  | /*
 | ||||||
|  |  * The lock to protect cp's content must be held before | ||||||
|  |  * calling the following two macros. | ||||||
|  |  * | ||||||
|  |  * Any code region between CALLB_CPR_SAFE_BEGIN and CALLB_CPR_SAFE_END | ||||||
|  |  * is safe for checkpoint/resume. | ||||||
|  |  */ | ||||||
|  | #define	CALLB_CPR_SAFE_BEGIN(cp) { 			\ | ||||||
|  | 		CALLB_CPR_ASSERT(cp)			\ | ||||||
|  | 		(cp)->cc_events |= CALLB_CPR_SAFE;	\ | ||||||
|  | 		if ((cp)->cc_events & CALLB_CPR_START)	\ | ||||||
|  | 			cv_signal(&(cp)->cc_callb_cv);	\ | ||||||
|  | 	} | ||||||
|  | #define	CALLB_CPR_SAFE_END(cp, lockp) {				\ | ||||||
|  | 		CALLB_CPR_ASSERT(cp)				\ | ||||||
|  | 		while ((cp)->cc_events & CALLB_CPR_START)	\ | ||||||
|  | 			cv_wait(&(cp)->cc_stop_cv, lockp);	\ | ||||||
|  | 		(cp)->cc_events &= ~CALLB_CPR_SAFE;		\ | ||||||
|  | 	} | ||||||
|  | /*
 | ||||||
|  |  * cv_destroy is nop right now but may be needed in the future. | ||||||
|  |  */ | ||||||
|  | #define	CALLB_CPR_EXIT(cp) {				\ | ||||||
|  | 		CALLB_CPR_ASSERT(cp)			\ | ||||||
|  | 		(cp)->cc_events |= CALLB_CPR_SAFE;	\ | ||||||
|  | 		if ((cp)->cc_events & CALLB_CPR_START)	\ | ||||||
|  | 			cv_signal(&(cp)->cc_callb_cv);	\ | ||||||
|  | 		mutex_exit((cp)->cc_lockp);		\ | ||||||
|  | 		(void) callb_delete((cp)->cc_id);	\ | ||||||
|  | 		cv_destroy(&(cp)->cc_callb_cv);		\ | ||||||
|  | 		cv_destroy(&(cp)->cc_stop_cv);		\ | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | extern callb_cpr_t callb_cprinfo_safe; | ||||||
|  | extern callb_id_t callb_add(boolean_t  (*)(void *, int), void *, int, char *); | ||||||
|  | extern callb_id_t callb_add_thread(boolean_t (*)(void *, int), | ||||||
|  |     void *, int, char *, kthread_id_t); | ||||||
|  | extern int	callb_delete(callb_id_t); | ||||||
|  | extern void	callb_execute(callb_id_t, int); | ||||||
|  | extern void	*callb_execute_class(int, int); | ||||||
|  | extern boolean_t callb_generic_cpr(void *, int); | ||||||
|  | extern boolean_t callb_generic_cpr_safe(void *, int); | ||||||
|  | extern boolean_t callb_is_stopped(kthread_id_t, caddr_t *); | ||||||
|  | extern void	callb_lock_table(void); | ||||||
|  | extern void	callb_unlock_table(void); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_CALLB_H */ | ||||||
							
								
								
									
										372
									
								
								include/os/freebsd/spl/sys/ccompile.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										372
									
								
								include/os/freebsd/spl/sys/ccompile.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,372 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License, Version 1.0 only | ||||||
|  |  * (the "License").  You may not use this file except in compliance | ||||||
|  |  * with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_CCOMPILE_H | ||||||
|  | #define	_SYS_CCOMPILE_H | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This file contains definitions designed to enable different compilers | ||||||
|  |  * to be used harmoniously on Solaris systems. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Allow for version tests for compiler bugs and features. | ||||||
|  |  */ | ||||||
|  | #if defined(__GNUC__) | ||||||
|  | #define	__GNUC_VERSION	\ | ||||||
|  | 	(__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) | ||||||
|  | #else | ||||||
|  | #define	__GNUC_VERSION	0 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if defined(__ATTRIBUTE_IMPLEMENTED) || defined(__GNUC__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * analogous to lint's PRINTFLIKEn | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___PRINTFLIKE__(__n)	\ | ||||||
|  | 		__attribute__((__format__(printf, __n, (__n)+1))) | ||||||
|  | #define	__sun_attr___VPRINTFLIKE__(__n)	\ | ||||||
|  | 		__attribute__((__format__(printf, __n, 0))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Handle the kernel printf routines that can take '%b' too | ||||||
|  |  */ | ||||||
|  | #if __GNUC_VERSION < 30402 | ||||||
|  | /*
 | ||||||
|  |  * XX64 at least this doesn't work correctly yet with 3.4.1 anyway! | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___KPRINTFLIKE__	__sun_attr___PRINTFLIKE__ | ||||||
|  | #define	__sun_attr___KVPRINTFLIKE__	__sun_attr___VPRINTFLIKE__ | ||||||
|  | #else | ||||||
|  | #define	__sun_attr___KPRINTFLIKE__(__n)	\ | ||||||
|  | 		__attribute__((__format__(cmn_err, __n, (__n)+1))) | ||||||
|  | #define	__sun_attr___KVPRINTFLIKE__(__n) \ | ||||||
|  | 		__attribute__((__format__(cmn_err, __n, 0))) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This one's pretty obvious -- the function never returns | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___noreturn__ __attribute__((__noreturn__)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This is an appropriate label for functions that do not | ||||||
|  |  * modify their arguments, e.g. strlen() | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___pure__	__attribute__((__pure__)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This is a stronger form of __pure__. Can be used for functions | ||||||
|  |  * that do not modify their arguments and don't depend on global | ||||||
|  |  * memory. | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___const__	__attribute__((__const__)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * structure packing like #pragma pack(1) | ||||||
|  |  */ | ||||||
|  | #define	__sun_attr___packed__	__attribute__((__packed__)) | ||||||
|  | 
 | ||||||
|  | #define	___sun_attr_inner(__a)	__sun_attr_##__a | ||||||
|  | #define	__sun_attr__(__a)	___sun_attr_inner __a | ||||||
|  | 
 | ||||||
|  | #else	/* __ATTRIBUTE_IMPLEMENTED || __GNUC__ */ | ||||||
|  | 
 | ||||||
|  | #define	__sun_attr__(__a) | ||||||
|  | 
 | ||||||
|  | #endif	/* __ATTRIBUTE_IMPLEMENTED || __GNUC__ */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Shorthand versions for readability | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	__PRINTFLIKE(__n)	__sun_attr__((__PRINTFLIKE__(__n))) | ||||||
|  | #define	__VPRINTFLIKE(__n)	__sun_attr__((__VPRINTFLIKE__(__n))) | ||||||
|  | #define	__KPRINTFLIKE(__n)	__sun_attr__((__KPRINTFLIKE__(__n))) | ||||||
|  | #define	__KVPRINTFLIKE(__n)	__sun_attr__((__KVPRINTFLIKE__(__n))) | ||||||
|  | #ifdef _KERNEL | ||||||
|  | #define	__NORETURN		__sun_attr__((__noreturn__)) | ||||||
|  | #endif | ||||||
|  | #define	__CONST			__sun_attr__((__const__)) | ||||||
|  | #define	__PURE			__sun_attr__((__pure__)) | ||||||
|  | 
 | ||||||
|  | #if (defined(ZFS_DEBUG) || !defined(NDEBUG))&& !defined(DEBUG) | ||||||
|  | #define	DEBUG | ||||||
|  | #endif | ||||||
|  | #define	EXPORT_SYMBOL(x) | ||||||
|  | #define	MODULE_AUTHOR(s) | ||||||
|  | #define	MODULE_DESCRIPTION(s) | ||||||
|  | #define	MODULE_LICENSE(s) | ||||||
|  | #define	module_param(a, b, c) | ||||||
|  | #define	module_param_call(a, b, c, d, e) | ||||||
|  | #define	module_param_named(a, b, c, d) | ||||||
|  | #define	MODULE_PARM_DESC(a, b) | ||||||
|  | #define	asm __asm | ||||||
|  | #ifdef ZFS_DEBUG | ||||||
|  | #undef NDEBUG | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifndef EINTEGRITY | ||||||
|  | #define	EINTEGRITY 97 /* EINTEGRITY is new in 13 */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * These are bespoke errnos used in ZFS. We map them to their closest FreeBSD | ||||||
|  |  * equivalents. This gives us more useful error messages from strerror(3). | ||||||
|  |  */ | ||||||
|  | #define	ECKSUM	EINTEGRITY | ||||||
|  | #define	EFRAGS	ENOSPC | ||||||
|  | 
 | ||||||
|  | /* Similar for ENOACTIVE */ | ||||||
|  | #define	ENOTACTIVE	ECANCELED | ||||||
|  | 
 | ||||||
|  | #define	EREMOTEIO EREMOTE | ||||||
|  | #define	ECHRNG ENXIO | ||||||
|  | #define	ETIME ETIMEDOUT | ||||||
|  | 
 | ||||||
|  | #define	O_LARGEFILE 0 | ||||||
|  | #define	O_RSYNC 0 | ||||||
|  | #define	O_DSYNC 0 | ||||||
|  | 
 | ||||||
|  | #define	KMALLOC_MAX_SIZE MAXPHYS | ||||||
|  | 
 | ||||||
|  | #ifdef _KERNEL | ||||||
|  | typedef unsigned long long	u_longlong_t; | ||||||
|  | typedef long long		longlong_t; | ||||||
|  | 
 | ||||||
|  | #include <linux/types.h> | ||||||
|  | typedef	void zfs_kernel_param_t; | ||||||
|  | #define	param_set_charp(a, b) (0) | ||||||
|  | #define	ATTR_UID AT_UID | ||||||
|  | #define	ATTR_GID AT_GID | ||||||
|  | #define	ATTR_MODE AT_MODE | ||||||
|  | #define	ATTR_XVATTR	AT_XVATTR | ||||||
|  | #define	ATTR_CTIME	AT_CTIME | ||||||
|  | #define	ATTR_MTIME	AT_MTIME | ||||||
|  | #define	ATTR_ATIME	AT_ATIME | ||||||
|  | #define	vmem_free zfs_kmem_free | ||||||
|  | #define	vmem_zalloc(size, flags) zfs_kmem_alloc(size, flags | M_ZERO) | ||||||
|  | #define	vmem_alloc zfs_kmem_alloc | ||||||
|  | #define	MUTEX_NOLOCKDEP 0 | ||||||
|  | #define	RW_NOLOCKDEP 0 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #if  __FreeBSD_version < 1300051 | ||||||
|  | #define	vm_page_valid(m) (m)->valid = VM_PAGE_BITS_ALL | ||||||
|  | #define	vm_page_do_sunbusy(m) | ||||||
|  | #define	vm_page_none_valid(m) ((m)->valid == 0) | ||||||
|  | #else | ||||||
|  | #define	vm_page_do_sunbusy(m) vm_page_sunbusy(m) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if  __FreeBSD_version < 1300074 | ||||||
|  | #define	VOP_UNLOCK1(x)	VOP_UNLOCK(x, 0) | ||||||
|  | #else | ||||||
|  | #define	VOP_UNLOCK1(x)	VOP_UNLOCK(x) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if  __FreeBSD_version < 1300064 | ||||||
|  | #define	VN_IS_DOOMED(vp)	((vp)->v_iflag & VI_DOOMED) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if  __FreeBSD_version < 1300068 | ||||||
|  | #define	VFS_VOP_VECTOR_REGISTER(x) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if  __FreeBSD_version >= 1300076 | ||||||
|  | #define	getnewvnode_reserve_()	getnewvnode_reserve() | ||||||
|  | #else | ||||||
|  | #define	getnewvnode_reserve_()	getnewvnode_reserve(1) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | struct hlist_node { | ||||||
|  | 	struct hlist_node *next, **pprev; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct hlist_head { | ||||||
|  | 	struct hlist_node *first; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  | 	volatile int counter; | ||||||
|  | } atomic_t; | ||||||
|  | 
 | ||||||
|  | 	/* BEGIN CSTYLED */ | ||||||
|  | #define	hlist_for_each(p, head)                                      \ | ||||||
|  | 	for (p = (head)->first; p; p = (p)->next) | ||||||
|  | 
 | ||||||
|  | #define	hlist_entry(ptr, type, field)   container_of(ptr, type, field) | ||||||
|  | 
 | ||||||
|  | #define	container_of(ptr, type, member)                         \ | ||||||
|  | ({                                                              \ | ||||||
|  |         const __typeof(((type *)0)->member) *__p = (ptr);       \ | ||||||
|  |         (type *)((uintptr_t)__p - offsetof(type, member));      \ | ||||||
|  | }) | ||||||
|  | 	/* END CSTYLED */ | ||||||
|  | 
 | ||||||
|  | static inline void | ||||||
|  | hlist_add_head(struct hlist_node *n, struct hlist_head *h) | ||||||
|  | { | ||||||
|  | 	n->next = h->first; | ||||||
|  | 	if (h->first != NULL) | ||||||
|  | 		h->first->pprev = &n->next; | ||||||
|  | 	WRITE_ONCE(h->first, n); | ||||||
|  | 	n->pprev = &h->first; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline void | ||||||
|  | hlist_del(struct hlist_node *n) | ||||||
|  | { | ||||||
|  | 	WRITE_ONCE(*(n->pprev), n->next); | ||||||
|  | 	if (n->next != NULL) | ||||||
|  | 		n->next->pprev = n->pprev; | ||||||
|  | } | ||||||
|  | 	/* BEGIN CSTYLED */ | ||||||
|  | #define	READ_ONCE(x) ({			\ | ||||||
|  | 	__typeof(x) __var = ({		\ | ||||||
|  | 		barrier();		\ | ||||||
|  | 		ACCESS_ONCE(x);		\ | ||||||
|  | 	});				\ | ||||||
|  | 	barrier();			\ | ||||||
|  | 	__var;				\ | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | #define	HLIST_HEAD_INIT { } | ||||||
|  | #define	HLIST_HEAD(name) struct hlist_head name = HLIST_HEAD_INIT | ||||||
|  | #define	INIT_HLIST_HEAD(head) (head)->first = NULL | ||||||
|  | 
 | ||||||
|  | #define	INIT_HLIST_NODE(node)					\ | ||||||
|  | 	do {																\ | ||||||
|  | 		(node)->next = NULL;											\ | ||||||
|  | 		(node)->pprev = NULL;											\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | /* END CSTYLED */ | ||||||
|  | static inline int | ||||||
|  | atomic_read(const atomic_t *v) | ||||||
|  | { | ||||||
|  | 	return (READ_ONCE(v->counter)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | atomic_inc(atomic_t *v) | ||||||
|  | { | ||||||
|  | 	return (atomic_fetchadd_int(&v->counter, 1) + 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | atomic_dec(atomic_t *v) | ||||||
|  | { | ||||||
|  | 	return (atomic_fetchadd_int(&v->counter, -1) - 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | typedef long loff_t; | ||||||
|  | typedef long rlim64_t; | ||||||
|  | typedef int bool_t; | ||||||
|  | typedef int enum_t; | ||||||
|  | #define	__init | ||||||
|  | #define	__exit | ||||||
|  | #define	FALSE 0 | ||||||
|  | #define	TRUE 1 | ||||||
|  | 	/*
 | ||||||
|  | 	 * XXX We really need to consolidate on standard | ||||||
|  | 	 * error codes in the common code | ||||||
|  | 	 */ | ||||||
|  | #define	ENOSTR ENOTCONN | ||||||
|  | #define	ENODATA EINVAL | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	__XSI_VISIBLE 1000 | ||||||
|  | #define	__BSD_VISIBLE 1 | ||||||
|  | #define	__POSIX_VISIBLE 201808 | ||||||
|  | #define	ARRAY_SIZE(a) (sizeof (a) / sizeof (a[0])) | ||||||
|  | #define	open64 open | ||||||
|  | #define	pwrite64 pwrite | ||||||
|  | #define	ftruncate64 ftruncate | ||||||
|  | #define	lseek64 lseek | ||||||
|  | #define	pread64 pread | ||||||
|  | #define	stat64 stat | ||||||
|  | #define	lstat64 lstat | ||||||
|  | #define	statfs64 statfs | ||||||
|  | #define	readdir64 readdir | ||||||
|  | #define	dirent64 dirent | ||||||
|  | #define	P2ALIGN(x, align)		((x) & -(align)) | ||||||
|  | #define	P2CROSS(x, y, align)	(((x) ^ (y)) > (align) - 1) | ||||||
|  | #define	P2ROUNDUP(x, align)		((((x) - 1) | ((align) - 1)) + 1) | ||||||
|  | #define	P2PHASE(x, align)		((x) & ((align) - 1)) | ||||||
|  | #define	P2NPHASE(x, align)		(-(x) & ((align) - 1)) | ||||||
|  | #define	ISP2(x)			(((x) & ((x) - 1)) == 0) | ||||||
|  | #define	IS_P2ALIGNED(v, a)	((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0) | ||||||
|  | #define	P2BOUNDARY(off, len, align) \ | ||||||
|  | 	(((off) ^ ((off) + (len) - 1)) > (align) - 1) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Typed version of the P2* macros.  These macros should be used to ensure | ||||||
|  |  * that the result is correctly calculated based on the data type of (x), | ||||||
|  |  * which is passed in as the last argument, regardless of the data | ||||||
|  |  * type of the alignment.  For example, if (x) is of type uint64_t, | ||||||
|  |  * and we want to round it up to a page boundary using "PAGESIZE" as | ||||||
|  |  * the alignment, we can do either | ||||||
|  |  * | ||||||
|  |  * P2ROUNDUP(x, (uint64_t)PAGESIZE) | ||||||
|  |  * or | ||||||
|  |  * P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t) | ||||||
|  |  */ | ||||||
|  | #define	P2ALIGN_TYPED(x, align, type)   \ | ||||||
|  | 	((type)(x) & -(type)(align)) | ||||||
|  | #define	P2PHASE_TYPED(x, align, type)   \ | ||||||
|  | 	((type)(x) & ((type)(align) - 1)) | ||||||
|  | #define	P2NPHASE_TYPED(x, align, type)  \ | ||||||
|  | 	(-(type)(x) & ((type)(align) - 1)) | ||||||
|  | #define	P2ROUNDUP_TYPED(x, align, type) \ | ||||||
|  | 	((((type)(x) - 1) | ((type)(align) - 1)) + 1) | ||||||
|  | #define	P2END_TYPED(x, align, type)     \ | ||||||
|  | 	(-(~(type)(x) & -(type)(align))) | ||||||
|  | #define	P2PHASEUP_TYPED(x, align, phase, type)  \ | ||||||
|  | 	((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align))) | ||||||
|  | #define	P2CROSS_TYPED(x, y, align, type)        \ | ||||||
|  | 	(((type)(x) ^ (type)(y)) > (type)(align) - 1) | ||||||
|  | #define	P2SAMEHIGHBIT_TYPED(x, y, type) \ | ||||||
|  | 	(((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y))) | ||||||
|  | 
 | ||||||
|  | #define	DIV_ROUND_UP(n, d)	(((n) + (d) - 1) / (d)) | ||||||
|  | #define	RLIM64_INFINITY RLIM_INFINITY | ||||||
|  | #define	ERESTART EAGAIN | ||||||
|  | #define	ABS(a)	((a) < 0 ? -(a) : (a)) | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_CCOMPILE_H */ | ||||||
							
								
								
									
										100
									
								
								include/os/freebsd/spl/sys/cmn_err.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								include/os/freebsd/spl/sys/cmn_err.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,100 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License, Version 1.0 only | ||||||
|  |  * (the "License").  You may not use this file except in compliance | ||||||
|  |  * with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/ | ||||||
|  | /*	  All Rights Reserved  	*/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_CMN_ERR_H | ||||||
|  | #define	_SYS_CMN_ERR_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #if !defined(_ASM) | ||||||
|  | #include <sys/_stdarg.h> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Common error handling severity levels */ | ||||||
|  | 
 | ||||||
|  | #define	CE_CONT		0	/* continuation		*/ | ||||||
|  | #define	CE_NOTE		1	/* notice		*/ | ||||||
|  | #define	CE_WARN		2	/* warning		*/ | ||||||
|  | #define	CE_PANIC	3	/* panic		*/ | ||||||
|  | #define	CE_IGNORE	4	/* print nothing	*/ | ||||||
|  | 
 | ||||||
|  | #ifndef _ASM | ||||||
|  | 
 | ||||||
|  | /*PRINTFLIKE2*/ | ||||||
|  | extern void cmn_err(int, const char *, ...) | ||||||
|  |     __KPRINTFLIKE(2); | ||||||
|  | #pragma rarely_called(cmn_err) | ||||||
|  | 
 | ||||||
|  | extern void vzcmn_err(zoneid_t, int, const char *, __va_list) | ||||||
|  |     __KVPRINTFLIKE(3); | ||||||
|  | #pragma rarely_called(vzcmn_err) | ||||||
|  | 
 | ||||||
|  | extern void vcmn_err(int, const char *, __va_list) | ||||||
|  |     __KVPRINTFLIKE(2); | ||||||
|  | #pragma rarely_called(vcmn_err) | ||||||
|  | 
 | ||||||
|  | /*PRINTFLIKE3*/ | ||||||
|  | extern void zcmn_err(zoneid_t, int, const char *, ...) | ||||||
|  |     __KPRINTFLIKE(3); | ||||||
|  | #pragma rarely_called(zcmn_err) | ||||||
|  | 
 | ||||||
|  | extern void vzprintf(zoneid_t, const char *, __va_list) | ||||||
|  |     __KVPRINTFLIKE(2); | ||||||
|  | #pragma rarely_called(vzprintf) | ||||||
|  | 
 | ||||||
|  | /*PRINTFLIKE2*/ | ||||||
|  | extern void zprintf(zoneid_t, const char *, ...) | ||||||
|  |     __KPRINTFLIKE(2); | ||||||
|  | #pragma rarely_called(zprintf) | ||||||
|  | 
 | ||||||
|  | extern void vuprintf(const char *, __va_list) | ||||||
|  |     __KVPRINTFLIKE(1); | ||||||
|  | #pragma rarely_called(vuprintf) | ||||||
|  | 
 | ||||||
|  | /*PRINTFLIKE1*/ | ||||||
|  | extern void panic(const char *, ...) | ||||||
|  |     __KPRINTFLIKE(1) __NORETURN; | ||||||
|  | #pragma rarely_called(panic) | ||||||
|  | 
 | ||||||
|  | extern void vpanic(const char *, __va_list) | ||||||
|  |     __KVPRINTFLIKE(1) __NORETURN; | ||||||
|  | #pragma rarely_called(vpanic) | ||||||
|  | 
 | ||||||
|  | #endif /* !_ASM */ | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_CMN_ERR_H */ | ||||||
							
								
								
									
										170
									
								
								include/os/freebsd/spl/sys/condvar.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								include/os/freebsd/spl/sys/condvar.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,170 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org> | ||||||
|  |  * Copyright (c) 2013 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_CONDVAR_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_CONDVAR_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | 
 | ||||||
|  | #include <sys/spl_condvar.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <sys/time.h> | ||||||
|  | #include <sys/kmem.h> | ||||||
|  | 
 | ||||||
|  | static __inline sbintime_t | ||||||
|  | zfs_nstosbt(int64_t _ns) | ||||||
|  | { | ||||||
|  | 	sbintime_t sb = 0; | ||||||
|  | 
 | ||||||
|  | #ifdef KASSERT | ||||||
|  | 	KASSERT(_ns >= 0, ("Negative values illegal for nstosbt: %jd", _ns)); | ||||||
|  | #endif | ||||||
|  | 	if (_ns >= SBT_1S) { | ||||||
|  | 		sb = (_ns / 1000000000) * SBT_1S; | ||||||
|  | 		_ns = _ns % 1000000000; | ||||||
|  | 	} | ||||||
|  | 	/* 9223372037 = ceil(2^63 / 1000000000) */ | ||||||
|  | 	sb += ((_ns * 9223372037ull) + 0x7fffffff) >> 31; | ||||||
|  | 	return (sb); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | typedef struct cv	kcondvar_t; | ||||||
|  | #define	CALLOUT_FLAG_ABSOLUTE C_ABSOLUTE | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  | 	CV_DEFAULT, | ||||||
|  | 	CV_DRIVER | ||||||
|  | } kcv_type_t; | ||||||
|  | 
 | ||||||
|  | #define	zfs_cv_init(cv, name, type, arg)	do {			\ | ||||||
|  | 	const char *_name;						\ | ||||||
|  | 	ASSERT((type) == CV_DEFAULT);					\ | ||||||
|  | 	for (_name = #cv; *_name != '\0'; _name++) {			\ | ||||||
|  | 		if (*_name >= 'a' && *_name <= 'z')			\ | ||||||
|  | 			break;						\ | ||||||
|  | 	}								\ | ||||||
|  | 	if (*_name == '\0')						\ | ||||||
|  | 		_name = #cv;						\ | ||||||
|  | 	cv_init((cv), _name);						\ | ||||||
|  | } while (0) | ||||||
|  | #define	cv_init(cv, name, type, arg)	zfs_cv_init(cv, name, type, arg) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | cv_wait_sig(kcondvar_t *cvp, kmutex_t *mp) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	return (_cv_wait_sig(cvp, &(mp)->lock_object) == 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | cv_timedwait(kcondvar_t *cvp, kmutex_t *mp, clock_t timo) | ||||||
|  | { | ||||||
|  | 	int rc; | ||||||
|  | 
 | ||||||
|  | 	timo -= ddi_get_lbolt(); | ||||||
|  | 	if (timo <= 0) | ||||||
|  | 		return (-1); | ||||||
|  | 	rc = _cv_timedwait_sbt((cvp), &(mp)->lock_object, \ | ||||||
|  | 	    tick_sbt * (timo), 0, C_HARDCLOCK); | ||||||
|  | 	if (rc == EWOULDBLOCK) | ||||||
|  | 		return (-1); | ||||||
|  | 	return (1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t timo) | ||||||
|  | { | ||||||
|  | 	int rc; | ||||||
|  | 
 | ||||||
|  | 	timo -= ddi_get_lbolt(); | ||||||
|  | 	if (timo <= 0) | ||||||
|  | 		return (-1); | ||||||
|  | 	rc = _cv_timedwait_sig_sbt(cvp, &(mp)->lock_object, \ | ||||||
|  | 	    tick_sbt * (timo), 0, C_HARDCLOCK); | ||||||
|  | 	if (rc == EWOULDBLOCK) | ||||||
|  | 		return (-1); | ||||||
|  | 	if (rc == EINTR || rc == ERESTART) | ||||||
|  | 		return (0); | ||||||
|  | 
 | ||||||
|  | 	return (1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	cv_timedwait_io cv_timedwait | ||||||
|  | #define	cv_timedwait_sig_io cv_timedwait_sig | ||||||
|  | 
 | ||||||
|  | static inline clock_t | ||||||
|  | cv_timedwait_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, hrtime_t res, | ||||||
|  |     int flag) | ||||||
|  | { | ||||||
|  | 	hrtime_t hrtime; | ||||||
|  | 	int rc; | ||||||
|  | 
 | ||||||
|  | 	ASSERT(tim >= res); | ||||||
|  | 
 | ||||||
|  | 	hrtime = gethrtime(); | ||||||
|  | 	if (flag == 0) | ||||||
|  | 		tim += hrtime; | ||||||
|  | 
 | ||||||
|  | 	if (hrtime >= tim) | ||||||
|  | 		return (tim - hrtime); | ||||||
|  | 	rc = cv_timedwait_sbt(cvp, mp, zfs_nstosbt(tim), | ||||||
|  | 	    zfs_nstosbt(res), C_ABSOLUTE); | ||||||
|  | 
 | ||||||
|  | 	KASSERT(rc == EWOULDBLOCK || rc == 0, ("unexpected rc value %d", rc)); | ||||||
|  | 	return (tim - gethrtime()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline clock_t | ||||||
|  | cv_timedwait_sig_hires(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim, | ||||||
|  |     hrtime_t res, int flag) | ||||||
|  | { | ||||||
|  | 	sbintime_t sbt; | ||||||
|  | 	hrtime_t hrtime; | ||||||
|  | 	int rc; | ||||||
|  | 
 | ||||||
|  | 	ASSERT(tim >= res); | ||||||
|  | 
 | ||||||
|  | 	hrtime = gethrtime(); | ||||||
|  | 	if (flag == 0) | ||||||
|  | 		tim += hrtime; | ||||||
|  | 
 | ||||||
|  | 	if (hrtime >= tim) | ||||||
|  | 		return (tim - hrtime); | ||||||
|  | 
 | ||||||
|  | 	sbt = zfs_nstosbt(tim); | ||||||
|  | 	rc = cv_timedwait_sig_sbt(cvp, mp, sbt, zfs_nstosbt(res), C_ABSOLUTE); | ||||||
|  | 
 | ||||||
|  | 	KASSERT(rc == EWOULDBLOCK || rc == EINTR || rc == ERESTART || | ||||||
|  | 	    rc == 0, ("unexpected rc value %d", rc)); | ||||||
|  | 	return (tim - gethrtime()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_CONDVAR_H_ */ | ||||||
							
								
								
									
										48
									
								
								include/os/freebsd/spl/sys/console.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								include/os/freebsd/spl/sys/console.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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	_SPL_CONSOLE_H | ||||||
|  | #define	_SPL_CONSOLE_H | ||||||
|  | 
 | ||||||
|  | static inline void | ||||||
|  | console_vprintf(const char *fmt, va_list args) | ||||||
|  | { | ||||||
|  | 	vprintf(fmt, args); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline void | ||||||
|  | console_printf(const char *fmt, ...) | ||||||
|  | { | ||||||
|  | 	va_list args; | ||||||
|  | 
 | ||||||
|  | 	va_start(args, fmt); | ||||||
|  | 	console_vprintf(fmt, args); | ||||||
|  | 	va_end(args); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif /* _SPL_CONSOLE_H */ | ||||||
							
								
								
									
										188
									
								
								include/os/freebsd/spl/sys/cred.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								include/os/freebsd/spl/sys/cred.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,188 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/ | ||||||
|  | /*	  All Rights Reserved  	*/ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Portions of this source code were derived from Berkeley 4.3 BSD | ||||||
|  |  * under license from the Regents of the University of California. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_CRED_H | ||||||
|  | #define	_SYS_CRED_H | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The credential is an opaque kernel private data structure defined in | ||||||
|  |  * <sys/cred_impl.h>. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | typedef struct ucred cred_t; | ||||||
|  | 
 | ||||||
|  | #define	CRED()		curthread->td_ucred | ||||||
|  | #define	kcred	(thread0.td_ucred) | ||||||
|  | 
 | ||||||
|  | #define	KUID_TO_SUID(x)		(x) | ||||||
|  | #define	KGID_TO_SGID(x)		(x) | ||||||
|  | #define	crgetuid(cred)		((cred)->cr_uid) | ||||||
|  | #define	crgetruid(cred)		((cred)->cr_ruid) | ||||||
|  | #define	crgetgid(cred)		((cred)->cr_gid) | ||||||
|  | #define	crgetgroups(cred)	((cred)->cr_groups) | ||||||
|  | #define	crgetngroups(cred)	((cred)->cr_ngroups) | ||||||
|  | #define	crgetsid(cred, i)	(NULL) | ||||||
|  | 
 | ||||||
|  | struct proc;				/* cred.h is included in proc.h */ | ||||||
|  | struct prcred; | ||||||
|  | struct ksid; | ||||||
|  | struct ksidlist; | ||||||
|  | struct credklpd; | ||||||
|  | struct credgrp; | ||||||
|  | 
 | ||||||
|  | struct auditinfo_addr;			/* cred.h is included in audit.h */ | ||||||
|  | 
 | ||||||
|  | extern int ngroups_max; | ||||||
|  | /*
 | ||||||
|  |  * kcred is used when you need all privileges. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | extern void cred_init(void); | ||||||
|  | extern void crfree(cred_t *); | ||||||
|  | extern cred_t *cralloc(void);		/* all but ref uninitialized */ | ||||||
|  | extern cred_t *cralloc_ksid(void);	/* cralloc() + ksid alloc'ed */ | ||||||
|  | extern cred_t *crget(void);		/* initialized */ | ||||||
|  | extern void crcopy_to(cred_t *, cred_t *); | ||||||
|  | extern cred_t *crdup(cred_t *); | ||||||
|  | extern void crdup_to(cred_t *, cred_t *); | ||||||
|  | extern cred_t *crgetcred(void); | ||||||
|  | extern void crset(struct proc *, cred_t *); | ||||||
|  | extern void crset_zone_privall(cred_t *); | ||||||
|  | extern int supgroupmember(gid_t, const cred_t *); | ||||||
|  | extern int hasprocperm(const cred_t *, const cred_t *); | ||||||
|  | extern int prochasprocperm(struct proc *, struct proc *, const cred_t *); | ||||||
|  | extern int crcmp(const cred_t *, const cred_t *); | ||||||
|  | extern cred_t *zone_kcred(void); | ||||||
|  | 
 | ||||||
|  | extern gid_t crgetrgid(const cred_t *); | ||||||
|  | extern gid_t crgetsgid(const cred_t *); | ||||||
|  | 
 | ||||||
|  | #define	crgetzoneid(x) (0) | ||||||
|  | extern projid_t crgetprojid(const cred_t *); | ||||||
|  | 
 | ||||||
|  | extern cred_t *crgetmapped(const cred_t *); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | extern const struct auditinfo_addr *crgetauinfo(const cred_t *); | ||||||
|  | extern struct auditinfo_addr *crgetauinfo_modifiable(cred_t *); | ||||||
|  | 
 | ||||||
|  | extern uint_t crgetref(const cred_t *); | ||||||
|  | 
 | ||||||
|  | extern const gid_t *crgetggroups(const struct credgrp *); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Sets real, effective and/or saved uid/gid; | ||||||
|  |  * -1 argument accepted as "no change". | ||||||
|  |  */ | ||||||
|  | extern int crsetresuid(cred_t *, uid_t, uid_t, uid_t); | ||||||
|  | extern int crsetresgid(cred_t *, gid_t, gid_t, gid_t); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Sets real, effective and saved uids/gids all to the same | ||||||
|  |  * values.  Both values must be non-negative and <= MAXUID | ||||||
|  |  */ | ||||||
|  | extern int crsetugid(cred_t *, uid_t, gid_t); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Functions to handle the supplemental group list. | ||||||
|  |  */ | ||||||
|  | extern struct credgrp *crgrpcopyin(int, gid_t *); | ||||||
|  | extern void crgrprele(struct credgrp *); | ||||||
|  | extern void crsetcredgrp(cred_t *, struct credgrp *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interface for setting zone association of credential. | ||||||
|  |  */ | ||||||
|  | struct zone; | ||||||
|  | extern void crsetzone(cred_t *, struct zone *); | ||||||
|  | extern struct zone *crgetzone(const cred_t *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interface for setting project id in credential. | ||||||
|  |  */ | ||||||
|  | extern void crsetprojid(cred_t *, projid_t); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interface for nfs. | ||||||
|  |  */ | ||||||
|  | extern cred_t *crnetadjust(cred_t *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interface for procfs. | ||||||
|  |  */ | ||||||
|  | extern void cred2prcred(const cred_t *, struct prcred *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interfaces for Rampart Trusted Solaris. | ||||||
|  |  */ | ||||||
|  | struct ts_label_s; | ||||||
|  | extern struct ts_label_s *crgetlabel(const cred_t *); | ||||||
|  | extern boolean_t crisremote(const cred_t *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Private interfaces for ephemeral uids. | ||||||
|  |  */ | ||||||
|  | #define	VALID_UID(id, zn)					\ | ||||||
|  | 	((id) <= MAXUID || valid_ephemeral_uid((zn), (id))) | ||||||
|  | 
 | ||||||
|  | #define	VALID_GID(id, zn)					\ | ||||||
|  | 	((id) <= MAXUID || valid_ephemeral_gid((zn), (id))) | ||||||
|  | 
 | ||||||
|  | extern boolean_t valid_ephemeral_uid(struct zone *, uid_t); | ||||||
|  | extern boolean_t valid_ephemeral_gid(struct zone *, gid_t); | ||||||
|  | 
 | ||||||
|  | extern int eph_uid_alloc(struct zone *, int, uid_t *, int); | ||||||
|  | extern int eph_gid_alloc(struct zone *, int, gid_t *, int); | ||||||
|  | 
 | ||||||
|  | extern void crsetsid(cred_t *, struct ksid *, int); | ||||||
|  | extern void crsetsidlist(cred_t *, struct ksidlist *); | ||||||
|  | 
 | ||||||
|  | extern struct ksidlist *crgetsidlist(const cred_t *); | ||||||
|  | 
 | ||||||
|  | extern int crsetpriv(cred_t *, ...); | ||||||
|  | 
 | ||||||
|  | extern struct credklpd *crgetcrklpd(const cred_t *); | ||||||
|  | extern void crsetcrklpd(cred_t *, struct credklpd *); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_CRED_H */ | ||||||
							
								
								
									
										45
									
								
								include/os/freebsd/spl/sys/ctype.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								include/os/freebsd/spl/sys/ctype.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_SYS_CTYPE_H_ | ||||||
|  | #define	_SPL_SYS_CTYPE_H_ | ||||||
|  | #include_next <sys/ctype.h> | ||||||
|  | 
 | ||||||
|  | #define	isalnum(ch)	(isalpha(ch) || isdigit(ch)) | ||||||
|  | #define	iscntrl(C)	(uchar(C) <= 0x1f || uchar(C) == 0x7f) | ||||||
|  | #define	isgraph(C)	((C) >= 0x21 && (C) <= 0x7E) | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | #define	ispunct(C)									 \ | ||||||
|  | 	(((C) >= 0x21 && (C) <= 0x2F) ||				 \ | ||||||
|  | 	 ((C) >= 0x3A && (C) <= 0x40) ||				 \ | ||||||
|  | 	 ((C) >= 0x5B && (C) <= 0x60) ||				 \ | ||||||
|  | 	 ((C) >= 0x7B && (C) <= 0x7E)) | ||||||
|  | /* END CSTYLED */ | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										168
									
								
								include/os/freebsd/spl/sys/debug.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								include/os/freebsd/spl/sys/debug.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,168 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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$ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Available Solaris debug functions.  All of the ASSERT() macros will be | ||||||
|  |  * compiled out when NDEBUG is defined, this is the default behavior for | ||||||
|  |  * the SPL.  To enable assertions use the --enable-debug with configure. | ||||||
|  |  * The VERIFY() functions are never compiled out and cannot be disabled. | ||||||
|  |  * | ||||||
|  |  * PANIC()	- Panic the node and print message. | ||||||
|  |  * ASSERT()	- Assert X is true, if not panic. | ||||||
|  |  * ASSERT3B()	- Assert boolean X OP Y is true, if not panic. | ||||||
|  |  * ASSERT3S()	- Assert signed X OP Y is true, if not panic. | ||||||
|  |  * ASSERT3U()	- Assert unsigned X OP Y is true, if not panic. | ||||||
|  |  * ASSERT3P()	- Assert pointer X OP Y is true, if not panic. | ||||||
|  |  * ASSERT0()	- Assert value is zero, if not panic. | ||||||
|  |  * VERIFY()	- Verify X is true, if not panic. | ||||||
|  |  * VERIFY3B()	- Verify boolean X OP Y is true, if not panic. | ||||||
|  |  * VERIFY3S()	- Verify signed X OP Y is true, if not panic. | ||||||
|  |  * VERIFY3U()	- Verify unsigned X OP Y is true, if not panic. | ||||||
|  |  * VERIFY3P()	- Verify pointer X OP Y is true, if not panic. | ||||||
|  |  * VERIFY0()	- Verify value is zero, if not panic. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SPL_DEBUG_H | ||||||
|  | #define	_SPL_DEBUG_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Common DEBUG functionality. | ||||||
|  |  */ | ||||||
|  | int spl_panic(const char *file, const char *func, int line, | ||||||
|  |     const char *fmt, ...); | ||||||
|  | void spl_dumpstack(void); | ||||||
|  | 
 | ||||||
|  | #ifndef expect | ||||||
|  | #define	expect(expr, value) (__builtin_expect((expr), (value))) | ||||||
|  | #endif | ||||||
|  | #define	likely(expr)   expect((expr) != 0, 1) | ||||||
|  | #define	unlikely(expr) expect((expr) != 0, 0) | ||||||
|  | 
 | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | #define	PANIC(fmt, a...)						\ | ||||||
|  | 	spl_panic(__FILE__, __FUNCTION__, __LINE__, fmt, ## a) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY(cond)							\ | ||||||
|  | 	(void) (unlikely(!(cond)) &&					\ | ||||||
|  | 	    spl_panic(__FILE__, __FUNCTION__, __LINE__,			\ | ||||||
|  | 	    "%s", "VERIFY(" #cond ") failed\n")) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY3B(LEFT, OP, RIGHT)	do {				\ | ||||||
|  | 		boolean_t _verify3_left = (boolean_t)(LEFT);		\ | ||||||
|  | 		boolean_t _verify3_right = (boolean_t)(RIGHT);		\ | ||||||
|  | 		if (!(_verify3_left OP _verify3_right))			\ | ||||||
|  | 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||||
|  | 		    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "		\ | ||||||
|  | 		    "failed (%d " #OP " %d)\n",				\ | ||||||
|  | 		    (boolean_t) (_verify3_left),			\ | ||||||
|  | 		    (boolean_t) (_verify3_right));			\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY3S(LEFT, OP, RIGHT)	do {				\ | ||||||
|  | 		int64_t _verify3_left = (int64_t)(LEFT);		\ | ||||||
|  | 		int64_t _verify3_right = (int64_t)(RIGHT);		\ | ||||||
|  | 		if (!(_verify3_left OP _verify3_right))			\ | ||||||
|  | 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||||
|  | 		    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "		\ | ||||||
|  | 		    "failed (%lld " #OP " %lld)\n",			\ | ||||||
|  | 		    (long long) (_verify3_left),			\ | ||||||
|  | 		    (long long) (_verify3_right));			\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY3U(LEFT, OP, RIGHT)	do {				\ | ||||||
|  | 		uint64_t _verify3_left = (uint64_t)(LEFT);		\ | ||||||
|  | 		uint64_t _verify3_right = (uint64_t)(RIGHT);		\ | ||||||
|  | 		if (!(_verify3_left OP _verify3_right))			\ | ||||||
|  | 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||||
|  | 		    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "		\ | ||||||
|  | 		    "failed (%llu " #OP " %llu)\n",			\ | ||||||
|  | 		    (unsigned long long) (_verify3_left),		\ | ||||||
|  | 		    (unsigned long long) (_verify3_right));		\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY3P(LEFT, OP, RIGHT)	do {				\ | ||||||
|  | 		uintptr_t _verify3_left = (uintptr_t)(LEFT);		\ | ||||||
|  | 		uintptr_t _verify3_right = (uintptr_t)(RIGHT);		\ | ||||||
|  | 		if (!(_verify3_left OP _verify3_right))			\ | ||||||
|  | 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||||
|  | 		    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "		\ | ||||||
|  | 		    "failed (%px " #OP " %px)\n",			\ | ||||||
|  | 		    (void *) (_verify3_left),				\ | ||||||
|  | 		    (void *) (_verify3_right));				\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | #define	VERIFY0(RIGHT)	do {				\ | ||||||
|  | 		int64_t _verify3_left = (int64_t)(0);		\ | ||||||
|  | 		int64_t _verify3_right = (int64_t)(RIGHT);		\ | ||||||
|  | 		if (!(_verify3_left == _verify3_right))			\ | ||||||
|  | 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||||
|  | 		    "VERIFY3(0 == " #RIGHT ") "				\ | ||||||
|  | 		    "failed (0 == %lld)\n",				\ | ||||||
|  | 		    (long long) (_verify3_right));			\ | ||||||
|  | 	} while (0) | ||||||
|  | #define	CTASSERT_GLOBAL(x)		CTASSERT(x) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Debugging disabled (--disable-debug) | ||||||
|  |  */ | ||||||
|  | #ifdef NDEBUG | ||||||
|  | 
 | ||||||
|  | #define	ASSERT(x)		((void)0) | ||||||
|  | #define	ASSERT3B(x,y,z)		((void)0) | ||||||
|  | #define	ASSERT3S(x,y,z)		((void)0) | ||||||
|  | #define	ASSERT3U(x,y,z)		((void)0) | ||||||
|  | #define	ASSERT3P(x,y,z)		((void)0) | ||||||
|  | #define	ASSERT0(x)		((void)0) | ||||||
|  | #define	IMPLY(A, B)		((void)0) | ||||||
|  | #define	EQUIV(A, B)		((void)0) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Debugging enabled (--enable-debug) | ||||||
|  |  */ | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #define	ASSERT3B	VERIFY3B | ||||||
|  | #define	ASSERT3S	VERIFY3S | ||||||
|  | #define	ASSERT3U	VERIFY3U | ||||||
|  | #define	ASSERT3P	VERIFY3P | ||||||
|  | #define	ASSERT0		VERIFY0 | ||||||
|  | #define	ASSERT		VERIFY | ||||||
|  | #define	IMPLY(A, B) \ | ||||||
|  | 	((void)(((!(A)) || (B)) || \ | ||||||
|  | 	    spl_panic(__FILE__, __FUNCTION__, __LINE__, \ | ||||||
|  | 	    "(" #A ") implies (" #B ")"))) | ||||||
|  | #define	EQUIV(A, B) \ | ||||||
|  | 	((void)((!!(A) == !!(B)) || \ | ||||||
|  | 	    spl_panic(__FILE__, __FUNCTION__, __LINE__, \ | ||||||
|  | 	    "(" #A ") is equivalent to (" #B ")"))) | ||||||
|  | /* END CSTYLED */ | ||||||
|  | 
 | ||||||
|  | #endif /* NDEBUG */ | ||||||
|  | 
 | ||||||
|  | #endif /* SPL_DEBUG_H */ | ||||||
							
								
								
									
										45
									
								
								include/os/freebsd/spl/sys/dirent.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								include/os/freebsd/spl/sys/dirent.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_DIRENT_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_DIRENT_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | 
 | ||||||
|  | #include_next <sys/dirent.h> | ||||||
|  | 
 | ||||||
|  | typedef	struct dirent	dirent64_t; | ||||||
|  | typedef ino_t		ino64_t; | ||||||
|  | 
 | ||||||
|  | #define	dirent64	dirent | ||||||
|  | 
 | ||||||
|  | #define	d_ino	d_fileno | ||||||
|  | 
 | ||||||
|  | #define	DIRENT64_RECLEN(len)	_GENERIC_DIRLEN(len) | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_DIRENT_H_ */ | ||||||
							
								
								
									
										36
									
								
								include/os/freebsd/spl/sys/disp.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								include/os/freebsd/spl/sys/disp.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2013 Andriy Gapon | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_DISP_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_DISP_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/proc.h> | ||||||
|  | 
 | ||||||
|  | #define	kpreempt(x)	kern_yield(PRI_USER) | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_DISP_H_ */ | ||||||
							
								
								
									
										495
									
								
								include/os/freebsd/spl/sys/dkio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										495
									
								
								include/os/freebsd/spl/sys/dkio.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,495 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  * | ||||||
|  |  * $FreeBSD$ | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _OPENSOLARIS_SYS_DKIO_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_DKIO_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h>	/* Needed for NDKMAP define */ | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if defined(_SUNOS_VTOC_16) | ||||||
|  | #define	NDKMAP		16		/* # of logical partitions */ | ||||||
|  | #define	DK_LABEL_LOC	1		/* location of disk label */ | ||||||
|  | #elif defined(_SUNOS_VTOC_8) | ||||||
|  | #define	NDKMAP		8		/* # of logical partitions */ | ||||||
|  | #define	DK_LABEL_LOC	0		/* location of disk label */ | ||||||
|  | #else | ||||||
|  | #error "No VTOC format defined." | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Structures and definitions for disk io control commands | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Structures used as data by ioctl calls. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	DK_DEVLEN	16		/* device name max length, including */ | ||||||
|  | 					/* unit # & NULL (ie - "xyc1") */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used for controller info | ||||||
|  |  */ | ||||||
|  | struct dk_cinfo { | ||||||
|  | 	char	dki_cname[DK_DEVLEN];	/* controller name (no unit #) */ | ||||||
|  | 	ushort_t dki_ctype;		/* controller type */ | ||||||
|  | 	ushort_t dki_flags;		/* flags */ | ||||||
|  | 	ushort_t dki_cnum;		/* controller number */ | ||||||
|  | 	uint_t	dki_addr;		/* controller address */ | ||||||
|  | 	uint_t	dki_space;		/* controller bus type */ | ||||||
|  | 	uint_t	dki_prio;		/* interrupt priority */ | ||||||
|  | 	uint_t	dki_vec;		/* interrupt vector */ | ||||||
|  | 	char	dki_dname[DK_DEVLEN];	/* drive name (no unit #) */ | ||||||
|  | 	uint_t	dki_unit;		/* unit number */ | ||||||
|  | 	uint_t	dki_slave;		/* slave number */ | ||||||
|  | 	ushort_t dki_partition;		/* partition number */ | ||||||
|  | 	ushort_t dki_maxtransfer;	/* max. transfer size in DEV_BSIZE */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Controller types | ||||||
|  |  */ | ||||||
|  | #define	DKC_UNKNOWN	0 | ||||||
|  | #define	DKC_CDROM	1	/* CD-ROM, SCSI or otherwise */ | ||||||
|  | #define	DKC_WDC2880	2 | ||||||
|  | #define	DKC_XXX_0	3	/* unassigned */ | ||||||
|  | #define	DKC_XXX_1	4	/* unassigned */ | ||||||
|  | #define	DKC_DSD5215	5 | ||||||
|  | #define	DKC_ACB4000	7 | ||||||
|  | #define	DKC_MD21	8 | ||||||
|  | #define	DKC_XXX_2	9	/* unassigned */ | ||||||
|  | #define	DKC_NCRFLOPPY	10 | ||||||
|  | #define	DKC_SMSFLOPPY	12 | ||||||
|  | #define	DKC_SCSI_CCS	13	/* SCSI CCS compatible */ | ||||||
|  | #define	DKC_INTEL82072	14	/* native floppy chip */ | ||||||
|  | #define	DKC_MD		16	/* meta-disk (virtual-disk) driver */ | ||||||
|  | #define	DKC_INTEL82077	19	/* 82077 floppy disk controller */ | ||||||
|  | #define	DKC_DIRECT	20	/* Intel direct attached device i.e. IDE */ | ||||||
|  | #define	DKC_PCMCIA_MEM	21	/* PCMCIA memory disk-like type */ | ||||||
|  | #define	DKC_PCMCIA_ATA	22	/* PCMCIA AT Attached type */ | ||||||
|  | #define	DKC_VBD		23	/* virtual block device */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Sun reserves up through 1023 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	DKC_CUSTOMER_BASE	1024 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags | ||||||
|  |  */ | ||||||
|  | #define	DKI_BAD144	0x01	/* use DEC std 144 bad sector fwding */ | ||||||
|  | #define	DKI_MAPTRK	0x02	/* controller does track mapping */ | ||||||
|  | #define	DKI_FMTTRK	0x04	/* formats only full track at a time */ | ||||||
|  | #define	DKI_FMTVOL	0x08	/* formats only full volume at a time */ | ||||||
|  | #define	DKI_FMTCYL	0x10	/* formats only full cylinders at a time */ | ||||||
|  | #define	DKI_HEXUNIT	0x20	/* unit number is printed as 3 hex digits */ | ||||||
|  | #define	DKI_PCMCIA_PFD	0x40	/* PCMCIA pseudo-floppy memory card */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * partition headers:  section 1 | ||||||
|  |  * Returned in struct dk_allmap by ioctl DKIOC[SG]APART (dkio(7I)) | ||||||
|  |  */ | ||||||
|  | struct dk_map { | ||||||
|  | 	uint64_t	dkl_cylno;	/* starting cylinder */ | ||||||
|  | 	uint64_t	dkl_nblk;	/* number of blocks;  if == 0, */ | ||||||
|  | 					/* partition is undefined */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used for all partitions | ||||||
|  |  */ | ||||||
|  | struct dk_allmap { | ||||||
|  | 	struct dk_map	dka_map[NDKMAP]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #if defined(_SYSCALL32) | ||||||
|  | struct dk_allmap32 { | ||||||
|  | 	struct dk_map32	dka_map[NDKMAP]; | ||||||
|  | }; | ||||||
|  | #endif /* _SYSCALL32 */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Definition of a disk's geometry | ||||||
|  |  */ | ||||||
|  | struct dk_geom { | ||||||
|  | 	unsigned short	dkg_ncyl;	/* # of data cylinders */ | ||||||
|  | 	unsigned short	dkg_acyl;	/* # of alternate cylinders */ | ||||||
|  | 	unsigned short	dkg_bcyl;	/* cyl offset (for fixed head area) */ | ||||||
|  | 	unsigned short	dkg_nhead;	/* # of heads */ | ||||||
|  | 	unsigned short	dkg_obs1;	/* obsolete */ | ||||||
|  | 	unsigned short	dkg_nsect;	/* # of data sectors per track */ | ||||||
|  | 	unsigned short	dkg_intrlv;	/* interleave factor */ | ||||||
|  | 	unsigned short	dkg_obs2;	/* obsolete */ | ||||||
|  | 	unsigned short	dkg_obs3;	/* obsolete */ | ||||||
|  | 	unsigned short	dkg_apc;	/* alternates per cyl (SCSI only) */ | ||||||
|  | 	unsigned short	dkg_rpm;	/* revolutions per minute */ | ||||||
|  | 	unsigned short	dkg_pcyl;	/* # of physical cylinders */ | ||||||
|  | 	unsigned short	dkg_write_reinstruct;	/* # sectors to skip, writes */ | ||||||
|  | 	unsigned short	dkg_read_reinstruct;	/* # sectors to skip, reads */ | ||||||
|  | 	unsigned short	dkg_extra[7];	/* for compatible expansion */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * These defines are for historic compatibility with old drivers. | ||||||
|  |  */ | ||||||
|  | #define	dkg_bhead	dkg_obs1	/* used to be head offset */ | ||||||
|  | #define	dkg_gap1	dkg_obs2	/* used to be gap1 */ | ||||||
|  | #define	dkg_gap2	dkg_obs3	/* used to be gap2 */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Disk io control commands | ||||||
|  |  * Warning: some other ioctls with the DIOC prefix exist elsewhere. | ||||||
|  |  * The Generic DKIOC numbers are from	0   -  50. | ||||||
|  |  *	The Floppy Driver uses		51  - 100. | ||||||
|  |  *	The Hard Disk (except SCSI)	101 - 106.	(these are obsolete) | ||||||
|  |  *	The CDROM Driver		151 - 200. | ||||||
|  |  *	The USCSI ioctl			201 - 250. | ||||||
|  |  */ | ||||||
|  | #define	DKIOC		(0x04 << 8) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following ioctls are generic in nature and need to be | ||||||
|  |  * supported as appropriate by all disk drivers | ||||||
|  |  */ | ||||||
|  | #define	DKIOCGGEOM	(DKIOC|1)		/* Get geometry */ | ||||||
|  | #define	DKIOCINFO	(DKIOC|3)		/* Get info */ | ||||||
|  | #define	DKIOCEJECT	(DKIOC|6)		/* Generic 'eject' */ | ||||||
|  | #define	DKIOCGVTOC	(DKIOC|11)		/* Get VTOC */ | ||||||
|  | #define	DKIOCSVTOC	(DKIOC|12)		/* Set VTOC & Write to Disk */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Disk Cache Controls.  These ioctls should be supported by | ||||||
|  |  * all disk drivers. | ||||||
|  |  * | ||||||
|  |  * DKIOCFLUSHWRITECACHE when used from user-mode ignores the ioctl | ||||||
|  |  * argument, but it should be passed as NULL to allow for future | ||||||
|  |  * reinterpretation.  From user-mode, this ioctl request is synchronous. | ||||||
|  |  * | ||||||
|  |  * When invoked from within the kernel, the arg can be NULL to indicate | ||||||
|  |  * a synchronous request or can be the address of a struct dk_callback | ||||||
|  |  * to request an asynchronous callback when the flush request is complete. | ||||||
|  |  * In this case, the flag to the ioctl must include FKIOCTL and the | ||||||
|  |  * dkc_callback field of the pointed to struct must be non-null or the | ||||||
|  |  * request is made synchronously. | ||||||
|  |  * | ||||||
|  |  * In the callback case: if the ioctl returns 0, a callback WILL be performed. | ||||||
|  |  * If the ioctl returns non-zero, a callback will NOT be performed. | ||||||
|  |  * NOTE: In some cases, the callback may be done BEFORE the ioctl call | ||||||
|  |  * returns.  The caller's locking strategy should be prepared for this case. | ||||||
|  |  */ | ||||||
|  | #define	DKIOCFLUSHWRITECACHE	(DKIOC|34)	/* flush cache to phys medium */ | ||||||
|  | 
 | ||||||
|  | struct dk_callback { | ||||||
|  | 	void (*dkc_callback)(void *dkc_cookie, int error); | ||||||
|  | 	void *dkc_cookie; | ||||||
|  | 	int dkc_flag; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* bit flag definitions for dkc_flag */ | ||||||
|  | #define	FLUSH_VOLATILE		0x1	/* Bit 0: if set, only flush */ | ||||||
|  | 					/* volatile cache; otherwise, flush */ | ||||||
|  | 					/* volatile and non-volatile cache */ | ||||||
|  | 
 | ||||||
|  | #define	DKIOCGETWCE		(DKIOC|36)	/* Get current write cache */ | ||||||
|  | 						/* enablement status */ | ||||||
|  | #define	DKIOCSETWCE		(DKIOC|37)	/* Enable/Disable write cache */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following ioctls are used by Sun drivers to communicate | ||||||
|  |  * with their associated format routines. Support of these ioctls | ||||||
|  |  * is not required of foreign drivers | ||||||
|  |  */ | ||||||
|  | #define	DKIOCSGEOM	(DKIOC|2)		/* Set geometry */ | ||||||
|  | #define	DKIOCSAPART	(DKIOC|4)		/* Set all partitions */ | ||||||
|  | #define	DKIOCGAPART	(DKIOC|5)		/* Get all partitions */ | ||||||
|  | #define	DKIOCG_PHYGEOM	(DKIOC|32)		/* get physical geometry */ | ||||||
|  | #define	DKIOCG_VIRTGEOM	(DKIOC|33)		/* get virtual geometry */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following ioctl's are removable media support | ||||||
|  |  */ | ||||||
|  | #define	DKIOCLOCK	(DKIOC|7)	/* Generic 'lock' */ | ||||||
|  | #define	DKIOCUNLOCK	(DKIOC|8)	/* Generic 'unlock' */ | ||||||
|  | #define	DKIOCSTATE	(DKIOC|13)	/* Inquire insert/eject state */ | ||||||
|  | #define	DKIOCREMOVABLE	(DKIOC|16)	/* is media removable */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * ioctl for hotpluggable devices | ||||||
|  |  */ | ||||||
|  | #define	DKIOCHOTPLUGGABLE	(DKIOC|35)	/* is hotpluggable */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Ioctl to force driver to re-read the alternate partition and rebuild | ||||||
|  |  * the internal defect map. | ||||||
|  |  */ | ||||||
|  | #define	DKIOCADDBAD	(DKIOC|20)	/* Re-read the alternate map (IDE) */ | ||||||
|  | #define	DKIOCGETDEF	(DKIOC|21)	/* read defect list (IDE)	   */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used by applications to get disk defect information from IDE | ||||||
|  |  * drives. | ||||||
|  |  */ | ||||||
|  | #ifdef _SYSCALL32 | ||||||
|  | struct defect_header32 { | ||||||
|  | 	int		head; | ||||||
|  | 	caddr32_t	buffer; | ||||||
|  | }; | ||||||
|  | #endif /* _SYSCALL32 */ | ||||||
|  | 
 | ||||||
|  | struct defect_header { | ||||||
|  | 	int		head; | ||||||
|  | 	caddr_t		buffer; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #define	DKIOCPARTINFO	(DKIOC|22)	/* Get partition or slice parameters */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used by applications to get partition or slice information | ||||||
|  |  */ | ||||||
|  | #ifdef _SYSCALL32 | ||||||
|  | struct part_info32 { | ||||||
|  | 	uint32_t	p_start; | ||||||
|  | 	int		p_length; | ||||||
|  | }; | ||||||
|  | #endif /* _SYSCALL32 */ | ||||||
|  | 
 | ||||||
|  | struct part_info { | ||||||
|  | 	uint64_t	p_start; | ||||||
|  | 	int		p_length; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* The following ioctls are for Optical Memory Device */ | ||||||
|  | #define	DKIOC_EBP_ENABLE  (DKIOC|40)	/* enable by pass erase on write */ | ||||||
|  | #define	DKIOC_EBP_DISABLE (DKIOC|41)	/* disable by pass erase on write */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This state enum is the argument passed to the DKIOCSTATE ioctl. | ||||||
|  |  */ | ||||||
|  | enum dkio_state { DKIO_NONE, DKIO_EJECTED, DKIO_INSERTED, DKIO_DEV_GONE }; | ||||||
|  | 
 | ||||||
|  | #define	DKIOCGMEDIAINFO	(DKIOC|42)	/* get information about the media */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * ioctls to read/write mboot info. | ||||||
|  |  */ | ||||||
|  | #define	DKIOCGMBOOT	(DKIOC|43)	/* get mboot info */ | ||||||
|  | #define	DKIOCSMBOOT	(DKIOC|44)	/* set mboot info */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * ioctl to get the device temperature. | ||||||
|  |  */ | ||||||
|  | #define	DKIOCGTEMPERATURE	(DKIOC|45)	/* get temperature */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used for providing the temperature. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | struct	dk_temperature	{ | ||||||
|  | 	uint_t		dkt_flags;	/* Flags */ | ||||||
|  | 	short		dkt_cur_temp;	/* Current disk temperature */ | ||||||
|  | 	short		dkt_ref_temp;	/* reference disk temperature */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #define	DKT_BYPASS_PM		0x1 | ||||||
|  | #define	DKT_INVALID_TEMP	0xFFFF | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Media types or profiles known | ||||||
|  |  */ | ||||||
|  | #define	DK_UNKNOWN		0x00	/* Media inserted - type unknown */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * SFF 8090 Specification Version 3, media types 0x01 - 0xfffe are retained to | ||||||
|  |  * maintain compatibility with SFF8090.  The following define the | ||||||
|  |  * optical media type. | ||||||
|  |  */ | ||||||
|  | #define	DK_REMOVABLE_DISK	0x02 /* Removable Disk */ | ||||||
|  | #define	DK_MO_ERASABLE		0x03 /* MO Erasable */ | ||||||
|  | #define	DK_MO_WRITEONCE		0x04 /* MO Write once */ | ||||||
|  | #define	DK_AS_MO		0x05 /* AS MO */ | ||||||
|  | #define	DK_CDROM		0x08 /* CDROM */ | ||||||
|  | #define	DK_CDR			0x09 /* CD-R */ | ||||||
|  | #define	DK_CDRW			0x0A /* CD-RW */ | ||||||
|  | #define	DK_DVDROM		0x10 /* DVD-ROM */ | ||||||
|  | #define	DK_DVDR			0x11 /* DVD-R */ | ||||||
|  | #define	DK_DVDRAM		0x12 /* DVD_RAM or DVD-RW */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Media types for other rewritable magnetic media | ||||||
|  |  */ | ||||||
|  | #define	DK_FIXED_DISK		0x10001	/* Fixed disk SCSI or otherwise */ | ||||||
|  | #define	DK_FLOPPY		0x10002 /* Floppy media */ | ||||||
|  | #define	DK_ZIP			0x10003 /* IOMEGA ZIP media */ | ||||||
|  | #define	DK_JAZ			0x10004 /* IOMEGA JAZ media */ | ||||||
|  | 
 | ||||||
|  | #define	DKIOCSETEFI	(DKIOC|17)		/* Set EFI info */ | ||||||
|  | #define	DKIOCGETEFI	(DKIOC|18)		/* Get EFI info */ | ||||||
|  | 
 | ||||||
|  | #define	DKIOCPARTITION	(DKIOC|9)		/* Get partition info */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Ioctls to get/set volume capabilities related to Logical Volume Managers. | ||||||
|  |  * They include the ability to get/set capabilities and to issue a read to a | ||||||
|  |  * specific underlying device of a replicated device. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	DKIOCGETVOLCAP	(DKIOC | 25)	/* Get volume capabilities */ | ||||||
|  | #define	DKIOCSETVOLCAP	(DKIOC | 26)	/* Set volume capabilities */ | ||||||
|  | #define	DKIOCDMR	(DKIOC | 27)	/* Issue a directed read */ | ||||||
|  | 
 | ||||||
|  | typedef uint_t volcapinfo_t; | ||||||
|  | 
 | ||||||
|  | typedef uint_t volcapset_t; | ||||||
|  | 
 | ||||||
|  | #define	DKV_ABR_CAP 0x00000001		/* Support Appl.Based Recovery */ | ||||||
|  | #define	DKV_DMR_CAP 0x00000002		/* Support Directed  Mirror Read */ | ||||||
|  | 
 | ||||||
|  | typedef struct volcap { | ||||||
|  | 	volcapinfo_t vc_info;	/* Capabilities available */ | ||||||
|  | 	volcapset_t vc_set;	/* Capabilities set */ | ||||||
|  | } volcap_t; | ||||||
|  | 
 | ||||||
|  | #define	VOL_SIDENAME 256 | ||||||
|  | 
 | ||||||
|  | typedef struct vol_directed_rd { | ||||||
|  | 	int		vdr_flags; | ||||||
|  | 	offset_t	vdr_offset; | ||||||
|  | 	size_t		vdr_nbytes; | ||||||
|  | 	size_t		vdr_bytesread; | ||||||
|  | 	void		*vdr_data; | ||||||
|  | 	int		vdr_side; | ||||||
|  | 	char		vdr_side_name[VOL_SIDENAME]; | ||||||
|  | } vol_directed_rd_t; | ||||||
|  | 
 | ||||||
|  | #define	DKV_SIDE_INIT		(-1) | ||||||
|  | #define	DKV_DMR_NEXT_SIDE	0x00000001 | ||||||
|  | #define	DKV_DMR_DONE		0x00000002 | ||||||
|  | #define	DKV_DMR_ERROR		0x00000004 | ||||||
|  | #define	DKV_DMR_SUCCESS		0x00000008 | ||||||
|  | #define	DKV_DMR_SHORT		0x00000010 | ||||||
|  | 
 | ||||||
|  | #ifdef _MULTI_DATAMODEL | ||||||
|  | #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 | ||||||
|  | #pragma pack(4) | ||||||
|  | #endif | ||||||
|  | typedef struct vol_directed_rd32 { | ||||||
|  | 	int32_t		vdr_flags; | ||||||
|  | 	offset_t	vdr_offset;	/* 64-bit element on 32-bit alignment */ | ||||||
|  | 	size32_t	vdr_nbytes; | ||||||
|  | 	size32_t	vdr_bytesread; | ||||||
|  | 	caddr32_t	vdr_data; | ||||||
|  | 	int32_t		vdr_side; | ||||||
|  | 	char		vdr_side_name[VOL_SIDENAME]; | ||||||
|  | } vol_directed_rd32_t; | ||||||
|  | #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 | ||||||
|  | #pragma pack() | ||||||
|  | #endif | ||||||
|  | #endif	/* _MULTI_DATAMODEL */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The ioctl is used to fetch disk's device type, vendor ID, | ||||||
|  |  * model number/product ID, firmware revision and serial number together. | ||||||
|  |  * | ||||||
|  |  * Currently there are two device types - DKD_ATA_TYPE which means the | ||||||
|  |  * disk is driven by cmdk/ata or dad/uata driver, and DKD_SCSI_TYPE | ||||||
|  |  * which means the disk is driven by sd/scsi hba driver. | ||||||
|  |  */ | ||||||
|  | #define	DKIOC_GETDISKID	(DKIOC|46) | ||||||
|  | 
 | ||||||
|  | /* These two labels are for dkd_dtype of dk_disk_id_t */ | ||||||
|  | #define	DKD_ATA_TYPE	0x01 /* ATA disk or legacy mode SATA disk */ | ||||||
|  | #define	DKD_SCSI_TYPE	0x02 /* SCSI disk or native mode SATA disk */ | ||||||
|  | 
 | ||||||
|  | #define	DKD_ATA_MODEL	40	/* model number length */ | ||||||
|  | #define	DKD_ATA_FWVER	8	/* firmware revision length */ | ||||||
|  | #define	DKD_ATA_SERIAL	20	/* serial number length */ | ||||||
|  | 
 | ||||||
|  | #define	DKD_SCSI_VENDOR	8	/* vendor ID length */ | ||||||
|  | #define	DKD_SCSI_PRODUCT 16	/* product ID length */ | ||||||
|  | #define	DKD_SCSI_REVLEVEL 4	/* revision level length */ | ||||||
|  | #define	DKD_SCSI_SERIAL 12	/* serial number length */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The argument type for DKIOC_GETDISKID ioctl. | ||||||
|  |  */ | ||||||
|  | typedef struct dk_disk_id { | ||||||
|  | 	uint_t	dkd_dtype; | ||||||
|  | 	union { | ||||||
|  | 		struct { | ||||||
|  | 			char dkd_amodel[DKD_ATA_MODEL];		/* 40 bytes */ | ||||||
|  | 			char dkd_afwver[DKD_ATA_FWVER];		/* 8 bytes */ | ||||||
|  | 			char dkd_aserial[DKD_ATA_SERIAL];	/* 20 bytes */ | ||||||
|  | 		} ata_disk_id; | ||||||
|  | 		struct { | ||||||
|  | 			char dkd_svendor[DKD_SCSI_VENDOR];	/* 8 bytes */ | ||||||
|  | 			char dkd_sproduct[DKD_SCSI_PRODUCT];	/* 16 bytes */ | ||||||
|  | 			char dkd_sfwver[DKD_SCSI_REVLEVEL];	/* 4 bytes */ | ||||||
|  | 			char dkd_sserial[DKD_SCSI_SERIAL];	/* 12 bytes */ | ||||||
|  | 		} scsi_disk_id; | ||||||
|  | 	} disk_id; | ||||||
|  | } dk_disk_id_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The ioctl is used to update the firmware of device. | ||||||
|  |  */ | ||||||
|  | #define	DKIOC_UPDATEFW		(DKIOC|47) | ||||||
|  | 
 | ||||||
|  | /* The argument type for DKIOC_UPDATEFW ioctl */ | ||||||
|  | typedef struct dk_updatefw { | ||||||
|  | 	caddr_t		dku_ptrbuf;	/* pointer to firmware buf */ | ||||||
|  | 	uint_t		dku_size;	/* firmware buf length */ | ||||||
|  | 	uint8_t		dku_type;	/* firmware update type */ | ||||||
|  | } dk_updatefw_t; | ||||||
|  | 
 | ||||||
|  | #ifdef _SYSCALL32 | ||||||
|  | typedef struct dk_updatefw_32 { | ||||||
|  | 	caddr32_t	dku_ptrbuf;	/* pointer to firmware buf */ | ||||||
|  | 	uint_t		dku_size;	/* firmware buf length */ | ||||||
|  | 	uint8_t		dku_type;	/* firmware update type */ | ||||||
|  | } dk_updatefw_32_t; | ||||||
|  | #endif /* _SYSCALL32 */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * firmware update type - temporary or permanent use | ||||||
|  |  */ | ||||||
|  | #define	FW_TYPE_TEMP	0x0		/* temporary use */ | ||||||
|  | #define	FW_TYPE_PERM	0x1		/* permanent use */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _OPENSOLARIS_SYS_DKIO_H_ */ | ||||||
							
								
								
									
										42
									
								
								include/os/freebsd/spl/sys/endian.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								include/os/freebsd/spl/sys/endian.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_SYS_ENDIAN_H_ | ||||||
|  | #define	_SPL_SYS_ENDIAN_H_ | ||||||
|  | 
 | ||||||
|  | #undef _MACHINE_ENDIAN_H_ | ||||||
|  | #include_next<sys/endian.h> | ||||||
|  | 
 | ||||||
|  | #if BYTE_ORDER == LITTLE_ENDIAN | ||||||
|  | #undef _BIG_ENDIAN | ||||||
|  | #undef BIG_ENDIAN | ||||||
|  | #define	BIG_ENDIAN 4321 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /*  _SPL_SYS_ENDIAN_H_ */ | ||||||
							
								
								
									
										73
									
								
								include/os/freebsd/spl/sys/extdirent.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								include/os/freebsd/spl/sys/extdirent.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_EXTDIRENT_H | ||||||
|  | #define	_SYS_EXTDIRENT_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/dirent.h> | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Extended file-system independent directory entry.  This style of | ||||||
|  |  * dirent provides additional informational flag bits for each | ||||||
|  |  * directory entry.  This dirent will be returned instead of the | ||||||
|  |  * standard dirent if a VOP_READDIR() requests dirent flags via | ||||||
|  |  * V_RDDIR_ENTFLAGS, and if the file system supports the flags. | ||||||
|  |  */ | ||||||
|  | typedef struct edirent { | ||||||
|  | 	ino64_t		ed_ino;		/* "inode number" of entry */ | ||||||
|  | 	off64_t		ed_off;		/* offset of disk directory entry */ | ||||||
|  | 	uint32_t	ed_eflags;	/* per-entry flags */ | ||||||
|  | 	unsigned short	ed_reclen;	/* length of this record */ | ||||||
|  | 	char		ed_name[1];	/* name of file */ | ||||||
|  | } edirent_t; | ||||||
|  | 
 | ||||||
|  | #define	EDIRENT_RECLEN(namelen)	\ | ||||||
|  | 	((offsetof(edirent_t, ed_name[0]) + 1 + (namelen) + 7) & ~ 7) | ||||||
|  | #define	EDIRENT_NAMELEN(reclen)	\ | ||||||
|  | 	((reclen) - (offsetof(edirent_t, ed_name[0]))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Extended entry flags | ||||||
|  |  *	Extended entries include a bitfield of extra information | ||||||
|  |  *	regarding that entry. | ||||||
|  |  */ | ||||||
|  | #define	ED_CASE_CONFLICT  0x10  /* Disconsidering case, entry is not unique */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Extended flags accessor function | ||||||
|  |  */ | ||||||
|  | #define	ED_CASE_CONFLICTS(x)	((x)->ed_eflags & ED_CASE_CONFLICT) | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_EXTDIRENT_H */ | ||||||
							
								
								
									
										50
									
								
								include/os/freebsd/spl/sys/file.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								include/os/freebsd/spl/sys/file.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_FILE_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_FILE_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/file.h> | ||||||
|  | 
 | ||||||
|  | #define	FKIOCTL	0x80000000	/* ioctl addresses are from kernel */ | ||||||
|  | 
 | ||||||
|  | typedef	struct file	file_t; | ||||||
|  | 
 | ||||||
|  | #include <sys/capsicum.h> | ||||||
|  | 
 | ||||||
|  | static __inline file_t * | ||||||
|  | getf_caps(int fd, cap_rights_t *rightsp) | ||||||
|  | { | ||||||
|  | 	struct file *fp; | ||||||
|  | 
 | ||||||
|  | 	if (fget(curthread, fd, rightsp, &fp) == 0) | ||||||
|  | 		return (fp); | ||||||
|  | 	return (NULL); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_FILE_H_ */ | ||||||
							
								
								
									
										34
									
								
								include/os/freebsd/spl/sys/freebsd_rwlock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								include/os/freebsd/spl/sys/freebsd_rwlock.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2013 EMC Corp. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_FREEBSD_RWLOCK_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_FREEBSD_RWLOCK_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/rwlock.h> | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/sys/inttypes.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/sys/inttypes.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /* do not delete */ | ||||||
							
								
								
									
										688
									
								
								include/os/freebsd/spl/sys/isa_defs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										688
									
								
								include/os/freebsd/spl/sys/isa_defs.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,688 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_ISA_DEFS_H | ||||||
|  | #define	_SYS_ISA_DEFS_H | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * This header file serves to group a set of well known defines and to | ||||||
|  |  * set these for each instruction set architecture.  These defines may | ||||||
|  |  * be divided into two groups;  characteristics of the processor and | ||||||
|  |  * implementation choices for Solaris on a processor. | ||||||
|  |  * | ||||||
|  |  * Processor Characteristics: | ||||||
|  |  * | ||||||
|  |  * _LITTLE_ENDIAN / _BIG_ENDIAN: | ||||||
|  |  *	The natural byte order of the processor.  A pointer to an int points | ||||||
|  |  *	to the least/most significant byte of that int. | ||||||
|  |  * | ||||||
|  |  * _STACK_GROWS_UPWARD / _STACK_GROWS_DOWNWARD: | ||||||
|  |  *	The processor specific direction of stack growth.  A push onto the | ||||||
|  |  *	stack increases/decreases the stack pointer, so it stores data at | ||||||
|  |  *	successively higher/lower addresses.  (Stackless machines ignored | ||||||
|  |  *	without regrets). | ||||||
|  |  * | ||||||
|  |  * _LONG_LONG_HTOL / _LONG_LONG_LTOH: | ||||||
|  |  *	A pointer to a long long points to the most/least significant long | ||||||
|  |  *	within that long long. | ||||||
|  |  * | ||||||
|  |  * _BIT_FIELDS_HTOL / _BIT_FIELDS_LTOH: | ||||||
|  |  *	The C compiler assigns bit fields from the high/low to the low/high end | ||||||
|  |  *	of an int (most to least significant vs. least to most significant). | ||||||
|  |  * | ||||||
|  |  * _IEEE_754: | ||||||
|  |  *	The processor (or supported implementations of the processor) | ||||||
|  |  *	supports the ieee-754 floating point standard.  No other floating | ||||||
|  |  *	point standards are supported (or significant).  Any other supported | ||||||
|  |  *	floating point formats are expected to be cased on the ISA processor | ||||||
|  |  *	symbol. | ||||||
|  |  * | ||||||
|  |  * _CHAR_IS_UNSIGNED / _CHAR_IS_SIGNED: | ||||||
|  |  *	The C Compiler implements objects of type `char' as `unsigned' or | ||||||
|  |  *	`signed' respectively.  This is really an implementation choice of | ||||||
|  |  *	the compiler writer, but it is specified in the ABI and tends to | ||||||
|  |  *	be uniform across compilers for an instruction set architecture. | ||||||
|  |  *	Hence, it has the properties of a processor characteristic. | ||||||
|  |  * | ||||||
|  |  * _CHAR_ALIGNMENT / _SHORT_ALIGNMENT / _INT_ALIGNMENT / _LONG_ALIGNMENT / | ||||||
|  |  * _LONG_LONG_ALIGNMENT / _DOUBLE_ALIGNMENT / _LONG_DOUBLE_ALIGNMENT / | ||||||
|  |  * _POINTER_ALIGNMENT / _FLOAT_ALIGNMENT: | ||||||
|  |  *	The ABI defines alignment requirements of each of the primitive | ||||||
|  |  *	object types.  Some, if not all, may be hardware requirements as | ||||||
|  |  * 	well.  The values are expressed in "byte-alignment" units. | ||||||
|  |  * | ||||||
|  |  * _MAX_ALIGNMENT: | ||||||
|  |  *	The most stringent alignment requirement as specified by the ABI. | ||||||
|  |  *	Equal to the maximum of all the above _XXX_ALIGNMENT values. | ||||||
|  |  * | ||||||
|  |  * _ALIGNMENT_REQUIRED: | ||||||
|  |  *	True or false (1 or 0) whether or not the hardware requires the ABI | ||||||
|  |  *	alignment. | ||||||
|  |  * | ||||||
|  |  * _LONG_LONG_ALIGNMENT_32 | ||||||
|  |  *	The 32-bit ABI supported by a 64-bit kernel may have different | ||||||
|  |  *	alignment requirements for primitive object types.  The value of this | ||||||
|  |  *	identifier is expressed in "byte-alignment" units. | ||||||
|  |  * | ||||||
|  |  * _HAVE_CPUID_INSN | ||||||
|  |  *	This indicates that the architecture supports the 'cpuid' | ||||||
|  |  *	instruction as defined by Intel.  (Intel allows other vendors | ||||||
|  |  *	to extend the instruction for their own purposes.) | ||||||
|  |  * | ||||||
|  |  * | ||||||
|  |  * Implementation Choices: | ||||||
|  |  * | ||||||
|  |  * _ILP32 / _LP64: | ||||||
|  |  *	This specifies the compiler data type implementation as specified in | ||||||
|  |  *	the relevant ABI.  The choice between these is strongly influenced | ||||||
|  |  *	by the underlying hardware, but is not absolutely tied to it. | ||||||
|  |  *	Currently only two data type models are supported: | ||||||
|  |  * | ||||||
|  |  *	_ILP32: | ||||||
|  |  *		Int/Long/Pointer are 32 bits.  This is the historical UNIX | ||||||
|  |  *		and Solaris implementation.  Due to its historical standing, | ||||||
|  |  *		this is the default case. | ||||||
|  |  * | ||||||
|  |  *	_LP64: | ||||||
|  |  *		Long/Pointer are 64 bits, Int is 32 bits.  This is the chosen | ||||||
|  |  *		implementation for 64-bit ABIs such as SPARC V9. | ||||||
|  |  * | ||||||
|  |  *	_I32LPx: | ||||||
|  |  *		A compilation environment where 'int' is 32-bit, and | ||||||
|  |  *		longs and pointers are simply the same size. | ||||||
|  |  * | ||||||
|  |  *	In all cases, Char is 8 bits and Short is 16 bits. | ||||||
|  |  * | ||||||
|  |  * _SUNOS_VTOC_8 / _SUNOS_VTOC_16 / _SVR4_VTOC_16: | ||||||
|  |  *	This specifies the form of the disk VTOC (or label): | ||||||
|  |  * | ||||||
|  |  *	_SUNOS_VTOC_8: | ||||||
|  |  *		This is a VTOC form which is upwardly compatible with the | ||||||
|  |  *		SunOS 4.x disk label and allows 8 partitions per disk. | ||||||
|  |  * | ||||||
|  |  *	_SUNOS_VTOC_16: | ||||||
|  |  *		In this format the incore vtoc image matches the ondisk | ||||||
|  |  *		version.  It allows 16 slices per disk, and is not | ||||||
|  |  *		compatible with the SunOS 4.x disk label. | ||||||
|  |  * | ||||||
|  |  *	Note that these are not the only two VTOC forms possible and | ||||||
|  |  *	additional forms may be added.  One possible form would be the | ||||||
|  |  *	SVr4 VTOC form.  The symbol for that is reserved now, although | ||||||
|  |  *	it is not implemented. | ||||||
|  |  * | ||||||
|  |  *	_SVR4_VTOC_16: | ||||||
|  |  *		This VTOC form is compatible with the System V Release 4 | ||||||
|  |  *		VTOC (as implemented on the SVr4 Intel and 3b ports) with | ||||||
|  |  *		16 partitions per disk. | ||||||
|  |  * | ||||||
|  |  * | ||||||
|  |  * _DMA_USES_PHYSADDR / _DMA_USES_VIRTADDR | ||||||
|  |  *	This describes the type of addresses used by system DMA: | ||||||
|  |  * | ||||||
|  |  *	_DMA_USES_PHYSADDR: | ||||||
|  |  *		This type of DMA, used in the x86 implementation, | ||||||
|  |  *		requires physical addresses for DMA buffers.  The 24-bit | ||||||
|  |  *		addresses used by some legacy boards is the source of the | ||||||
|  |  *		"low-memory" (<16MB) requirement for some devices using DMA. | ||||||
|  |  * | ||||||
|  |  *	_DMA_USES_VIRTADDR: | ||||||
|  |  *		This method of DMA allows the use of virtual addresses for | ||||||
|  |  *		DMA transfers. | ||||||
|  |  * | ||||||
|  |  * _FIRMWARE_NEEDS_FDISK / _NO_FDISK_PRESENT | ||||||
|  |  *      This indicates the presence/absence of an fdisk table. | ||||||
|  |  * | ||||||
|  |  *      _FIRMWARE_NEEDS_FDISK | ||||||
|  |  *              The fdisk table is required by system firmware.  If present, | ||||||
|  |  *              it allows a disk to be subdivided into multiple fdisk | ||||||
|  |  *              partitions, each of which is equivalent to a separate, | ||||||
|  |  *              virtual disk.  This enables the co-existence of multiple | ||||||
|  |  *              operating systems on a shared hard disk. | ||||||
|  |  * | ||||||
|  |  *      _NO_FDISK_PRESENT | ||||||
|  |  *              If the fdisk table is absent, it is assumed that the entire | ||||||
|  |  *              media is allocated for a single operating system. | ||||||
|  |  * | ||||||
|  |  * _HAVE_TEM_FIRMWARE | ||||||
|  |  *	Defined if this architecture has the (fallback) option of | ||||||
|  |  *	using prom_* calls for doing I/O if a suitable kernel driver | ||||||
|  |  *	is not available to do it. | ||||||
|  |  * | ||||||
|  |  * _DONT_USE_1275_GENERIC_NAMES | ||||||
|  |  *		Controls whether or not device tree node names should | ||||||
|  |  *		comply with the IEEE 1275 "Generic Names" Recommended | ||||||
|  |  *		Practice. With _DONT_USE_GENERIC_NAMES, device-specific | ||||||
|  |  *		names identifying the particular device will be used. | ||||||
|  |  * | ||||||
|  |  * __i386_COMPAT | ||||||
|  |  *	This indicates whether the i386 ABI is supported as a *non-native* | ||||||
|  |  *	mode for the platform.  When this symbol is defined: | ||||||
|  |  *	-	32-bit xstat-style system calls are enabled | ||||||
|  |  *	-	32-bit xmknod-style system calls are enabled | ||||||
|  |  *	-	32-bit system calls use i386 sizes -and- alignments | ||||||
|  |  * | ||||||
|  |  *	Note that this is NOT defined for the i386 native environment! | ||||||
|  |  * | ||||||
|  |  * __x86 | ||||||
|  |  *	This is ONLY a synonym for defined(__i386) || defined(__amd64) | ||||||
|  |  *	which is useful only insofar as these two architectures share | ||||||
|  |  *	common attributes.  Analogous to __sparc. | ||||||
|  |  * | ||||||
|  |  * _PSM_MODULES | ||||||
|  |  *	This indicates whether or not the implementation uses PSM | ||||||
|  |  *	modules for processor support, reading /etc/mach from inside | ||||||
|  |  *	the kernel to extract a list. | ||||||
|  |  * | ||||||
|  |  * _RTC_CONFIG | ||||||
|  |  *	This indicates whether or not the implementation uses /etc/rtc_config | ||||||
|  |  *	to configure the real-time clock in the kernel. | ||||||
|  |  * | ||||||
|  |  * _UNIX_KRTLD | ||||||
|  |  *	This indicates that the implementation uses a dynamically | ||||||
|  |  *	linked unix + krtld to form the core kernel image at boot | ||||||
|  |  *	time, or (in the absence of this symbol) a prelinked kernel image. | ||||||
|  |  * | ||||||
|  |  * _OBP | ||||||
|  |  *	This indicates the firmware interface is OBP. | ||||||
|  |  * | ||||||
|  |  * _SOFT_HOSTID | ||||||
|  |  *	This indicates that the implementation obtains the hostid | ||||||
|  |  *	from the file /etc/hostid, rather than from hardware. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following set of definitions characterize Solaris on AMD's | ||||||
|  |  * 64-bit systems. | ||||||
|  |  */ | ||||||
|  | #if defined(__x86_64) || defined(__amd64) | ||||||
|  | 
 | ||||||
|  | #if !defined(__amd64) | ||||||
|  | #define	__amd64		/* preferred guard */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if !defined(__x86) | ||||||
|  | #define	__x86 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_SIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_ALIGNMENT			8 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		16 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	16 | ||||||
|  | #define	_POINTER_ALIGNMENT		8 | ||||||
|  | #define	_MAX_ALIGNMENT			16 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		1 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Different alignment constraints for the i386 ABI in compatibility mode | ||||||
|  |  */ | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		4 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices". | ||||||
|  |  */ | ||||||
|  | #if !defined(_LP64) | ||||||
|  | #error "_LP64 not defined" | ||||||
|  | #endif | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | #define	_MULTI_DATAMODEL | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	__i386_COMPAT | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_SOFT_HOSTID | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The feature test macro __i386 is generic for all processors implementing | ||||||
|  |  * the Intel 386 instruction set or a superset of it.  Specifically, this | ||||||
|  |  * includes all members of the 386, 486, and Pentium family of processors. | ||||||
|  |  */ | ||||||
|  | #elif defined(__i386) || defined(__i386__) | ||||||
|  | 
 | ||||||
|  | #if !defined(__i386) | ||||||
|  | #define	__i386 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if !defined(__x86) | ||||||
|  | #define	__x86 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_SIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_ALIGNMENT			4 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_POINTER_ALIGNMENT		4 | ||||||
|  | #define	_MAX_ALIGNMENT			4 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		0 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices". | ||||||
|  |  */ | ||||||
|  | #if !defined(_ILP32) | ||||||
|  | #define	_ILP32 | ||||||
|  | #endif | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_SOFT_HOSTID | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | #elif defined(__aarch64__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_UNSIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_ALIGNMENT			8 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		16 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	16 | ||||||
|  | #define	_POINTER_ALIGNMENT		8 | ||||||
|  | #define	_MAX_ALIGNMENT			16 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		1 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices" | ||||||
|  |  */ | ||||||
|  | #if !defined(_LP64) | ||||||
|  | #error "_LP64 not defined" | ||||||
|  | #endif | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | #elif defined(__riscv) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_UNSIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_ALIGNMENT			8 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		16 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	16 | ||||||
|  | #define	_POINTER_ALIGNMENT		8 | ||||||
|  | #define	_MAX_ALIGNMENT			16 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		1 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices" | ||||||
|  |  */ | ||||||
|  | #if !defined(_LP64) | ||||||
|  | #define	_LP64 | ||||||
|  | #endif | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | #elif defined(__arm__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_SIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_ALIGNMENT			4 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_POINTER_ALIGNMENT		4 | ||||||
|  | #define	_MAX_ALIGNMENT			4 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		0 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices". | ||||||
|  |  */ | ||||||
|  | #if !defined(_ILP32) | ||||||
|  | #define	_ILP32 | ||||||
|  | #endif | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | #elif defined(__mips__) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_LTOH | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_SIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #if defined(__mips_n64) | ||||||
|  | #define	_LONG_ALIGNMENT			8 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_POINTER_ALIGNMENT		8 | ||||||
|  | #define	_MAX_ALIGNMENT			8 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		0 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_INT_ALIGNMENT | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices". | ||||||
|  |  */ | ||||||
|  | #if !defined(_LP64) | ||||||
|  | #error "_LP64 not defined" | ||||||
|  | #endif | ||||||
|  | #else | ||||||
|  | #define	_LONG_ALIGNMENT			4 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		4 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_POINTER_ALIGNMENT		4 | ||||||
|  | #define	_MAX_ALIGNMENT			4 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		0 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices". | ||||||
|  |  */ | ||||||
|  | #if !defined(_ILP32) | ||||||
|  | #define	_ILP32 | ||||||
|  | #endif | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
|  | #define	_SUNOS_VTOC_16 | ||||||
|  | #define	_DMA_USES_PHYSADDR | ||||||
|  | #define	_FIRMWARE_NEEDS_FDISK | ||||||
|  | #define	_PSM_MODULES | ||||||
|  | #define	_RTC_CONFIG | ||||||
|  | #define	_DONT_USE_1275_GENERIC_NAMES | ||||||
|  | #define	_HAVE_CPUID_INSN | ||||||
|  | 
 | ||||||
|  | #elif defined(__powerpc__) | ||||||
|  | 
 | ||||||
|  | #if defined(__BIG_ENDIAN__) | ||||||
|  | #define	_BIT_FIELDS_HTOL | ||||||
|  | #else | ||||||
|  | #define	_BIT_FIELDS_LTOH | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following set of definitions characterize the Solaris on SPARC systems. | ||||||
|  |  * | ||||||
|  |  * The symbol __sparc indicates any of the SPARC family of processor | ||||||
|  |  * architectures.  This includes SPARC V7, SPARC V8 and SPARC V9. | ||||||
|  |  * | ||||||
|  |  * The symbol __sparcv8 indicates the 32-bit SPARC V8 architecture as defined | ||||||
|  |  * by Version 8 of the SPARC Architecture Manual.  (SPARC V7 is close enough | ||||||
|  |  * to SPARC V8 for the former to be subsumed into the latter definition.) | ||||||
|  |  * | ||||||
|  |  * The symbol __sparcv9 indicates the 64-bit SPARC V9 architecture as defined | ||||||
|  |  * by Version 9 of the SPARC Architecture Manual. | ||||||
|  |  * | ||||||
|  |  * The symbols __sparcv8 and __sparcv9 are mutually exclusive, and are only | ||||||
|  |  * relevant when the symbol __sparc is defined. | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * XXX Due to the existence of 5110166, "defined(__sparcv9)" needs to be added | ||||||
|  |  * to support backwards builds.  This workaround should be removed in s10_71. | ||||||
|  |  */ | ||||||
|  | #elif defined(__sparc) || defined(__sparcv9) || defined(__sparc__) | ||||||
|  | #if !defined(__sparc) | ||||||
|  | #define	__sparc | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * You can be 32-bit or 64-bit, but not both at the same time. | ||||||
|  |  */ | ||||||
|  | #if defined(__sparcv8) && defined(__sparcv9) | ||||||
|  | #error	"SPARC Versions 8 and 9 are mutually exclusive choices" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Existing compilers do not set __sparcv8.  Years will transpire before | ||||||
|  |  * the compilers can be depended on to set the feature test macro. In | ||||||
|  |  * the interim, we'll set it here on the basis of historical behaviour; | ||||||
|  |  * if you haven't asked for SPARC V9, then you must've meant SPARC V8. | ||||||
|  |  */ | ||||||
|  | #if !defined(__sparcv9) && !defined(__sparcv8) | ||||||
|  | #define	__sparcv8 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" shared between | ||||||
|  |  * all Solaris on SPARC systems. | ||||||
|  |  */ | ||||||
|  | #define	_STACK_GROWS_DOWNWARD | ||||||
|  | #define	_LONG_LONG_HTOL | ||||||
|  | #define	_BIT_FIELDS_HTOL | ||||||
|  | #define	_IEEE_754 | ||||||
|  | #define	_CHAR_IS_SIGNED | ||||||
|  | #define	_BOOL_ALIGNMENT			1 | ||||||
|  | #define	_CHAR_ALIGNMENT			1 | ||||||
|  | #define	_SHORT_ALIGNMENT		2 | ||||||
|  | #define	_INT_ALIGNMENT			4 | ||||||
|  | #define	_FLOAT_ALIGNMENT		4 | ||||||
|  | #define	_FLOAT_COMPLEX_ALIGNMENT	4 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_ALIGNMENT_REQUIRED		1 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices" shared between versions. | ||||||
|  |  */ | ||||||
|  | #define	_SUNOS_VTOC_8 | ||||||
|  | #define	_DMA_USES_VIRTADDR | ||||||
|  | #define	_NO_FDISK_PRESENT | ||||||
|  | #define	_HAVE_TEM_FIRMWARE | ||||||
|  | #define	_OBP | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following set of definitions characterize the implementation of | ||||||
|  |  * 32-bit Solaris on SPARC V8 systems. | ||||||
|  |  */ | ||||||
|  | #if defined(__sparcv8) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_LONG_ALIGNMENT			4 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		8 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	8 | ||||||
|  | #define	_POINTER_ALIGNMENT		4 | ||||||
|  | #define	_MAX_ALIGNMENT			8 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices" | ||||||
|  |  */ | ||||||
|  | #define	_ILP32 | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following set of definitions characterize the implementation of | ||||||
|  |  * 64-bit Solaris on SPARC V9 systems. | ||||||
|  |  */ | ||||||
|  | #elif defined(__sparcv9) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "processor characteristics" | ||||||
|  |  */ | ||||||
|  | #define	_LONG_ALIGNMENT			8 | ||||||
|  | #define	_LONG_DOUBLE_ALIGNMENT		16 | ||||||
|  | #define	_LONG_DOUBLE_COMPLEX_ALIGNMENT	16 | ||||||
|  | #define	_POINTER_ALIGNMENT		8 | ||||||
|  | #define	_MAX_ALIGNMENT			16 | ||||||
|  | 
 | ||||||
|  | #define	_LONG_LONG_ALIGNMENT_32		_LONG_LONG_ALIGNMENT | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Define the appropriate "implementation choices" | ||||||
|  |  */ | ||||||
|  | #if !defined(_LP64) | ||||||
|  | #error "_LP64 not defined" | ||||||
|  | #endif | ||||||
|  | #if !defined(_I32LPx) | ||||||
|  | #define	_I32LPx | ||||||
|  | #endif | ||||||
|  | #define	_MULTI_DATAMODEL | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | #error	"unknown SPARC version" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * #error is strictly ansi-C, but works as well as anything for K&R systems. | ||||||
|  |  */ | ||||||
|  | #else | ||||||
|  | #error "ISA not supported" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if defined(_ILP32) && defined(_LP64) | ||||||
|  | #error "Both _ILP32 and _LP64 are defined" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_ISA_DEFS_H */ | ||||||
							
								
								
									
										102
									
								
								include/os/freebsd/spl/sys/kmem.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								include/os/freebsd/spl/sys/kmem.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_KMEM_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_KMEM_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/malloc.h> | ||||||
|  | #include <sys/vmem.h> | ||||||
|  | #include <sys/vmmeter.h> | ||||||
|  | 
 | ||||||
|  | #include <vm/uma.h> | ||||||
|  | #include <vm/vm.h> | ||||||
|  | #include <vm/vm_extern.h> | ||||||
|  | 
 | ||||||
|  | MALLOC_DECLARE(M_SOLARIS); | ||||||
|  | 
 | ||||||
|  | #define	POINTER_IS_VALID(p)	(!((uintptr_t)(p) & 0x3)) | ||||||
|  | #define	POINTER_INVALIDATE(pp)	(*(pp) = (void *)((uintptr_t)(*(pp)) | 0x1)) | ||||||
|  | 
 | ||||||
|  | #define	KM_SLEEP		M_WAITOK | ||||||
|  | #define	KM_PUSHPAGE		M_WAITOK | ||||||
|  | #define	KM_NOSLEEP		M_NOWAIT | ||||||
|  | #define	KM_NODEBUG		M_NODUMP | ||||||
|  | #define	KM_NORMALPRI		0 | ||||||
|  | #define	KMC_NODEBUG		UMA_ZONE_NODUMP | ||||||
|  | #define	KMC_NOTOUCH		0 | ||||||
|  | 
 | ||||||
|  | typedef struct vmem vmem_t; | ||||||
|  | 
 | ||||||
|  | extern char	*kmem_asprintf(const char *, ...); | ||||||
|  | extern char *kmem_vasprintf(const char *fmt, va_list ap); | ||||||
|  | 
 | ||||||
|  | typedef struct kmem_cache { | ||||||
|  | 	char		kc_name[32]; | ||||||
|  | #if !defined(KMEM_DEBUG) | ||||||
|  | 	uma_zone_t	kc_zone; | ||||||
|  | #else | ||||||
|  | 	size_t		kc_size; | ||||||
|  | #endif | ||||||
|  | 	int		(*kc_constructor)(void *, void *, int); | ||||||
|  | 	void		(*kc_destructor)(void *, void *); | ||||||
|  | 	void		*kc_private; | ||||||
|  | } kmem_cache_t; | ||||||
|  | 
 | ||||||
|  | extern uint64_t spl_kmem_cache_inuse(kmem_cache_t *cache); | ||||||
|  | extern uint64_t spl_kmem_cache_entry_size(kmem_cache_t *cache); | ||||||
|  | 
 | ||||||
|  | void *zfs_kmem_alloc(size_t size, int kmflags); | ||||||
|  | void zfs_kmem_free(void *buf, size_t size); | ||||||
|  | uint64_t kmem_size(void); | ||||||
|  | kmem_cache_t *kmem_cache_create(char *name, size_t bufsize, size_t align, | ||||||
|  |     int (*constructor)(void *, void *, int), void (*destructor)(void *, void *), | ||||||
|  |     void (*reclaim)(void *) __unused, void *private, vmem_t *vmp, int cflags); | ||||||
|  | void kmem_cache_destroy(kmem_cache_t *cache); | ||||||
|  | void *kmem_cache_alloc(kmem_cache_t *cache, int flags); | ||||||
|  | void kmem_cache_free(kmem_cache_t *cache, void *buf); | ||||||
|  | boolean_t kmem_cache_reap_active(void); | ||||||
|  | void kmem_cache_reap_soon(kmem_cache_t *); | ||||||
|  | void kmem_reap(void); | ||||||
|  | int kmem_debugging(void); | ||||||
|  | void *calloc(size_t n, size_t s); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	kmem_cache_reap_now kmem_cache_reap_soon | ||||||
|  | #define	freemem				vm_free_count() | ||||||
|  | #define	minfree				vm_cnt.v_free_min | ||||||
|  | #define	heap_arena			kernel_arena | ||||||
|  | #define	zio_arena			NULL | ||||||
|  | #define	kmem_alloc(size, kmflags)	zfs_kmem_alloc((size), (kmflags)) | ||||||
|  | #define	kmem_zalloc(size, kmflags)				\ | ||||||
|  | 	zfs_kmem_alloc((size), (kmflags) | M_ZERO) | ||||||
|  | #define	kmem_free(buf, size)		zfs_kmem_free((buf), (size)) | ||||||
|  | #define	vmem_qcache_reap(ptr)	((void)0) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_KMEM_H_ */ | ||||||
							
								
								
									
										49
									
								
								include/os/freebsd/spl/sys/kmem_cache.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								include/os/freebsd/spl/sys/kmem_cache.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_KMEM_CACHE_H | ||||||
|  | #define	_SPL_KMEM_CACHE_H | ||||||
|  | 
 | ||||||
|  | #include <sys/taskq.h> | ||||||
|  | 
 | ||||||
|  | /* kmem move callback return values */ | ||||||
|  | typedef enum kmem_cbrc { | ||||||
|  | 	KMEM_CBRC_YES		= 0,	/* Object moved */ | ||||||
|  | 	KMEM_CBRC_NO		= 1,	/* Object not moved */ | ||||||
|  | 	KMEM_CBRC_LATER		= 2,	/* Object not moved, try again later */ | ||||||
|  | 	KMEM_CBRC_DONT_NEED	= 3,	/* Neither object is needed */ | ||||||
|  | 	KMEM_CBRC_DONT_KNOW	= 4,	/* Object unknown */ | ||||||
|  | } kmem_cbrc_t; | ||||||
|  | 
 | ||||||
|  | extern void spl_kmem_cache_set_move(kmem_cache_t *, | ||||||
|  |     kmem_cbrc_t (*)(void *, void *, size_t, void *)); | ||||||
|  | 
 | ||||||
|  | #define	kmem_cache_set_move(skc, move)	spl_kmem_cache_set_move(skc, move) | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										206
									
								
								include/os/freebsd/spl/sys/kstat.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								include/os/freebsd/spl/sys/kstat.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,206 @@ | |||||||
|  | /*
 | ||||||
|  |  *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. | ||||||
|  |  *  Copyright (C) 2007 The Regents of the University of California. | ||||||
|  |  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | ||||||
|  |  *  Written by Brian Behlendorf <behlendorf1@llnl.gov>. | ||||||
|  |  *  UCRL-CODE-235197 | ||||||
|  |  * | ||||||
|  |  *  This file is part of the SPL, Solaris Porting Layer. | ||||||
|  |  *  For details, see <http://zfsonlinux.org/>.
 | ||||||
|  |  * | ||||||
|  |  *  The SPL is free software; you can redistribute it and/or modify it | ||||||
|  |  *  under the terms of the GNU General Public License as published by the | ||||||
|  |  *  Free Software Foundation; either version 2 of the License, or (at your | ||||||
|  |  *  option) any later version. | ||||||
|  |  * | ||||||
|  |  *  The SPL is distributed in the hope that it will be useful, but WITHOUT | ||||||
|  |  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||||
|  |  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||||
|  |  *  for more details. | ||||||
|  |  * | ||||||
|  |  *  You should have received a copy of the GNU General Public License along | ||||||
|  |  *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SPL_KSTAT_H | ||||||
|  | #define	_SPL_KSTAT_H | ||||||
|  | #include <sys/sysctl.h> | ||||||
|  | struct list_head {}; | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_STRLEN		255 | ||||||
|  | #define	KSTAT_RAW_MAX		(128*1024) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * For reference valid classes are: | ||||||
|  |  * disk, tape, net, controller, vm, kvm, hat, streams, kstat, misc | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_TYPE_RAW		0 /* can be anything; ks_ndata >= 1 */ | ||||||
|  | #define	KSTAT_TYPE_NAMED	1 /* name/value pair; ks_ndata >= 1 */ | ||||||
|  | #define	KSTAT_TYPE_INTR		2 /* interrupt stats; ks_ndata == 1 */ | ||||||
|  | #define	KSTAT_TYPE_IO		3 /* I/O stats; ks_ndata == 1 */ | ||||||
|  | #define	KSTAT_TYPE_TIMER	4 /* event timer; ks_ndata >= 1 */ | ||||||
|  | #define	KSTAT_NUM_TYPES		5 | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_DATA_CHAR		0 | ||||||
|  | #define	KSTAT_DATA_INT32	1 | ||||||
|  | #define	KSTAT_DATA_UINT32	2 | ||||||
|  | #define	KSTAT_DATA_INT64	3 | ||||||
|  | #define	KSTAT_DATA_UINT64	4 | ||||||
|  | #define	KSTAT_DATA_LONG		5 | ||||||
|  | #define	KSTAT_DATA_ULONG	6 | ||||||
|  | #define	KSTAT_DATA_STRING	7 | ||||||
|  | #define	KSTAT_NUM_DATAS		8 | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_INTR_HARD		0 | ||||||
|  | #define	KSTAT_INTR_SOFT		1 | ||||||
|  | #define	KSTAT_INTR_WATCHDOG	2 | ||||||
|  | #define	KSTAT_INTR_SPURIOUS	3 | ||||||
|  | #define	KSTAT_INTR_MULTSVC	4 | ||||||
|  | #define	KSTAT_NUM_INTRS		5 | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_FLAG_VIRTUAL	0x01 | ||||||
|  | #define	KSTAT_FLAG_VAR_SIZE	0x02 | ||||||
|  | #define	KSTAT_FLAG_WRITABLE	0x04 | ||||||
|  | #define	KSTAT_FLAG_PERSISTENT	0x08 | ||||||
|  | #define	KSTAT_FLAG_DORMANT	0x10 | ||||||
|  | #define	KSTAT_FLAG_INVALID	0x20 | ||||||
|  | #define	KSTAT_FLAG_LONGSTRINGS	0x40 | ||||||
|  | #define	KSTAT_FLAG_NO_HEADERS	0x80 | ||||||
|  | 
 | ||||||
|  | #define	KS_MAGIC		0x9d9d9d9d | ||||||
|  | 
 | ||||||
|  | /* Dynamic updates */ | ||||||
|  | #define	KSTAT_READ		0 | ||||||
|  | #define	KSTAT_WRITE		1 | ||||||
|  | 
 | ||||||
|  | struct kstat_s; | ||||||
|  | typedef struct kstat_s kstat_t; | ||||||
|  | 
 | ||||||
|  | typedef int kid_t;				/* unique kstat id */ | ||||||
|  | typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */ | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_module { | ||||||
|  | 	char ksm_name[KSTAT_STRLEN+1];		/* module name */ | ||||||
|  | 	struct list_head ksm_module_list;	/* module linkage */ | ||||||
|  | 	struct list_head ksm_kstat_list;	/* list of kstat entries */ | ||||||
|  | 	struct proc_dir_entry *ksm_proc;	/* proc entry */ | ||||||
|  | } kstat_module_t; | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_raw_ops { | ||||||
|  | 	int (*headers)(char *buf, size_t size); | ||||||
|  | 	int (*data)(char *buf, size_t size, void *data); | ||||||
|  | 	void *(*addr)(kstat_t *ksp, loff_t index); | ||||||
|  | } kstat_raw_ops_t; | ||||||
|  | 
 | ||||||
|  | struct kstat_s { | ||||||
|  | 	int		ks_magic;		/* magic value */ | ||||||
|  | 	kid_t		ks_kid;			/* unique kstat ID */ | ||||||
|  | 	hrtime_t	ks_crtime;		/* creation time */ | ||||||
|  | 	hrtime_t	ks_snaptime;		/* last access time */ | ||||||
|  | 	char		ks_module[KSTAT_STRLEN+1]; /* provider module name */ | ||||||
|  | 	int		ks_instance;		/* provider module instance */ | ||||||
|  | 	char		ks_name[KSTAT_STRLEN+1]; /* kstat name */ | ||||||
|  | 	char		ks_class[KSTAT_STRLEN+1]; /* kstat class */ | ||||||
|  | 	uchar_t		ks_type;		/* kstat data type */ | ||||||
|  | 	uchar_t		ks_flags;		/* kstat flags */ | ||||||
|  | 	void		*ks_data;		/* kstat type-specific data */ | ||||||
|  | 	uint_t		ks_ndata;		/* # of data records */ | ||||||
|  | 	size_t		ks_data_size;		/* size of kstat data section */ | ||||||
|  | 	kstat_update_t	*ks_update;		/* dynamic updates */ | ||||||
|  | 	void		*ks_private;		/* private data */ | ||||||
|  | 	kmutex_t	ks_private_lock;	/* kstat private data lock */ | ||||||
|  | 	kmutex_t	*ks_lock;		/* kstat data lock */ | ||||||
|  | 	struct list_head ks_list;		/* kstat linkage */ | ||||||
|  | 	kstat_module_t	*ks_owner;		/* kstat module linkage */ | ||||||
|  | 	kstat_raw_ops_t	ks_raw_ops;		/* ops table for raw type */ | ||||||
|  | 	char		*ks_raw_buf;		/* buf used for raw ops */ | ||||||
|  | 	size_t		ks_raw_bufsize;		/* size of raw ops buffer */ | ||||||
|  | 	struct sysctl_ctx_list ks_sysctl_ctx; | ||||||
|  | 	struct sysctl_oid *ks_sysctl_root; | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_named_s { | ||||||
|  | 	char	name[KSTAT_STRLEN];	/* name of counter */ | ||||||
|  | 	uchar_t	data_type;		/* data type */ | ||||||
|  | 	union { | ||||||
|  | 		char c[16];	/* 128-bit int */ | ||||||
|  | 		int32_t	i32;	/* 32-bit signed int */ | ||||||
|  | 		uint32_t ui32;	/* 32-bit unsigned int */ | ||||||
|  | 		int64_t i64;	/* 64-bit signed int */ | ||||||
|  | 		uint64_t ui64;	/* 64-bit unsigned int */ | ||||||
|  | 		long l;		/* native signed long */ | ||||||
|  | 		ulong_t ul;	/* native unsigned long */ | ||||||
|  | 		struct { | ||||||
|  | 			union { | ||||||
|  | 				char *ptr;	/* NULL-term string */ | ||||||
|  | 				char __pad[8];	/* 64-bit padding */ | ||||||
|  | 			} addr; | ||||||
|  | 			uint32_t len;		/* # bytes for strlen + '\0' */ | ||||||
|  | 		} string; | ||||||
|  | 	} value; | ||||||
|  | } kstat_named_t; | ||||||
|  | 
 | ||||||
|  | #define	KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr) | ||||||
|  | #define	KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len) | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_intr { | ||||||
|  | 	uint_t intrs[KSTAT_NUM_INTRS]; | ||||||
|  | } kstat_intr_t; | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_io { | ||||||
|  | 	u_longlong_t	nread;		/* number of bytes read */ | ||||||
|  | 	u_longlong_t	nwritten;	/* number of bytes written */ | ||||||
|  | 	uint_t		reads;		/* number of read operations */ | ||||||
|  | 	uint_t		writes;		/* number of write operations */ | ||||||
|  | 	hrtime_t	wtime;		/* cumulative wait (pre-service) time */ | ||||||
|  | 	hrtime_t	wlentime;	/* cumulative wait len*time product */ | ||||||
|  | 	hrtime_t	wlastupdate;	/* last time wait queue changed */ | ||||||
|  | 	hrtime_t	rtime;		/* cumulative run (service) time */ | ||||||
|  | 	hrtime_t	rlentime;	/* cumulative run length*time product */ | ||||||
|  | 	hrtime_t	rlastupdate;	/* last time run queue changed */ | ||||||
|  | 	uint_t		wcnt;		/* count of elements in wait state */ | ||||||
|  | 	uint_t		rcnt;		/* count of elements in run state */ | ||||||
|  | } kstat_io_t; | ||||||
|  | 
 | ||||||
|  | typedef struct kstat_timer { | ||||||
|  | 	char		name[KSTAT_STRLEN+1]; /* event name */ | ||||||
|  | 	u_longlong_t	num_events;	 /* number of events */ | ||||||
|  | 	hrtime_t	elapsed_time;	 /* cumulative elapsed time */ | ||||||
|  | 	hrtime_t	min_time;	 /* shortest event duration */ | ||||||
|  | 	hrtime_t	max_time;	 /* longest event duration */ | ||||||
|  | 	hrtime_t	start_time;	 /* previous event start time */ | ||||||
|  | 	hrtime_t	stop_time;	 /* previous event stop time */ | ||||||
|  | } kstat_timer_t; | ||||||
|  | 
 | ||||||
|  | int spl_kstat_init(void); | ||||||
|  | void spl_kstat_fini(void); | ||||||
|  | 
 | ||||||
|  | extern void __kstat_set_raw_ops(kstat_t *ksp, | ||||||
|  |     int (*headers)(char *buf, size_t size), | ||||||
|  |     int (*data)(char *buf, size_t size, void *data), | ||||||
|  |     void* (*addr)(kstat_t *ksp, loff_t index)); | ||||||
|  | 
 | ||||||
|  | extern kstat_t *__kstat_create(const char *ks_module, int ks_instance, | ||||||
|  |     const char *ks_name, const char *ks_class, uchar_t ks_type, | ||||||
|  |     uint_t ks_ndata, uchar_t ks_flags); | ||||||
|  | 
 | ||||||
|  | extern void __kstat_install(kstat_t *ksp); | ||||||
|  | extern void __kstat_delete(kstat_t *ksp); | ||||||
|  | extern void kstat_waitq_enter(kstat_io_t *); | ||||||
|  | extern void kstat_waitq_exit(kstat_io_t *); | ||||||
|  | extern void kstat_runq_enter(kstat_io_t *); | ||||||
|  | extern void kstat_runq_exit(kstat_io_t *); | ||||||
|  | 
 | ||||||
|  | #define	kstat_set_raw_ops(k, h, d, a) \ | ||||||
|  |     __kstat_set_raw_ops(k, h, d, a) | ||||||
|  | #define	kstat_create(m, i, n, c, t, s, f) \ | ||||||
|  |     __kstat_create(m, i, n, c, t, s, f) | ||||||
|  | 
 | ||||||
|  | #define	kstat_install(k)		__kstat_install(k) | ||||||
|  | #define	kstat_delete(k)			__kstat_delete(k) | ||||||
|  | 
 | ||||||
|  | #endif  /* _SPL_KSTAT_H */ | ||||||
							
								
								
									
										67
									
								
								include/os/freebsd/spl/sys/list.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								include/os/freebsd/spl/sys/list.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_LIST_H | ||||||
|  | #define	_SYS_LIST_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #include <sys/list_impl.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | typedef struct list_node list_node_t; | ||||||
|  | typedef struct list list_t; | ||||||
|  | 
 | ||||||
|  | void list_create(list_t *, size_t, size_t); | ||||||
|  | void list_destroy(list_t *); | ||||||
|  | 
 | ||||||
|  | void list_insert_after(list_t *, void *, void *); | ||||||
|  | void list_insert_before(list_t *, void *, void *); | ||||||
|  | void list_insert_head(list_t *, void *); | ||||||
|  | void list_insert_tail(list_t *, void *); | ||||||
|  | void list_remove(list_t *, void *); | ||||||
|  | void *list_remove_head(list_t *); | ||||||
|  | void *list_remove_tail(list_t *); | ||||||
|  | void list_move_tail(list_t *, list_t *); | ||||||
|  | 
 | ||||||
|  | void *list_head(list_t *); | ||||||
|  | void *list_tail(list_t *); | ||||||
|  | void *list_next(list_t *, void *); | ||||||
|  | void *list_prev(list_t *, void *); | ||||||
|  | int list_is_empty(list_t *); | ||||||
|  | 
 | ||||||
|  | void list_link_init(list_node_t *); | ||||||
|  | void list_link_replace(list_node_t *, list_node_t *); | ||||||
|  | 
 | ||||||
|  | int list_link_active(list_node_t *); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_LIST_H */ | ||||||
							
								
								
									
										53
									
								
								include/os/freebsd/spl/sys/list_impl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								include/os/freebsd/spl/sys/list_impl.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License, Version 1.0 only | ||||||
|  |  * (the "License").  You may not use this file except in compliance | ||||||
|  |  * with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_LIST_IMPL_H | ||||||
|  | #define	_SYS_LIST_IMPL_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | struct list_node { | ||||||
|  | 	struct list_node *list_next; | ||||||
|  | 	struct list_node *list_prev; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct list { | ||||||
|  | 	size_t	list_size; | ||||||
|  | 	size_t	list_offset; | ||||||
|  | 	struct list_node list_head; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_LIST_IMPL_H */ | ||||||
							
								
								
									
										40
									
								
								include/os/freebsd/spl/sys/lock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								include/os/freebsd/spl/sys/lock.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_LOCK_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_LOCK_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/lock.h> | ||||||
|  | 
 | ||||||
|  | #define	LO_ALLMASK	(LO_INITIALIZED | LO_WITNESS | LO_QUIET |	\ | ||||||
|  |     LO_RECURSABLE | LO_SLEEPABLE | LO_UPGRADABLE |	\ | ||||||
|  |     LO_DUPOK | LO_CLASSMASK | LO_NOPROFILE) | ||||||
|  | #define	LO_EXPECTED	(LO_INITIALIZED | LO_WITNESS | LO_RECURSABLE |	\ | ||||||
|  |     LO_SLEEPABLE | LO_UPGRADABLE | LO_DUPOK | (2 << LO_CLASSSHIFT)) | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_LOCK_H_ */ | ||||||
							
								
								
									
										56
									
								
								include/os/freebsd/spl/sys/misc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								include/os/freebsd/spl/sys/misc.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_MISC_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_MISC_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/limits.h> | ||||||
|  | 
 | ||||||
|  | #define	MAXUID	UID_MAX | ||||||
|  | 
 | ||||||
|  | #define	_ACL_ACLENT_ENABLED	0x1 | ||||||
|  | #define	_ACL_ACE_ENABLED	0x2 | ||||||
|  | 
 | ||||||
|  | #define	_FIOFFS		(INT_MIN) | ||||||
|  | #define	_FIOGDIO	(INT_MIN+1) | ||||||
|  | #define	_FIOSDIO	(INT_MIN+2) | ||||||
|  | 
 | ||||||
|  | #define	_FIO_SEEK_DATA	FIOSEEKDATA | ||||||
|  | #define	_FIO_SEEK_HOLE	FIOSEEKHOLE | ||||||
|  | 
 | ||||||
|  | struct opensolaris_utsname { | ||||||
|  | 	char	*sysname; | ||||||
|  | 	char	*nodename; | ||||||
|  | 	char	*release; | ||||||
|  | 	char	version[32]; | ||||||
|  | 	char	*machine; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | extern char hw_serial[11]; | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_MISC_H_ */ | ||||||
							
								
								
									
										97
									
								
								include/os/freebsd/spl/sys/mod_os.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								include/os/freebsd/spl/sys/mod_os.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_MOD_H | ||||||
|  | #define	_SPL_MOD_H | ||||||
|  | 
 | ||||||
|  | #include <sys/sysctl.h> | ||||||
|  | 
 | ||||||
|  | #define	ZFS_MODULE_DESCRIPTION(s) | ||||||
|  | #define	ZFS_MODULE_AUTHOR(s) | ||||||
|  | #define	ZFS_MODULE_LICENSE(s) | ||||||
|  | #define	ZFS_MODULE_VERSION(s) | ||||||
|  | 
 | ||||||
|  | #define	EXPORT_SYMBOL(x) | ||||||
|  | #define	module_param(a, b, c) | ||||||
|  | #define	MODULE_PARM_DESC(a, b) | ||||||
|  | 
 | ||||||
|  | #define	ZMOD_RW CTLFLAG_RWTUN | ||||||
|  | #define	ZMOD_RD CTLFLAG_RDTUN | ||||||
|  | 
 | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | #define	ZFS_MODULE_PARAM(scope_prefix, name_prefix, name, type, perm, desc) \ | ||||||
|  |     SYSCTL_DECL(_vfs_ ## scope_prefix); \ | ||||||
|  |     SYSCTL_##type(_vfs_ ## scope_prefix, OID_AUTO, name, perm, &name_prefix ## name, 0, desc) | ||||||
|  | 
 | ||||||
|  | #define	ZFS_MODULE_PARAM_ARGS	SYSCTL_HANDLER_ARGS | ||||||
|  | 
 | ||||||
|  | #define	ZFS_MODULE_PARAM_CALL_IMPL(parent, name, perm, args, desc) \ | ||||||
|  |     SYSCTL_DECL(parent); \ | ||||||
|  |     SYSCTL_PROC(parent, OID_AUTO, name, perm | args, desc) | ||||||
|  | 
 | ||||||
|  | #define	ZFS_MODULE_PARAM_CALL(scope_prefix, name_prefix, name, func, _, perm, desc) \ | ||||||
|  |     ZFS_MODULE_PARAM_CALL_IMPL(_vfs_ ## scope_prefix, name, perm, func ## _args(name_prefix ## name), desc) | ||||||
|  | 
 | ||||||
|  | #define	param_set_arc_long_args(var) \ | ||||||
|  |     CTLTYPE_ULONG, &var, 0, param_set_arc_long, "LU" | ||||||
|  | 
 | ||||||
|  | #define	param_set_arc_int_args(var) \ | ||||||
|  |     CTLTYPE_INT, &var, 0, param_set_arc_int, "I" | ||||||
|  | 
 | ||||||
|  | #define	param_set_deadman_failmode_args(var) \ | ||||||
|  |     CTLTYPE_STRING, NULL, 0, param_set_deadman_failmode, "A" | ||||||
|  | 
 | ||||||
|  | #define	param_set_deadman_synctime_args(var) \ | ||||||
|  |     CTLTYPE_ULONG, NULL, 0, param_set_deadman_synctime, "LU" | ||||||
|  | 
 | ||||||
|  | #define	param_set_deadman_ziotime_args(var) \ | ||||||
|  |     CTLTYPE_ULONG, NULL, 0, param_set_deadman_ziotime, "LU" | ||||||
|  | 
 | ||||||
|  | #define	param_set_slop_shift_args(var) \ | ||||||
|  |     CTLTYPE_INT, &var, 0, param_set_slop_shift, "I" | ||||||
|  | 
 | ||||||
|  | #include <sys/kernel.h> | ||||||
|  | #define	module_init(fn)							\ | ||||||
|  | static void \ | ||||||
|  | wrap_ ## fn(void *dummy __unused) \ | ||||||
|  | {								 \ | ||||||
|  | 	fn();						 \ | ||||||
|  | }																		\ | ||||||
|  | SYSINIT(zfs_ ## fn, SI_SUB_LAST, SI_ORDER_FIRST, wrap_ ## fn, NULL) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	module_exit(fn) 							\ | ||||||
|  | static void \ | ||||||
|  | wrap_ ## fn(void *dummy __unused) \ | ||||||
|  | {								 \ | ||||||
|  | 	fn();						 \ | ||||||
|  | }																		\ | ||||||
|  | SYSUNINIT(zfs_ ## fn, SI_SUB_LAST, SI_ORDER_FIRST, wrap_ ## fn, NULL) | ||||||
|  | /* END CSTYLED */ | ||||||
|  | 
 | ||||||
|  | #endif /* SPL_MOD_H */ | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/sys/mode.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/sys/mode.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /* do not delete */ | ||||||
							
								
								
									
										41
									
								
								include/os/freebsd/spl/sys/mount.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								include/os/freebsd/spl/sys/mount.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_MOUNT_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_MOUNT_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include_next <sys/mount.h> | ||||||
|  | #include <sys/vfs.h> | ||||||
|  | 
 | ||||||
|  | #define	MS_FORCE	MNT_FORCE | ||||||
|  | #define	MS_REMOUNT	MNT_UPDATE | ||||||
|  | 
 | ||||||
|  | typedef	struct fid		fid_t; | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_MOUNT_H_ */ | ||||||
							
								
								
									
										74
									
								
								include/os/freebsd/spl/sys/mutex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								include/os/freebsd/spl/sys/mutex.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_MUTEX_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_MUTEX_H_ | ||||||
|  | 
 | ||||||
|  | typedef struct sx	kmutex_t; | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/lock.h> | ||||||
|  | #include_next <sys/sdt.h> | ||||||
|  | #include_next <sys/mutex.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/sx.h> | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  | 	MUTEX_DEFAULT = 6	/* kernel default mutex */ | ||||||
|  | } kmutex_type_t; | ||||||
|  | 
 | ||||||
|  | #define	MUTEX_HELD(x)		(mutex_owned(x)) | ||||||
|  | #define	MUTEX_NOT_HELD(x)	(!mutex_owned(x) || panicstr) | ||||||
|  | 
 | ||||||
|  | #ifndef OPENSOLARIS_WITNESS | ||||||
|  | #define	MUTEX_FLAGS	(SX_DUPOK | SX_NEW | SX_NOWITNESS) | ||||||
|  | #else | ||||||
|  | #define	MUTEX_FLAGS	(SX_DUPOK | SX_NEW) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	mutex_init(lock, desc, type, arg)	do {			\ | ||||||
|  | 	const char *_name;						\ | ||||||
|  | 	ASSERT((type) == 0 || (type) == MUTEX_DEFAULT);			\ | ||||||
|  | 	KASSERT(((lock)->lock_object.lo_flags & LO_ALLMASK) !=		\ | ||||||
|  | 	    LO_EXPECTED, ("lock %s already initialized", #lock));	\ | ||||||
|  | 	for (_name = #lock; *_name != '\0'; _name++) {			\ | ||||||
|  | 		if (*_name >= 'a' && *_name <= 'z')			\ | ||||||
|  | 			break;						\ | ||||||
|  | 	}								\ | ||||||
|  | 	if (*_name == '\0')						\ | ||||||
|  | 		_name = #lock;						\ | ||||||
|  | 	sx_init_flags((lock), _name, MUTEX_FLAGS);			\ | ||||||
|  | } while (0) | ||||||
|  | #define	mutex_destroy(lock)	sx_destroy(lock) | ||||||
|  | #define	mutex_enter(lock)	sx_xlock(lock) | ||||||
|  | #define	mutex_enter_nested(lock, type)	sx_xlock(lock) | ||||||
|  | #define	mutex_tryenter(lock)	sx_try_xlock(lock) | ||||||
|  | #define	mutex_exit(lock)	sx_xunlock(lock) | ||||||
|  | #define	mutex_owned(lock)	sx_xlocked(lock) | ||||||
|  | #define	mutex_owner(lock)	sx_xholder(lock) | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_MUTEX_H_ */ | ||||||
							
								
								
									
										38
									
								
								include/os/freebsd/spl/sys/param.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/os/freebsd/spl/sys/param.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (C) 2007 John Birrell <jb@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 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 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 _COMPAT_OPENSOLARIS_SYS_PARAM_H_ | ||||||
|  | #define	_COMPAT_OPENSOLARIS_SYS_PARAM_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/param.h> | ||||||
|  | 
 | ||||||
|  | #define	PAGESIZE	PAGE_SIZE | ||||||
|  | #define	ptob(x)		((uint64_t)(x) << PAGE_SHIFT) | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										77
									
								
								include/os/freebsd/spl/sys/policy.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								include/os/freebsd/spl/sys/policy.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_POLICY_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_POLICY_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/xvattr.h> | ||||||
|  | #include <sys/vnode.h> | ||||||
|  | struct mount; | ||||||
|  | struct vattr; | ||||||
|  | 
 | ||||||
|  | int	secpolicy_nfs(cred_t *cr); | ||||||
|  | int	secpolicy_zfs(cred_t *crd); | ||||||
|  | int	secpolicy_sys_config(cred_t *cr, int checkonly); | ||||||
|  | int	secpolicy_zinject(cred_t *cr); | ||||||
|  | int	secpolicy_fs_unmount(cred_t *cr, struct mount *vfsp); | ||||||
|  | int	secpolicy_basic_link(vnode_t *vp, cred_t *cr); | ||||||
|  | int	secpolicy_vnode_owner(vnode_t *vp, cred_t *cr, uid_t owner); | ||||||
|  | int	secpolicy_vnode_chown(vnode_t *vp, cred_t *cr, uid_t owner); | ||||||
|  | int	secpolicy_vnode_stky_modify(cred_t *cr); | ||||||
|  | int	secpolicy_vnode_remove(vnode_t *vp, cred_t *cr); | ||||||
|  | int	secpolicy_vnode_access(cred_t *cr, vnode_t *vp, uid_t owner, | ||||||
|  | 	    accmode_t accmode); | ||||||
|  | int	secpolicy_vnode_access2(cred_t *cr, vnode_t *vp, uid_t owner, | ||||||
|  | 	    accmode_t curmode, accmode_t wantmode); | ||||||
|  | int	secpolicy_vnode_any_access(cred_t *cr, vnode_t *vp, uid_t owner); | ||||||
|  | int	secpolicy_vnode_setdac(vnode_t *vp, cred_t *cr, uid_t owner); | ||||||
|  | int	secpolicy_vnode_setattr(cred_t *cr, vnode_t *vp, struct vattr *vap, | ||||||
|  | 	    const struct vattr *ovap, int flags, | ||||||
|  | 	    int unlocked_access(void *, int, cred_t *), void *node); | ||||||
|  | int	secpolicy_vnode_create_gid(cred_t *cr); | ||||||
|  | int	secpolicy_vnode_setids_setgids(vnode_t *vp, cred_t *cr, gid_t gid); | ||||||
|  | int	secpolicy_vnode_setid_retain(vnode_t *vp, cred_t *cr, | ||||||
|  | 	    boolean_t issuidroot); | ||||||
|  | void	secpolicy_setid_clear(struct vattr *vap, vnode_t *vp, cred_t *cr); | ||||||
|  | int	secpolicy_setid_setsticky_clear(vnode_t *vp, struct vattr *vap, | ||||||
|  | 	    const struct vattr *ovap, cred_t *cr); | ||||||
|  | int	secpolicy_fs_owner(struct mount *vfsp, cred_t *cr); | ||||||
|  | int	secpolicy_fs_mount(cred_t *cr, vnode_t *mvp, struct mount *vfsp); | ||||||
|  | void	secpolicy_fs_mount_clearopts(cred_t *cr, struct mount *vfsp); | ||||||
|  | int	secpolicy_xvattr(vnode_t *vp, xvattr_t *xvap, uid_t owner, cred_t *cr, | ||||||
|  | 	    vtype_t vtype); | ||||||
|  | int	secpolicy_smb(cred_t *cr); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #if __FreeBSD_version >= 1300005 | ||||||
|  | #define	spl_priv_check_cred(a, b) priv_check_cred((a), (b)) | ||||||
|  | #else | ||||||
|  | #define	spl_priv_check_cred(a, b) priv_check_cred((a), (b), 0) | ||||||
|  | #endif | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_POLICY_H_ */ | ||||||
							
								
								
									
										120
									
								
								include/os/freebsd/spl/sys/proc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								include/os/freebsd/spl/sys/proc.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,120 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_PROC_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_PROC_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/kthread.h> | ||||||
|  | #include_next <sys/proc.h> | ||||||
|  | #include <sys/stdint.h> | ||||||
|  | #include <sys/smp.h> | ||||||
|  | #include <sys/sched.h> | ||||||
|  | #include <sys/lock.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <sys/unistd.h> | ||||||
|  | #include <sys/kmem.h> | ||||||
|  | #include <sys/malloc.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	CPU		curcpu | ||||||
|  | #define	minclsyspri	PRIBIO | ||||||
|  | #define	defclsyspri minclsyspri | ||||||
|  | #define	maxclsyspri	PVM | ||||||
|  | #define	max_ncpus	(mp_maxid + 1) | ||||||
|  | #define	boot_max_ncpus	(mp_maxid + 1) | ||||||
|  | 
 | ||||||
|  | #define	TS_RUN	0 | ||||||
|  | 
 | ||||||
|  | #define	p0	proc0 | ||||||
|  | 
 | ||||||
|  | #define	t_tid	td_tid | ||||||
|  | 
 | ||||||
|  | typedef	short		pri_t; | ||||||
|  | typedef	struct thread	_kthread; | ||||||
|  | typedef	struct thread	kthread_t; | ||||||
|  | typedef struct thread	*kthread_id_t; | ||||||
|  | typedef struct proc	proc_t; | ||||||
|  | 
 | ||||||
|  | extern struct proc *zfsproc; | ||||||
|  | 
 | ||||||
|  | struct thread_wrap { | ||||||
|  | 	void *tw_arg; | ||||||
|  | 	void (*tw_proc)(void*); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | solthread_wrapper(void *arg) | ||||||
|  | { | ||||||
|  | 	struct thread_wrap *tw = arg; | ||||||
|  | 
 | ||||||
|  | 	tw->tw_proc(tw->tw_arg); | ||||||
|  | 	free(tw, M_SOLARIS); | ||||||
|  | 	kthread_exit(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline kthread_t * | ||||||
|  | do_thread_create(caddr_t stk, size_t stksize, void (*proc)(void *), void *arg, | ||||||
|  |     size_t len, proc_t *pp, int state, pri_t pri) | ||||||
|  | { | ||||||
|  | 	kthread_t *td = NULL; | ||||||
|  | 	int error; | ||||||
|  | 	struct thread_wrap *tw; | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * Be sure there are no surprises. | ||||||
|  | 	 */ | ||||||
|  | 	ASSERT(stk == NULL); | ||||||
|  | 	ASSERT(len == 0); | ||||||
|  | 	ASSERT(state == TS_RUN); | ||||||
|  | 	tw = malloc(sizeof (*tw), M_SOLARIS, M_WAITOK); | ||||||
|  | 	tw->tw_proc = proc; | ||||||
|  | 	tw->tw_arg = arg; | ||||||
|  | 
 | ||||||
|  | 	error = kproc_kthread_add(solthread_wrapper, tw, &zfsproc, &td, | ||||||
|  | 	    RFSTOPPED, stksize / PAGE_SIZE, "zfskern", "solthread %p", proc); | ||||||
|  | 	if (error == 0) { | ||||||
|  | 		thread_lock(td); | ||||||
|  | 		sched_prio(td, pri); | ||||||
|  | 		sched_add(td, SRQ_BORING); | ||||||
|  | #if __FreeBSD_version < 1300068 | ||||||
|  | 		thread_unlock(td); | ||||||
|  | #endif | ||||||
|  | 	} else { | ||||||
|  | 		free(tw, M_SOLARIS); | ||||||
|  | 	} | ||||||
|  | 	return (td); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	thread_create(stk, stksize, proc, arg, len, pp, state, pri) \ | ||||||
|  | 	do_thread_create(stk, stksize, proc, arg, len, pp, state, pri) | ||||||
|  | #define	thread_exit()	kthread_exit() | ||||||
|  | 
 | ||||||
|  | int	uread(proc_t *, void *, size_t, uintptr_t); | ||||||
|  | int	uwrite(proc_t *, void *, size_t, uintptr_t); | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_PROC_H_ */ | ||||||
							
								
								
									
										63
									
								
								include/os/freebsd/spl/sys/processor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								include/os/freebsd/spl/sys/processor.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  *	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T | ||||||
|  |  *	  All Rights Reserved | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2014 Garrett D'Amore <garrett@damore.org> | ||||||
|  |  * | ||||||
|  |  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_PROCESSOR_H | ||||||
|  | #define	_SYS_PROCESSOR_H | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Definitions for p_online, processor_info & lgrp system calls. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Type for an lgrpid | ||||||
|  |  */ | ||||||
|  | typedef uint16_t lgrpid_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Type for processor name (CPU number). | ||||||
|  |  */ | ||||||
|  | typedef	int	processorid_t; | ||||||
|  | typedef int	chipid_t; | ||||||
|  | 
 | ||||||
|  | #define	getcpuid() curcpu | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_PROCESSOR_H */ | ||||||
							
								
								
									
										64
									
								
								include/os/freebsd/spl/sys/procfs_list.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								include/os/freebsd/spl/sys/procfs_list.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2018 by Delphix. All rights reserved. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SPL_PROCFS_LIST_H | ||||||
|  | #define	_SPL_PROCFS_LIST_H | ||||||
|  | 
 | ||||||
|  | #include <sys/kstat.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * procfs list manipulation | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | struct seq_file { }; | ||||||
|  | void seq_printf(struct seq_file *m, const char *fmt, ...); | ||||||
|  | 
 | ||||||
|  | typedef struct procfs_list { | ||||||
|  | 	void		*pl_private; | ||||||
|  | 	kmutex_t	pl_lock; | ||||||
|  | 	list_t		pl_list; | ||||||
|  | 	uint64_t	pl_next_id; | ||||||
|  | 	size_t		pl_node_offset; | ||||||
|  | } procfs_list_t; | ||||||
|  | 
 | ||||||
|  | typedef struct procfs_list_node { | ||||||
|  | 	list_node_t	pln_link; | ||||||
|  | 	uint64_t	pln_id; | ||||||
|  | } procfs_list_node_t; | ||||||
|  | 
 | ||||||
|  | void procfs_list_install(const char *module, | ||||||
|  |     const char *name, | ||||||
|  |     mode_t mode, | ||||||
|  |     procfs_list_t *procfs_list, | ||||||
|  |     int (*show)(struct seq_file *f, void *p), | ||||||
|  |     int (*show_header)(struct seq_file *f), | ||||||
|  |     int (*clear)(procfs_list_t *procfs_list), | ||||||
|  |     size_t procfs_list_node_off); | ||||||
|  | void procfs_list_uninstall(procfs_list_t *procfs_list); | ||||||
|  | void procfs_list_destroy(procfs_list_t *procfs_list); | ||||||
|  | void procfs_list_add(procfs_list_t *procfs_list, void *p); | ||||||
|  | 
 | ||||||
|  | #endif	/* _SPL_PROCFS_LIST_H */ | ||||||
							
								
								
									
										48
									
								
								include/os/freebsd/spl/sys/random.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								include/os/freebsd/spl/sys/random.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_RANDOM_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_RANDOM_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/random.h> | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | random_get_bytes(uint8_t *p, size_t s) | ||||||
|  | { | ||||||
|  | 	arc4rand(p, (int)s, 0); | ||||||
|  | 	return (0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int | ||||||
|  | random_get_pseudo_bytes(uint8_t *p, size_t s) | ||||||
|  | { | ||||||
|  | 	arc4rand(p, (int)s, 0); | ||||||
|  | 	return (0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_RANDOM_H_ */ | ||||||
							
								
								
									
										97
									
								
								include/os/freebsd/spl/sys/rwlock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								include/os/freebsd/spl/sys/rwlock.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_RWLOCK_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_RWLOCK_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/lock.h> | ||||||
|  | #include <sys/sx.h> | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  | 	RW_DEFAULT = 4		/* kernel default rwlock */ | ||||||
|  | } krw_type_t; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | typedef enum { | ||||||
|  | 	RW_NONE		= 0, | ||||||
|  | 	RW_WRITER	= 1, | ||||||
|  | 	RW_READER	= 2 | ||||||
|  | } krw_t; | ||||||
|  | 
 | ||||||
|  | typedef	struct sx	krwlock_t; | ||||||
|  | 
 | ||||||
|  | #ifndef OPENSOLARIS_WITNESS | ||||||
|  | #define	RW_FLAGS	(SX_DUPOK | SX_NOWITNESS) | ||||||
|  | #else | ||||||
|  | #define	RW_FLAGS	(SX_DUPOK) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	RW_READ_HELD(x)		(rw_read_held((x))) | ||||||
|  | #define	RW_WRITE_HELD(x)	(rw_write_held((x))) | ||||||
|  | #define	RW_LOCK_HELD(x)		(rw_lock_held((x))) | ||||||
|  | #define	RW_ISWRITER(x)		(rw_iswriter(x)) | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | #define	rw_init(lock, desc, type, arg)	do {				\ | ||||||
|  | 	const char *_name;						\ | ||||||
|  | 	ASSERT((type) == 0 || (type) == RW_DEFAULT);			\ | ||||||
|  | 	KASSERT(((lock)->lock_object.lo_flags & LO_ALLMASK) !=		\ | ||||||
|  | 	    LO_EXPECTED, ("lock %s already initialized", #lock));	\ | ||||||
|  | 	bzero((lock), sizeof(struct sx));				\ | ||||||
|  | 	for (_name = #lock; *_name != '\0'; _name++) {			\ | ||||||
|  | 		if (*_name >= 'a' && *_name <= 'z')			\ | ||||||
|  | 			break;						\ | ||||||
|  | 	}								\ | ||||||
|  | 	if (*_name == '\0')						\ | ||||||
|  | 		_name = #lock;						\ | ||||||
|  | 	sx_init_flags((lock), _name, RW_FLAGS);				\ | ||||||
|  | } while (0) | ||||||
|  | #define	rw_destroy(lock)	sx_destroy(lock) | ||||||
|  | #define	rw_enter(lock, how)	do {					\ | ||||||
|  | 	if ((how) == RW_READER)						\ | ||||||
|  | 		sx_slock(lock);						\ | ||||||
|  | 	else /* if ((how) == RW_WRITER) */				\ | ||||||
|  | 		sx_xlock(lock);						\ | ||||||
|  | 	} while (0) | ||||||
|  | 
 | ||||||
|  | #define	rw_tryenter(lock, how)			   \ | ||||||
|  | 	((how) == RW_READER ? sx_try_slock(lock) : sx_try_xlock(lock)) | ||||||
|  | #define	rw_exit(lock)		sx_unlock(lock) | ||||||
|  | #define	rw_downgrade(lock)	sx_downgrade(lock) | ||||||
|  | #define	rw_tryupgrade(lock)	sx_try_upgrade(lock) | ||||||
|  | #define	rw_read_held(lock)					  \ | ||||||
|  | 	((lock)->sx_lock != SX_LOCK_UNLOCKED &&	  \ | ||||||
|  | 	 ((lock)->sx_lock & SX_LOCK_SHARED)) | ||||||
|  | #define	rw_write_held(lock)	sx_xlocked(lock) | ||||||
|  | #define	rw_lock_held(lock)	(rw_read_held(lock) || rw_write_held(lock)) | ||||||
|  | #define	rw_iswriter(lock)	sx_xlocked(lock) | ||||||
|  | #define	rw_owner(lock)		sx_xholder(lock) | ||||||
|  | 
 | ||||||
|  | /* END CSTYLED */ | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_RWLOCK_H_ */ | ||||||
							
								
								
									
										45
									
								
								include/os/freebsd/spl/sys/sdt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								include/os/freebsd/spl/sys/sdt.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_SDT_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_SDT_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/sdt.h> | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | #ifdef KDTRACE_HOOKS | ||||||
|  | SDT_PROBE_DECLARE(sdt, , , set__error); | ||||||
|  | 
 | ||||||
|  | #define	SET_ERROR(err) \ | ||||||
|  | 	((sdt_sdt___set__error->id ? \ | ||||||
|  | 	(*sdt_probe_func)(sdt_sdt___set__error->id, \ | ||||||
|  | 	    (uintptr_t)err, 0, 0, 0, 0) : 0), err) | ||||||
|  | #else | ||||||
|  | #define	SET_ERROR(err) (err) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_SDT_H_ */ | ||||||
							
								
								
									
										84
									
								
								include/os/freebsd/spl/sys/sid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								include/os/freebsd/spl/sys/sid.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,84 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_SID_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_SID_H_ | ||||||
|  | 
 | ||||||
|  | typedef struct ksiddomain { | ||||||
|  | 	char	*kd_name;	/* Domain part of SID */ | ||||||
|  | 	uint_t	kd_len; | ||||||
|  | } ksiddomain_t; | ||||||
|  | typedef void	ksid_t; | ||||||
|  | 
 | ||||||
|  | static __inline ksiddomain_t * | ||||||
|  | ksid_lookupdomain(const char *domain) | ||||||
|  | { | ||||||
|  | 	ksiddomain_t *kd; | ||||||
|  | 	size_t len; | ||||||
|  | 
 | ||||||
|  | 	len = strlen(domain) + 1; | ||||||
|  | 	kd = kmem_alloc(sizeof (*kd), KM_SLEEP); | ||||||
|  | 	kd->kd_len = (uint_t)len; | ||||||
|  | 	kd->kd_name = kmem_alloc(len, KM_SLEEP); | ||||||
|  | 	strcpy(kd->kd_name, domain); | ||||||
|  | 	return (kd); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | ksiddomain_rele(ksiddomain_t *kd) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	kmem_free(kd->kd_name, kd->kd_len); | ||||||
|  | 	kmem_free(kd, sizeof (*kd)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint_t | ||||||
|  | ksid_getid(ksid_t *ks) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	panic("%s has been unexpectedly called", __func__); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline const char * | ||||||
|  | ksid_getdomain(ksid_t *ks) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	panic("%s has been unexpectedly called", __func__); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline uint_t | ||||||
|  | ksid_getrid(ksid_t *ks) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	panic("%s has been unexpectedly called", __func__); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	kidmap_getsidbyuid(zone, uid, sid_prefix, rid)	(1) | ||||||
|  | #define	kidmap_getsidbygid(zone, gid, sid_prefix, rid)	(1) | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_SID_H_ */ | ||||||
							
								
								
									
										65
									
								
								include/os/freebsd/spl/sys/sig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								include/os/freebsd/spl/sys/sig.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2008 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_SIG_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_SIG_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/signal.h> | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/lock.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/signalvar.h> | ||||||
|  | #include <sys/debug.h> | ||||||
|  | 
 | ||||||
|  | #define	FORREAL		0 | ||||||
|  | #define	JUSTLOOKING	1 | ||||||
|  | 
 | ||||||
|  | static __inline int | ||||||
|  | issig(int why) | ||||||
|  | { | ||||||
|  | 	struct thread *td = curthread; | ||||||
|  | 	struct proc *p; | ||||||
|  | 	int sig; | ||||||
|  | 
 | ||||||
|  | 	ASSERT(why == FORREAL || why == JUSTLOOKING); | ||||||
|  | 	if (SIGPENDING(td)) { | ||||||
|  | 		if (why == JUSTLOOKING) | ||||||
|  | 			return (1); | ||||||
|  | 		p = td->td_proc; | ||||||
|  | 		PROC_LOCK(p); | ||||||
|  | 		mtx_lock(&p->p_sigacts->ps_mtx); | ||||||
|  | 		sig = cursig(td); | ||||||
|  | 		mtx_unlock(&p->p_sigacts->ps_mtx); | ||||||
|  | 		PROC_UNLOCK(p); | ||||||
|  | 		if (sig != 0) | ||||||
|  | 			return (1); | ||||||
|  | 	} | ||||||
|  | 	return (0); | ||||||
|  | } | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_SIG_H_ */ | ||||||
							
								
								
									
										43
									
								
								include/os/freebsd/spl/sys/simd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/os/freebsd/spl/sys/simd.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _FREEBSD_SIMD_H | ||||||
|  | #define	_FREEBSD_SIMD_H | ||||||
|  | #if defined(__amd64__) || defined(__i386__) | ||||||
|  | #include <sys/simd_x86.h> | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #define	kfpu_allowed()		0 | ||||||
|  | #define	kfpu_initialize(tsk)	do {} while (0) | ||||||
|  | #define	kfpu_begin()		do {} while (0) | ||||||
|  | #define	kfpu_end()		do {} while (0) | ||||||
|  | #define	kfpu_init()		(0) | ||||||
|  | #define	kfpu_fini()		do {} while (0) | ||||||
|  | #endif | ||||||
|  | #endif | ||||||
							
								
								
									
										296
									
								
								include/os/freebsd/spl/sys/simd_x86.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								include/os/freebsd/spl/sys/simd_x86.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,296 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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$ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <sys/cdefs.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/systm.h> | ||||||
|  | #include <machine/fpu.h> | ||||||
|  | #include <x86/x86_var.h> | ||||||
|  | #include <x86/specialreg.h> | ||||||
|  | 
 | ||||||
|  | #define	kfpu_init()		(0) | ||||||
|  | #define	kfpu_fini()		do {} while (0) | ||||||
|  | #define	kfpu_allowed()		1 | ||||||
|  | #define	kfpu_initialize(tsk)	do {} while (0) | ||||||
|  | 
 | ||||||
|  | #define	kfpu_begin() {							\ | ||||||
|  | 	critical_enter();					\ | ||||||
|  | 	fpu_kern_enter(curthread, NULL, FPU_KERN_NOCTX); \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	kfpu_end()						\ | ||||||
|  | 	{						 \ | ||||||
|  | 		fpu_kern_leave(curthread, NULL); \ | ||||||
|  | 		critical_exit();			     \ | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if OS supports AVX and AVX2 by checking XCR0 | ||||||
|  |  * Only call this function if CPUID indicates that AVX feature is | ||||||
|  |  * supported by the CPU, otherwise it might be an illegal instruction. | ||||||
|  |  */ | ||||||
|  | static inline uint64_t | ||||||
|  | xgetbv(uint32_t index) | ||||||
|  | { | ||||||
|  | 	uint32_t eax, edx; | ||||||
|  | 	/* xgetbv - instruction byte code */ | ||||||
|  | 	__asm__ __volatile__(".byte 0x0f; .byte 0x01; .byte 0xd0" | ||||||
|  | 	    : "=a" (eax), "=d" (edx) | ||||||
|  | 	    : "c" (index)); | ||||||
|  | 
 | ||||||
|  | 	return ((((uint64_t)edx)<<32) | (uint64_t)eax); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Detect register set support | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | __simd_state_enabled(const uint64_t state) | ||||||
|  | { | ||||||
|  | 	boolean_t has_osxsave; | ||||||
|  | 	uint64_t xcr0; | ||||||
|  | 
 | ||||||
|  | 	has_osxsave = !!(cpu_feature2 & CPUID2_OSXSAVE); | ||||||
|  | 
 | ||||||
|  | 	if (!has_osxsave) | ||||||
|  | 		return (B_FALSE); | ||||||
|  | 
 | ||||||
|  | 	xcr0 = xgetbv(0); | ||||||
|  | 	return ((xcr0 & state) == state); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	_XSTATE_SSE_AVX		(0x2 | 0x4) | ||||||
|  | #define	_XSTATE_AVX512		(0xE0 | _XSTATE_SSE_AVX) | ||||||
|  | 
 | ||||||
|  | #define	__ymm_enabled() __simd_state_enabled(_XSTATE_SSE_AVX) | ||||||
|  | #define	__zmm_enabled() __simd_state_enabled(_XSTATE_AVX512) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSE instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_sse_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature & CPUID_SSE)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSE2 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_sse2_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature & CPUID_SSE2)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSE3 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_sse3_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature2 & CPUID2_SSE3)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSSE3 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_ssse3_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature2 & CPUID2_SSSE3)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSE4.1 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_sse4_1_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature2 & CPUID2_SSE41)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if SSE4.2 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_sse4_2_available(void) | ||||||
|  | { | ||||||
|  | 	return (!!(cpu_feature2 & CPUID2_SSE42)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if AVX instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx; | ||||||
|  | 
 | ||||||
|  | 	has_avx = !!(cpu_feature2 & CPUID2_AVX); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx && __ymm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check if AVX2 instruction set is available | ||||||
|  |  */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx2_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx2; | ||||||
|  | 
 | ||||||
|  | 	has_avx2 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX2); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx2 && __ymm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * AVX-512 family of instruction sets: | ||||||
|  |  * | ||||||
|  |  * AVX512F	Foundation | ||||||
|  |  * AVX512CD	Conflict Detection Instructions | ||||||
|  |  * AVX512ER	Exponential and Reciprocal Instructions | ||||||
|  |  * AVX512PF	Prefetch Instructions | ||||||
|  |  * | ||||||
|  |  * AVX512BW	Byte and Word Instructions | ||||||
|  |  * AVX512DQ	Double-word and Quadword Instructions | ||||||
|  |  * AVX512VL	Vector Length Extensions | ||||||
|  |  * | ||||||
|  |  * AVX512IFMA	Integer Fused Multiply Add (Not supported by kernel 4.4) | ||||||
|  |  * AVX512VBMI	Vector Byte Manipulation Instructions | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512F instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512f_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512CD instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512cd_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512CD); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512ER instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512er_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512CD); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512PF instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512pf_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512PF); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512BW instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512bw_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512 = B_FALSE; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512BW); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512DQ instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512dq_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512DQ); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512VL instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512vl_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512VL); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512IFMA instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512ifma_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_AVX512IFMA); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check if AVX512VBMI instruction set is available */ | ||||||
|  | static inline boolean_t | ||||||
|  | zfs_avx512vbmi_available(void) | ||||||
|  | { | ||||||
|  | 	boolean_t has_avx512; | ||||||
|  | 
 | ||||||
|  | 	has_avx512 = !!(cpu_stdext_feature & CPUID_STDEXT_AVX512F) && | ||||||
|  | 	    !!(cpu_stdext_feature & CPUID_STDEXT_BMI1); | ||||||
|  | 
 | ||||||
|  | 	return (has_avx512 && __zmm_enabled()); | ||||||
|  | } | ||||||
							
								
								
									
										81
									
								
								include/os/freebsd/spl/sys/spl_condvar.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								include/os/freebsd/spl/sys/spl_condvar.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | |||||||
|  | /*
 | ||||||
|  |  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD | ||||||
|  |  * | ||||||
|  |  * Copyright (c) 2000 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	_SPL_SYS_CONDVAR_H_ | ||||||
|  | #define	_SPL_SYS_CONDVAR_H_ | ||||||
|  | 
 | ||||||
|  | #ifndef	LOCORE | ||||||
|  | #include <sys/queue.h> | ||||||
|  | 
 | ||||||
|  | struct lock_object; | ||||||
|  | struct thread; | ||||||
|  | 
 | ||||||
|  | TAILQ_HEAD(cv_waitq, thread); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Condition variable.  The waiters count is protected by the mutex that | ||||||
|  |  * protects the condition; that is, the mutex that is passed to cv_wait*() | ||||||
|  |  * and is held across calls to cv_signal() and cv_broadcast().  It is an | ||||||
|  |  * optimization to avoid looking up the sleep queue if there are no waiters. | ||||||
|  |  */ | ||||||
|  | struct cv { | ||||||
|  | 	const char	*cv_description; | ||||||
|  | 	int		cv_waiters; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | void	cv_init(struct cv *cvp, const char *desc); | ||||||
|  | void	cv_destroy(struct cv *cvp); | ||||||
|  | 
 | ||||||
|  | void	_cv_wait(struct cv *cvp, struct lock_object *lock); | ||||||
|  | void	_cv_wait_unlock(struct cv *cvp, struct lock_object *lock); | ||||||
|  | int	_cv_wait_sig(struct cv *cvp, struct lock_object *lock); | ||||||
|  | int	_cv_timedwait_sbt(struct cv *cvp, struct lock_object *lock, | ||||||
|  | 	    sbintime_t sbt, sbintime_t pr, int flags); | ||||||
|  | int	_cv_timedwait_sig_sbt(struct cv *cvp, struct lock_object *lock, | ||||||
|  | 	    sbintime_t sbt, sbintime_t pr, int flags); | ||||||
|  | 
 | ||||||
|  | void	cv_signal(struct cv *cvp); | ||||||
|  | void	cv_broadcastpri(struct cv *cvp, int pri); | ||||||
|  | 
 | ||||||
|  | #define	cv_wait(cvp, lock)						\ | ||||||
|  | 	_cv_wait((cvp), &(lock)->lock_object) | ||||||
|  | #define	cv_wait_unlock(cvp, lock)					\ | ||||||
|  | 	_cv_wait_unlock((cvp), &(lock)->lock_object) | ||||||
|  | #define	cv_timedwait_sbt(cvp, lock, sbt, pr, flags)			\ | ||||||
|  | 	_cv_timedwait_sbt((cvp), &(lock)->lock_object, (sbt), (pr), (flags)) | ||||||
|  | #define	cv_timedwait_sig_sbt(cvp, lock, sbt, pr, flags)			\ | ||||||
|  | 	_cv_timedwait_sig_sbt((cvp), &(lock)->lock_object, (sbt), (pr), (flags)) | ||||||
|  | 
 | ||||||
|  | #define	cv_broadcast(cvp)	cv_broadcastpri(cvp, 0) | ||||||
|  | 
 | ||||||
|  | #define	cv_wmesg(cvp)		((cvp)->cv_description) | ||||||
|  | 
 | ||||||
|  | #endif	/* !LOCORE */ | ||||||
|  | #endif	/* _SYS_CONDVAR_H_ */ | ||||||
							
								
								
									
										39
									
								
								include/os/freebsd/spl/sys/string.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								include/os/freebsd/spl/sys/string.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_STRING_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_STRING_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/libkern.h> | ||||||
|  | 
 | ||||||
|  | char	*strpbrk(const char *, const char *); | ||||||
|  | void	 strident_canon(char *, size_t); | ||||||
|  | void	 kmem_strfree(char *); | ||||||
|  | char	*kmem_strdup(const char *s); | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_STRING_H_ */ | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/sys/strings.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/sys/strings.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /* do not delete */ | ||||||
							
								
								
									
										67
									
								
								include/os/freebsd/spl/sys/sunddi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								include/os/freebsd/spl/sys/sunddi.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | |||||||
|  | /*
 | ||||||
|  |  *  Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. | ||||||
|  |  *  Copyright (C) 2007 The Regents of the University of California. | ||||||
|  |  *  Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). | ||||||
|  |  *  Written by Brian Behlendorf <behlendorf1@llnl.gov>. | ||||||
|  |  *  UCRL-CODE-235197 | ||||||
|  |  * | ||||||
|  |  *  This file is part of the SPL, Solaris Porting Layer. | ||||||
|  |  *  For details, see <http://zfsonlinux.org/>.
 | ||||||
|  |  * | ||||||
|  |  *  The SPL is free software; you can redistribute it and/or modify it | ||||||
|  |  *  under the terms of the GNU General Public License as published by the | ||||||
|  |  *  Free Software Foundation; either version 2 of the License, or (at your | ||||||
|  |  *  option) any later version. | ||||||
|  |  * | ||||||
|  |  *  The SPL is distributed in the hope that it will be useful, but WITHOUT | ||||||
|  |  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||||||
|  |  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||||
|  |  *  for more details. | ||||||
|  |  * | ||||||
|  |  *  You should have received a copy of the GNU General Public License along | ||||||
|  |  *  with the SPL.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SPL_SUNDDI_H | ||||||
|  | #define	_SPL_SUNDDI_H | ||||||
|  | 
 | ||||||
|  | #include <sys/cred.h> | ||||||
|  | #include <sys/uio.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <sys/u8_textprep.h> | ||||||
|  | #include <sys/vnode.h> | ||||||
|  | 
 | ||||||
|  | typedef int ddi_devid_t; | ||||||
|  | 
 | ||||||
|  | #define	DDI_DEV_T_NONE				((dev_t)-1) | ||||||
|  | #define	DDI_DEV_T_ANY				((dev_t)-2) | ||||||
|  | #define	DI_MAJOR_T_UNKNOWN			((major_t)0) | ||||||
|  | 
 | ||||||
|  | #define	DDI_PROP_DONTPASS			0x0001 | ||||||
|  | #define	DDI_PROP_CANSLEEP			0x0002 | ||||||
|  | 
 | ||||||
|  | #define	DDI_SUCCESS				0 | ||||||
|  | #define	DDI_FAILURE				-1 | ||||||
|  | 
 | ||||||
|  | #define	ddi_prop_lookup_string(x1, x2, x3, x4, x5)	(*x5 = NULL) | ||||||
|  | #define	ddi_prop_free(x)				(void)0 | ||||||
|  | #define	ddi_root_node()					(void)0 | ||||||
|  | 
 | ||||||
|  | extern int ddi_strtoul(const char *, char **, int, unsigned long *); | ||||||
|  | extern int ddi_strtol(const char *, char **, int, long *); | ||||||
|  | extern int ddi_strtoull(const char *, char **, int, unsigned long long *); | ||||||
|  | extern int ddi_strtoll(const char *, char **, int, long long *); | ||||||
|  | 
 | ||||||
|  | extern int ddi_copyin(const void *from, void *to, size_t len, int flags); | ||||||
|  | extern int ddi_copyout(const void *from, void *to, size_t len, int flags); | ||||||
|  | extern void ddi_sysevent_init(void); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | int ddi_soft_state_init(void **statep, size_t size, size_t nitems); | ||||||
|  | void ddi_soft_state_fini(void **statep); | ||||||
|  | 
 | ||||||
|  | void *ddi_get_soft_state(void *state, int item); | ||||||
|  | int ddi_soft_state_zalloc(void *state, int item); | ||||||
|  | void ddi_soft_state_free(void *state, int item); | ||||||
|  | 
 | ||||||
|  | #endif /* SPL_SUNDDI_H */ | ||||||
							
								
								
									
										404
									
								
								include/os/freebsd/spl/sys/sysmacros.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										404
									
								
								include/os/freebsd/spl/sys/sysmacros.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,404 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/ | ||||||
|  | /*	  All Rights Reserved  	*/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_SYSMACROS_H | ||||||
|  | #define	_SYS_SYSMACROS_H | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/isa_defs.h> | ||||||
|  | #include <sys/libkern.h> | ||||||
|  | #include <sys/zone.h> | ||||||
|  | #include <sys/condvar.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Some macros for units conversion | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Disk blocks (sectors) and bytes. | ||||||
|  |  */ | ||||||
|  | #define	dtob(DD)	((DD) << DEV_BSHIFT) | ||||||
|  | #define	btod(BB)	(((BB) + DEV_BSIZE - 1) >> DEV_BSHIFT) | ||||||
|  | #define	btodt(BB)	((BB) >> DEV_BSHIFT) | ||||||
|  | #define	lbtod(BB)	(((offset_t)(BB) + DEV_BSIZE - 1) >> DEV_BSHIFT) | ||||||
|  | 
 | ||||||
|  | /* common macros */ | ||||||
|  | #ifndef MIN | ||||||
|  | #define	MIN(a, b)	((a) < (b) ? (a) : (b)) | ||||||
|  | #endif | ||||||
|  | #ifndef MAX | ||||||
|  | #define	MAX(a, b)	((a) < (b) ? (b) : (a)) | ||||||
|  | #endif | ||||||
|  | #ifndef ABS | ||||||
|  | #define	ABS(a)		((a) < 0 ? -(a) : (a)) | ||||||
|  | #endif | ||||||
|  | #ifndef	SIGNOF | ||||||
|  | #define	SIGNOF(a)	((a) < 0 ? -1 : (a) > 0) | ||||||
|  | #endif | ||||||
|  | #ifndef	ARRAY_SIZE | ||||||
|  | #define	ARRAY_SIZE(a) (sizeof (a) / sizeof (a[0])) | ||||||
|  | #endif | ||||||
|  | #ifndef	DIV_ROUND_UP | ||||||
|  | #define	DIV_ROUND_UP(n, d)	(((n) + (d) - 1) / (d)) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	boot_ncpus mp_ncpus | ||||||
|  | #define	kpreempt_disable() critical_enter() | ||||||
|  | #define	kpreempt_enable() critical_exit() | ||||||
|  | #define	CPU_SEQID curcpu | ||||||
|  | #define	is_system_labeled()		0 | ||||||
|  | /*
 | ||||||
|  |  * Convert a single byte to/from binary-coded decimal (BCD). | ||||||
|  |  */ | ||||||
|  | extern unsigned char byte_to_bcd[256]; | ||||||
|  | extern unsigned char bcd_to_byte[256]; | ||||||
|  | 
 | ||||||
|  | #define	BYTE_TO_BCD(x)	byte_to_bcd[(x) & 0xff] | ||||||
|  | #define	BCD_TO_BYTE(x)	bcd_to_byte[(x) & 0xff] | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * WARNING: The device number macros defined here should not be used by device | ||||||
|  |  * drivers or user software. Device drivers should use the device functions | ||||||
|  |  * defined in the DDI/DKI interface (see also ddi.h). Application software | ||||||
|  |  * should make use of the library routines available in makedev(3). A set of | ||||||
|  |  * new device macros are provided to operate on the expanded device number | ||||||
|  |  * format supported in SVR4. Macro versions of the DDI device functions are | ||||||
|  |  * provided for use by kernel proper routines only. Macro routines bmajor(), | ||||||
|  |  * major(), minor(), emajor(), eminor(), and makedev() will be removed or | ||||||
|  |  * their definitions changed at the next major release following SVR4. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	O_BITSMAJOR	7	/* # of SVR3 major device bits */ | ||||||
|  | #define	O_BITSMINOR	8	/* # of SVR3 minor device bits */ | ||||||
|  | #define	O_MAXMAJ	0x7f	/* SVR3 max major value */ | ||||||
|  | #define	O_MAXMIN	0xff	/* SVR3 max minor value */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	L_BITSMAJOR32	14	/* # of SVR4 major device bits */ | ||||||
|  | #define	L_BITSMINOR32	18	/* # of SVR4 minor device bits */ | ||||||
|  | #define	L_MAXMAJ32	0x3fff	/* SVR4 max major value */ | ||||||
|  | #define	L_MAXMIN32	0x3ffff	/* MAX minor for 3b2 software drivers. */ | ||||||
|  | 				/* For 3b2 hardware devices the minor is */ | ||||||
|  | 				/* restricted to 256 (0-255) */ | ||||||
|  | 
 | ||||||
|  | #ifdef _LP64 | ||||||
|  | #define	L_BITSMAJOR	32	/* # of major device bits in 64-bit Solaris */ | ||||||
|  | #define	L_BITSMINOR	32	/* # of minor device bits in 64-bit Solaris */ | ||||||
|  | #define	L_MAXMAJ	0xfffffffful	/* max major value */ | ||||||
|  | #define	L_MAXMIN	0xfffffffful	/* max minor value */ | ||||||
|  | #else | ||||||
|  | #define	L_BITSMAJOR	L_BITSMAJOR32 | ||||||
|  | #define	L_BITSMINOR	L_BITSMINOR32 | ||||||
|  | #define	L_MAXMAJ	L_MAXMAJ32 | ||||||
|  | #define	L_MAXMIN	L_MAXMIN32 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * These are versions of the kernel routines for compressing and | ||||||
|  |  * expanding long device numbers that don't return errors. | ||||||
|  |  */ | ||||||
|  | #if (L_BITSMAJOR32 == L_BITSMAJOR) && (L_BITSMINOR32 == L_BITSMINOR) | ||||||
|  | 
 | ||||||
|  | #define	DEVCMPL(x)	(x) | ||||||
|  | #define	DEVEXPL(x)	(x) | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | #define	DEVCMPL(x)	\ | ||||||
|  | 	(dev32_t)((((x) >> L_BITSMINOR) > L_MAXMAJ32 || \ | ||||||
|  | 	    ((x) & L_MAXMIN) > L_MAXMIN32) ? NODEV32 : \ | ||||||
|  | 	    ((((x) >> L_BITSMINOR) << L_BITSMINOR32) | ((x) & L_MAXMIN32))) | ||||||
|  | 
 | ||||||
|  | #define	DEVEXPL(x)	\ | ||||||
|  | 	(((x) == NODEV32) ? NODEV : \ | ||||||
|  | 	makedevice(((x) >> L_BITSMINOR32) & L_MAXMAJ32, (x) & L_MAXMIN32)) | ||||||
|  | 
 | ||||||
|  | #endif /* L_BITSMAJOR32 ... */ | ||||||
|  | 
 | ||||||
|  | /* convert to old (SVR3.2) dev format */ | ||||||
|  | 
 | ||||||
|  | #define	cmpdev(x) \ | ||||||
|  | 	(o_dev_t)((((x) >> L_BITSMINOR) > O_MAXMAJ || \ | ||||||
|  | 	    ((x) & L_MAXMIN) > O_MAXMIN) ? NODEV : \ | ||||||
|  | 	    ((((x) >> L_BITSMINOR) << O_BITSMINOR) | ((x) & O_MAXMIN))) | ||||||
|  | 
 | ||||||
|  | /* convert to new (SVR4) dev format */ | ||||||
|  | 
 | ||||||
|  | #define	expdev(x) \ | ||||||
|  | 	(dev_t)(((dev_t)(((x) >> O_BITSMINOR) & O_MAXMAJ) << L_BITSMINOR) | \ | ||||||
|  | 	    ((x) & O_MAXMIN)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macro for checking power of 2 address alignment. | ||||||
|  |  */ | ||||||
|  | #define	IS_P2ALIGNED(v, a) ((((uintptr_t)(v)) & ((uintptr_t)(a) - 1)) == 0) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros for counting and rounding. | ||||||
|  |  */ | ||||||
|  | #define	howmany(x, y)	(((x)+((y)-1))/(y)) | ||||||
|  | #define	roundup(x, y)	((((x)+((y)-1))/(y))*(y)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macro to determine if value is a power of 2 | ||||||
|  |  */ | ||||||
|  | #define	ISP2(x)		(((x) & ((x) - 1)) == 0) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros for various sorts of alignment and rounding.  The "align" must | ||||||
|  |  * be a power of 2.  Often times it is a block, sector, or page. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return x rounded down to an align boundary | ||||||
|  |  * eg, P2ALIGN(1200, 1024) == 1024 (1*align) | ||||||
|  |  * eg, P2ALIGN(1024, 1024) == 1024 (1*align) | ||||||
|  |  * eg, P2ALIGN(0x1234, 0x100) == 0x1200 (0x12*align) | ||||||
|  |  * eg, P2ALIGN(0x5600, 0x100) == 0x5600 (0x56*align) | ||||||
|  |  */ | ||||||
|  | #define	P2ALIGN(x, align)		((x) & -(align)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return x % (mod) align | ||||||
|  |  * eg, P2PHASE(0x1234, 0x100) == 0x34 (x-0x12*align) | ||||||
|  |  * eg, P2PHASE(0x5600, 0x100) == 0x00 (x-0x56*align) | ||||||
|  |  */ | ||||||
|  | #define	P2PHASE(x, align)		((x) & ((align) - 1)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return how much space is left in this block (but if it's perfectly | ||||||
|  |  * aligned, return 0). | ||||||
|  |  * eg, P2NPHASE(0x1234, 0x100) == 0xcc (0x13*align-x) | ||||||
|  |  * eg, P2NPHASE(0x5600, 0x100) == 0x00 (0x56*align-x) | ||||||
|  |  */ | ||||||
|  | #define	P2NPHASE(x, align)		(-(x) & ((align) - 1)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return x rounded up to an align boundary | ||||||
|  |  * eg, P2ROUNDUP(0x1234, 0x100) == 0x1300 (0x13*align) | ||||||
|  |  * eg, P2ROUNDUP(0x5600, 0x100) == 0x5600 (0x56*align) | ||||||
|  |  */ | ||||||
|  | #define	P2ROUNDUP(x, align)		(-(-(x) & -(align))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return the ending address of the block that x is in | ||||||
|  |  * eg, P2END(0x1234, 0x100) == 0x12ff (0x13*align - 1) | ||||||
|  |  * eg, P2END(0x5600, 0x100) == 0x56ff (0x57*align - 1) | ||||||
|  |  */ | ||||||
|  | #define	P2END(x, align)			(-(~(x) & -(align))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return x rounded up to the next phase (offset) within align. | ||||||
|  |  * phase should be < align. | ||||||
|  |  * eg, P2PHASEUP(0x1234, 0x100, 0x10) == 0x1310 (0x13*align + phase) | ||||||
|  |  * eg, P2PHASEUP(0x5600, 0x100, 0x10) == 0x5610 (0x56*align + phase) | ||||||
|  |  */ | ||||||
|  | #define	P2PHASEUP(x, align, phase)	((phase) - (((phase) - (x)) & -(align))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * return TRUE if adding len to off would cause it to cross an align | ||||||
|  |  * boundary. | ||||||
|  |  * eg, P2BOUNDARY(0x1234, 0xe0, 0x100) == TRUE (0x1234 + 0xe0 == 0x1314) | ||||||
|  |  * eg, P2BOUNDARY(0x1234, 0x50, 0x100) == FALSE (0x1234 + 0x50 == 0x1284) | ||||||
|  |  */ | ||||||
|  | #define	P2BOUNDARY(off, len, align) \ | ||||||
|  | 	(((off) ^ ((off) + (len) - 1)) > (align) - 1) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Return TRUE if they have the same highest bit set. | ||||||
|  |  * eg, P2SAMEHIGHBIT(0x1234, 0x1001) == TRUE (the high bit is 0x1000) | ||||||
|  |  * eg, P2SAMEHIGHBIT(0x1234, 0x3010) == FALSE (high bit of 0x3010 is 0x2000) | ||||||
|  |  */ | ||||||
|  | #define	P2SAMEHIGHBIT(x, y)		(((x) ^ (y)) < ((x) & (y))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Typed version of the P2* macros.  These macros should be used to ensure | ||||||
|  |  * that the result is correctly calculated based on the data type of (x), | ||||||
|  |  * which is passed in as the last argument, regardless of the data | ||||||
|  |  * type of the alignment.  For example, if (x) is of type uint64_t, | ||||||
|  |  * and we want to round it up to a page boundary using "PAGESIZE" as | ||||||
|  |  * the alignment, we can do either | ||||||
|  |  *	P2ROUNDUP(x, (uint64_t)PAGESIZE) | ||||||
|  |  * or | ||||||
|  |  *	P2ROUNDUP_TYPED(x, PAGESIZE, uint64_t) | ||||||
|  |  */ | ||||||
|  | #define	P2ALIGN_TYPED(x, align, type)	\ | ||||||
|  | 	((type)(x) & -(type)(align)) | ||||||
|  | #define	P2PHASE_TYPED(x, align, type)	\ | ||||||
|  | 	((type)(x) & ((type)(align) - 1)) | ||||||
|  | #define	P2NPHASE_TYPED(x, align, type)	\ | ||||||
|  | 	(-(type)(x) & ((type)(align) - 1)) | ||||||
|  | #define	P2ROUNDUP_TYPED(x, align, type)	\ | ||||||
|  | 	(-(-(type)(x) & -(type)(align))) | ||||||
|  | #define	P2END_TYPED(x, align, type)	\ | ||||||
|  | 	(-(~(type)(x) & -(type)(align))) | ||||||
|  | #define	P2PHASEUP_TYPED(x, align, phase, type)	\ | ||||||
|  | 	((type)(phase) - (((type)(phase) - (type)(x)) & -(type)(align))) | ||||||
|  | #define	P2CROSS_TYPED(x, y, align, type)	\ | ||||||
|  | 	(((type)(x) ^ (type)(y)) > (type)(align) - 1) | ||||||
|  | #define	P2SAMEHIGHBIT_TYPED(x, y, type) \ | ||||||
|  | 	(((type)(x) ^ (type)(y)) < ((type)(x) & (type)(y))) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros to atomically increment/decrement a variable.  mutex and var | ||||||
|  |  * must be pointers. | ||||||
|  |  */ | ||||||
|  | #define	INCR_COUNT(var, mutex) mutex_enter(mutex), (*(var))++, mutex_exit(mutex) | ||||||
|  | #define	DECR_COUNT(var, mutex) mutex_enter(mutex), (*(var))--, mutex_exit(mutex) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros to declare bitfields - the order in the parameter list is | ||||||
|  |  * Low to High - that is, declare bit 0 first.  We only support 8-bit bitfields | ||||||
|  |  * because if a field crosses a byte boundary it's not likely to be meaningful | ||||||
|  |  * without reassembly in its nonnative endianness. | ||||||
|  |  */ | ||||||
|  | #if defined(_BIT_FIELDS_LTOH) | ||||||
|  | #define	DECL_BITFIELD2(_a, _b)				\ | ||||||
|  | 	uint8_t _a, _b | ||||||
|  | #define	DECL_BITFIELD3(_a, _b, _c)			\ | ||||||
|  | 	uint8_t _a, _b, _c | ||||||
|  | #define	DECL_BITFIELD4(_a, _b, _c, _d)			\ | ||||||
|  | 	uint8_t _a, _b, _c, _d | ||||||
|  | #define	DECL_BITFIELD5(_a, _b, _c, _d, _e)		\ | ||||||
|  | 	uint8_t _a, _b, _c, _d, _e | ||||||
|  | #define	DECL_BITFIELD6(_a, _b, _c, _d, _e, _f)		\ | ||||||
|  | 	uint8_t _a, _b, _c, _d, _e, _f | ||||||
|  | #define	DECL_BITFIELD7(_a, _b, _c, _d, _e, _f, _g)	\ | ||||||
|  | 	uint8_t _a, _b, _c, _d, _e, _f, _g | ||||||
|  | #define	DECL_BITFIELD8(_a, _b, _c, _d, _e, _f, _g, _h)	\ | ||||||
|  | 	uint8_t _a, _b, _c, _d, _e, _f, _g, _h | ||||||
|  | #elif defined(_BIT_FIELDS_HTOL) | ||||||
|  | #define	DECL_BITFIELD2(_a, _b)				\ | ||||||
|  | 	uint8_t _b, _a | ||||||
|  | #define	DECL_BITFIELD3(_a, _b, _c)			\ | ||||||
|  | 	uint8_t _c, _b, _a | ||||||
|  | #define	DECL_BITFIELD4(_a, _b, _c, _d)			\ | ||||||
|  | 	uint8_t _d, _c, _b, _a | ||||||
|  | #define	DECL_BITFIELD5(_a, _b, _c, _d, _e)		\ | ||||||
|  | 	uint8_t _e, _d, _c, _b, _a | ||||||
|  | #define	DECL_BITFIELD6(_a, _b, _c, _d, _e, _f)		\ | ||||||
|  | 	uint8_t _f, _e, _d, _c, _b, _a | ||||||
|  | #define	DECL_BITFIELD7(_a, _b, _c, _d, _e, _f, _g)	\ | ||||||
|  | 	uint8_t _g, _f, _e, _d, _c, _b, _a | ||||||
|  | #define	DECL_BITFIELD8(_a, _b, _c, _d, _e, _f, _g, _h)	\ | ||||||
|  | 	uint8_t _h, _g, _f, _e, _d, _c, _b, _a | ||||||
|  | #else | ||||||
|  | #error	One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined | ||||||
|  | #endif  /* _BIT_FIELDS_LTOH */ | ||||||
|  | 
 | ||||||
|  | #if !defined(_KMEMUSER) && !defined(offsetof) | ||||||
|  | 
 | ||||||
|  | /* avoid any possibility of clashing with <stddef.h> version */ | ||||||
|  | 
 | ||||||
|  | #define	offsetof(s, m)	((size_t)(&(((s *)0)->m))) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Find highest one bit set. | ||||||
|  |  *      Returns bit number + 1 of highest bit that is set, otherwise returns 0. | ||||||
|  |  * High order bit is 31 (or 63 in _LP64 kernel). | ||||||
|  |  */ | ||||||
|  | static __inline int | ||||||
|  | highbit(ulong_t i) | ||||||
|  | { | ||||||
|  | #if defined(HAVE_INLINE_FLSL) | ||||||
|  | 	return (flsl(i)); | ||||||
|  | #else | ||||||
|  | 	int h = 1; | ||||||
|  | 
 | ||||||
|  | 	if (i == 0) | ||||||
|  | 		return (0); | ||||||
|  | #ifdef _LP64 | ||||||
|  | 	if (i & 0xffffffff00000000ul) { | ||||||
|  | 		h += 32; i >>= 32; | ||||||
|  | 	} | ||||||
|  | #endif | ||||||
|  | 	if (i & 0xffff0000) { | ||||||
|  | 		h += 16; i >>= 16; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xff00) { | ||||||
|  | 		h += 8; i >>= 8; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xf0) { | ||||||
|  | 		h += 4; i >>= 4; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xc) { | ||||||
|  | 		h += 2; i >>= 2; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0x2) { | ||||||
|  | 		h += 1; | ||||||
|  | 	} | ||||||
|  | 	return (h); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Find highest one bit set. | ||||||
|  |  *	Returns bit number + 1 of highest bit that is set, otherwise returns 0. | ||||||
|  |  */ | ||||||
|  | static __inline int | ||||||
|  | highbit64(uint64_t i) | ||||||
|  | { | ||||||
|  | #if defined(HAVE_INLINE_FLSLL) | ||||||
|  | 	return (flsll(i)); | ||||||
|  | #else | ||||||
|  | 	int h = 1; | ||||||
|  | 
 | ||||||
|  | 	if (i == 0) | ||||||
|  | 		return (0); | ||||||
|  | 	if (i & 0xffffffff00000000ULL) { | ||||||
|  | 		h += 32; i >>= 32; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xffff0000) { | ||||||
|  | 		h += 16; i >>= 16; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xff00) { | ||||||
|  | 		h += 8; i >>= 8; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xf0) { | ||||||
|  | 		h += 4; i >>= 4; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0xc) { | ||||||
|  | 		h += 2; i >>= 2; | ||||||
|  | 	} | ||||||
|  | 	if (i & 0x2) { | ||||||
|  | 		h += 1; | ||||||
|  | 	} | ||||||
|  | 	return (h); | ||||||
|  | #endif | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_SYSMACROS_H */ | ||||||
							
								
								
									
										34
									
								
								include/os/freebsd/spl/sys/systeminfo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								include/os/freebsd/spl/sys/systeminfo.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SYS_SYSTEMINFO_H_ | ||||||
|  | #define	_SYS_SYSTEMINFO_H_ | ||||||
|  | 
 | ||||||
|  | #define	HW_HOSTID_LEN	11 | ||||||
|  | 
 | ||||||
|  | #endif	/* !_SYS_SYSTEMINFO_H_ */ | ||||||
							
								
								
									
										43
									
								
								include/os/freebsd/spl/sys/systm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/os/freebsd/spl/sys/systm.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_SYSTM_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_SYSTM_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include_next <sys/systm.h> | ||||||
|  | 
 | ||||||
|  | #include <sys/string.h> | ||||||
|  | 
 | ||||||
|  | #define	PAGESIZE	PAGE_SIZE | ||||||
|  | #define	PAGEOFFSET	(PAGESIZE - 1) | ||||||
|  | #define	PAGEMASK	(~PAGEOFFSET) | ||||||
|  | 
 | ||||||
|  | #define	delay(x)	pause("soldelay", (x)) | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_SYSTM_H_ */ | ||||||
							
								
								
									
										114
									
								
								include/os/freebsd/spl/sys/taskq.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								include/os/freebsd/spl/sys/taskq.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_TASKQ_H | ||||||
|  | #define	_SYS_TASKQ_H | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/taskqueue.h> | ||||||
|  | #include <sys/thread.h> | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	TASKQ_NAMELEN	31 | ||||||
|  | 
 | ||||||
|  | struct taskqueue; | ||||||
|  | struct taskq { | ||||||
|  | 	struct taskqueue	*tq_queue; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | typedef struct taskq taskq_t; | ||||||
|  | typedef uintptr_t taskqid_t; | ||||||
|  | typedef void (task_func_t)(void *); | ||||||
|  | 
 | ||||||
|  | typedef struct taskq_ent { | ||||||
|  | 	struct task	 tqent_task; | ||||||
|  | 	task_func_t	*tqent_func; | ||||||
|  | 	void		*tqent_arg; | ||||||
|  | 	struct timeout_task tqent_timeout_task; | ||||||
|  | 	int tqent_type; | ||||||
|  | 	int tqent_gen; | ||||||
|  | } taskq_ent_t; | ||||||
|  | 
 | ||||||
|  | struct proc; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Public flags for taskq_create(): bit range 0-15 | ||||||
|  |  */ | ||||||
|  | #define	TASKQ_PREPOPULATE	0x0001	/* Prepopulate with threads and data */ | ||||||
|  | #define	TASKQ_CPR_SAFE		0x0002	/* Use CPR safe protocol */ | ||||||
|  | #define	TASKQ_DYNAMIC		0x0004	/* Use dynamic thread scheduling */ | ||||||
|  | #define	TASKQ_THREADS_CPU_PCT	0x0008	/* number of threads as % of ncpu */ | ||||||
|  | #define	TASKQ_DC_BATCH		0x0010	/* Taskq uses SDC in batch mode */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags for taskq_dispatch. TQ_SLEEP/TQ_NOSLEEP should be same as | ||||||
|  |  * KM_SLEEP/KM_NOSLEEP. | ||||||
|  |  */ | ||||||
|  | #define	TQ_SLEEP	0x00	/* Can block for memory */ | ||||||
|  | #define	TQ_NOSLEEP	0x01	/* cannot block for memory; may fail */ | ||||||
|  | #define	TQ_NOQUEUE	0x02	/* Do not enqueue if can't dispatch */ | ||||||
|  | #define	TQ_NOALLOC	0x04	/* cannot allocate memory; may fail */ | ||||||
|  | #define	TQ_FRONT	0x08	/* Put task at the front of the queue */ | ||||||
|  | 
 | ||||||
|  | #define	TASKQID_INVALID		((taskqid_t)0) | ||||||
|  | 
 | ||||||
|  | #define	taskq_init_ent(x) | ||||||
|  | extern taskq_t *system_taskq; | ||||||
|  | /* Global dynamic task queue for long delay */ | ||||||
|  | extern taskq_t *system_delay_taskq; | ||||||
|  | 
 | ||||||
|  | extern taskqid_t taskq_dispatch(taskq_t *, task_func_t, void *, uint_t); | ||||||
|  | extern taskqid_t taskq_dispatch_delay(taskq_t *, task_func_t, void *, | ||||||
|  |     uint_t, clock_t); | ||||||
|  | extern void taskq_dispatch_ent(taskq_t *, task_func_t, void *, uint_t, | ||||||
|  |     taskq_ent_t *); | ||||||
|  | extern int taskq_empty_ent(taskq_ent_t *); | ||||||
|  | taskq_t	*taskq_create(const char *, int, pri_t, int, int, uint_t); | ||||||
|  | taskq_t	*taskq_create_instance(const char *, int, int, pri_t, int, int, uint_t); | ||||||
|  | taskq_t	*taskq_create_proc(const char *, int, pri_t, int, int, | ||||||
|  |     struct proc *, uint_t); | ||||||
|  | taskq_t	*taskq_create_sysdc(const char *, int, int, int, | ||||||
|  |     struct proc *, uint_t, uint_t); | ||||||
|  | void	nulltask(void *); | ||||||
|  | extern void taskq_destroy(taskq_t *); | ||||||
|  | extern void taskq_wait_id(taskq_t *, taskqid_t); | ||||||
|  | extern void taskq_wait_outstanding(taskq_t *, taskqid_t); | ||||||
|  | extern void taskq_wait(taskq_t *); | ||||||
|  | extern int taskq_cancel_id(taskq_t *, taskqid_t); | ||||||
|  | extern int taskq_member(taskq_t *, kthread_t *); | ||||||
|  | extern taskq_t *taskq_of_curthread(void); | ||||||
|  | void	taskq_suspend(taskq_t *); | ||||||
|  | int	taskq_suspended(taskq_t *); | ||||||
|  | void	taskq_resume(taskq_t *); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_TASKQ_H */ | ||||||
							
								
								
									
										34
									
								
								include/os/freebsd/spl/sys/thread.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								include/os/freebsd/spl/sys/thread.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_THREAD_H_ | ||||||
|  | #define	_SPL_THREAD_H_ | ||||||
|  | 
 | ||||||
|  | #define	getcomm() curthread->td_name | ||||||
|  | #define	getpid() curthread->td_tid | ||||||
|  | #endif | ||||||
							
								
								
									
										96
									
								
								include/os/freebsd/spl/sys/time.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								include/os/freebsd/spl/sys/time.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_TIME_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_TIME_H_ | ||||||
|  | #pragma once | ||||||
|  | #include_next <sys/time.h> | ||||||
|  | #include <sys/debug.h> | ||||||
|  | #ifndef _SYS_KERNEL_H_ | ||||||
|  | extern int hz; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	SEC		1 | ||||||
|  | #define	MILLISEC	1000UL | ||||||
|  | #define	MICROSEC	1000000UL | ||||||
|  | #define	NANOSEC	1000000000UL | ||||||
|  | #define	TIME_MAX	LLONG_MAX | ||||||
|  | 
 | ||||||
|  | #define	MSEC2NSEC(m)	((hrtime_t)(m) * (NANOSEC / MILLISEC)) | ||||||
|  | #define	NSEC2MSEC(n)	((n) / (NANOSEC / MILLISEC)) | ||||||
|  | 
 | ||||||
|  | #define	USEC2NSEC(m)	((hrtime_t)(m) * (NANOSEC / MICROSEC)) | ||||||
|  | #define	NSEC2USEC(n)	((n) / (NANOSEC / MICROSEC)) | ||||||
|  | 
 | ||||||
|  | #define	NSEC2SEC(n)	((n) / (NANOSEC / SEC)) | ||||||
|  | #define	SEC2NSEC(m)	((hrtime_t)(m) * (NANOSEC / SEC)) | ||||||
|  | 
 | ||||||
|  | typedef longlong_t	hrtime_t; | ||||||
|  | 
 | ||||||
|  | #if defined(__i386__) || defined(__powerpc__) | ||||||
|  | #define	TIMESPEC_OVERFLOW(ts)						\ | ||||||
|  | 	((ts)->tv_sec < INT32_MIN || (ts)->tv_sec > INT32_MAX) | ||||||
|  | #else | ||||||
|  | #define	TIMESPEC_OVERFLOW(ts)						\ | ||||||
|  | 	((ts)->tv_sec < INT64_MIN || (ts)->tv_sec > INT64_MAX) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define	SEC_TO_TICK(sec)	((sec) * hz) | ||||||
|  | #define	NSEC_TO_TICK(nsec)	((nsec) / (NANOSEC / hz)) | ||||||
|  | 
 | ||||||
|  | static __inline hrtime_t | ||||||
|  | gethrtime(void) | ||||||
|  | { | ||||||
|  | 	struct timespec ts; | ||||||
|  | 	hrtime_t nsec; | ||||||
|  | 
 | ||||||
|  | 	nanouptime(&ts); | ||||||
|  | 	nsec = ((hrtime_t)ts.tv_sec * NANOSEC) + ts.tv_nsec; | ||||||
|  | 	return (nsec); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define	gethrestime_sec()	(time_second) | ||||||
|  | #define	gethrestime(ts)		getnanotime(ts) | ||||||
|  | #define	gethrtime_waitfree()	gethrtime() | ||||||
|  | 
 | ||||||
|  | extern int nsec_per_tick;	/* nanoseconds per clock tick */ | ||||||
|  | 
 | ||||||
|  | #define	ddi_get_lbolt64()				\ | ||||||
|  | 	(int64_t)(((getsbinuptime() >> 16) * hz) >> 16) | ||||||
|  | #define	ddi_get_lbolt()		(clock_t)ddi_get_lbolt64() | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | static __inline hrtime_t | ||||||
|  | gethrtime(void) | ||||||
|  | { | ||||||
|  | 	struct timespec ts; | ||||||
|  | 	clock_gettime(CLOCK_UPTIME, &ts); | ||||||
|  | 	return (((u_int64_t)ts.tv_sec) * NANOSEC + ts.tv_nsec); | ||||||
|  | } | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_TIME_H_ */ | ||||||
							
								
								
									
										38
									
								
								include/os/freebsd/spl/sys/timer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/os/freebsd/spl/sys/timer.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_TIMER_H_ | ||||||
|  | #define	_SPL_TIMER_H_ | ||||||
|  | #define	ddi_time_after(a, b) ((a) > (b)) | ||||||
|  | #define	ddi_time_after64(a, b) ((a) > (b)) | ||||||
|  | #define	usleep_range(wakeup, wakeupepsilon)				   \ | ||||||
|  | 	pause_sbt("usleep_range", ustosbt(wakeup), \ | ||||||
|  | 	ustosbt(wakeupepsilon - wakeup), 0) | ||||||
|  | 
 | ||||||
|  | #define	schedule() pause("schedule", 1) | ||||||
|  | #endif | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/sys/trace.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/sys/trace.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /* keep me */ | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/spl/sys/trace_zfs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/spl/sys/trace_zfs.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | /* keep me */ | ||||||
							
								
								
									
										97
									
								
								include/os/freebsd/spl/sys/types.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								include/os/freebsd/spl/sys/types.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _SPL_SYS_TYPES_H_ | ||||||
|  | #define	_SPL_SYS_TYPES_H_ | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | /*
 | ||||||
|  |  * This is a bag of dirty hacks to keep things compiling. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <sys/stdint.h> | ||||||
|  | 
 | ||||||
|  | typedef	int64_t		clock_t; | ||||||
|  | #define	_CLOCK_T_DECLARED | ||||||
|  | 
 | ||||||
|  | #include_next <sys/types.h> | ||||||
|  | #include <sys/types32.h> | ||||||
|  | #include <sys/_stdarg.h> | ||||||
|  | 
 | ||||||
|  | #define	MAXNAMELEN	256 | ||||||
|  | 
 | ||||||
|  | typedef	struct timespec	timestruc_t; | ||||||
|  | typedef	struct timespec	timespec_t; | ||||||
|  | typedef struct timespec inode_timespec_t; | ||||||
|  | /* BEGIN CSTYLED */ | ||||||
|  | typedef u_int		uint_t; | ||||||
|  | typedef u_char		uchar_t; | ||||||
|  | typedef u_short		ushort_t; | ||||||
|  | typedef u_long		ulong_t; | ||||||
|  | typedef	u_int		minor_t; | ||||||
|  | /* END CSTYLED */ | ||||||
|  | #ifndef	_OFF64_T_DECLARED | ||||||
|  | #define	_OFF64_T_DECLARED | ||||||
|  | typedef off_t		off64_t; | ||||||
|  | #endif | ||||||
|  | typedef id_t		taskid_t; | ||||||
|  | typedef id_t		projid_t; | ||||||
|  | typedef id_t		poolid_t; | ||||||
|  | typedef id_t		zoneid_t; | ||||||
|  | typedef id_t		ctid_t; | ||||||
|  | typedef	mode_t		o_mode_t; | ||||||
|  | typedef	uint64_t	pgcnt_t; | ||||||
|  | 
 | ||||||
|  | #define	B_FALSE	0 | ||||||
|  | #define	B_TRUE	1 | ||||||
|  | 
 | ||||||
|  | typedef	short		index_t; | ||||||
|  | typedef	off_t		offset_t; | ||||||
|  | #ifndef _PTRDIFF_T_DECLARED | ||||||
|  | typedef	__ptrdiff_t		ptrdiff_t;	/* pointer difference */ | ||||||
|  | #define	_PTRDIFF_T_DECLARED | ||||||
|  | #endif | ||||||
|  | typedef	int64_t		rlim64_t; | ||||||
|  | typedef	int		major_t; | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | #ifdef NEED_SOLARIS_BOOLEAN | ||||||
|  | #if defined(__XOPEN_OR_POSIX) | ||||||
|  | typedef enum { _B_FALSE, _B_TRUE }	boolean_t; | ||||||
|  | #else | ||||||
|  | typedef enum { B_FALSE, B_TRUE }	boolean_t; | ||||||
|  | #endif /* defined(__XOPEN_OR_POSIX) */ | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | typedef	u_longlong_t	u_offset_t; | ||||||
|  | typedef	u_longlong_t	len_t; | ||||||
|  | 
 | ||||||
|  | typedef	longlong_t	diskaddr_t; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_TYPES_H_ */ | ||||||
							
								
								
									
										37
									
								
								include/os/freebsd/spl/sys/types32.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								include/os/freebsd/spl/sys/types32.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_TYPES32_H | ||||||
|  | #define	_SPL_TYPES32_H | ||||||
|  | 
 | ||||||
|  | typedef uint32_t	caddr32_t; | ||||||
|  | typedef int32_t	daddr32_t; | ||||||
|  | typedef int32_t	time32_t; | ||||||
|  | typedef uint32_t	size32_t; | ||||||
|  | 
 | ||||||
|  | #endif  /* _SPL_TYPES32_H */ | ||||||
							
								
								
									
										77
									
								
								include/os/freebsd/spl/sys/uio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								include/os/freebsd/spl/sys/uio.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2010 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_UIO_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_UIO_H_ | ||||||
|  | 
 | ||||||
|  | #include_next <sys/uio.h> | ||||||
|  | #include <sys/_uio.h> | ||||||
|  | #include <sys/debug.h> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	uio_loffset	uio_offset | ||||||
|  | 
 | ||||||
|  | typedef	struct uio	uio_t; | ||||||
|  | typedef	struct iovec	iovec_t; | ||||||
|  | typedef	enum uio_seg	uio_seg_t; | ||||||
|  | 
 | ||||||
|  | typedef enum xuio_type { | ||||||
|  | 	UIOTYPE_ASYNCIO, | ||||||
|  | 	UIOTYPE_ZEROCOPY | ||||||
|  | } xuio_type_t; | ||||||
|  | 
 | ||||||
|  | typedef struct xuio { | ||||||
|  | 	uio_t	xu_uio; | ||||||
|  | 
 | ||||||
|  | 	/* Extended uio fields */ | ||||||
|  | 	enum xuio_type xu_type; /* What kind of uio structure? */ | ||||||
|  | 	union { | ||||||
|  | 		struct { | ||||||
|  | 			int xu_zc_rw; | ||||||
|  | 			void *xu_zc_priv; | ||||||
|  | 		} xu_zc; | ||||||
|  | 	} xu_ext; | ||||||
|  | } xuio_t; | ||||||
|  | 
 | ||||||
|  | #define	XUIO_XUZC_PRIV(xuio)	xuio->xu_ext.xu_zc.xu_zc_priv | ||||||
|  | #define	XUIO_XUZC_RW(xuio)	xuio->xu_ext.xu_zc.xu_zc_rw | ||||||
|  | 
 | ||||||
|  | static __inline int | ||||||
|  | zfs_uiomove(void *cp, size_t n, enum uio_rw dir, uio_t *uio) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	ASSERT(uio->uio_rw == dir); | ||||||
|  | 	return (uiomove(cp, (int)n, uio)); | ||||||
|  | } | ||||||
|  | #define	uiomove(cp, n, dir, uio)	zfs_uiomove((cp), (n), (dir), (uio)) | ||||||
|  | 
 | ||||||
|  | int uiocopy(void *p, size_t n, enum uio_rw rw, struct uio *uio, size_t *cbytes); | ||||||
|  | void uioskip(uio_t *uiop, size_t n); | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_UIO_H_ */ | ||||||
							
								
								
									
										99
									
								
								include/os/freebsd/spl/sys/uuid.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								include/os/freebsd/spl/sys/uuid.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License, Version 1.0 only | ||||||
|  |  * (the "License").  You may not use this file except in compliance | ||||||
|  |  * with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_SYS_UUID_H | ||||||
|  | #define	_SYS_UUID_H | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The copyright in this file is taken from the original Leach | ||||||
|  |  * & Salz UUID specification, from which this implementation | ||||||
|  |  * is derived. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 1990- 1993, 1996 Open Software Foundation, Inc. | ||||||
|  |  * Copyright (c) 1989 by Hewlett-Packard Company, Palo Alto, Ca. & | ||||||
|  |  * Digital Equipment Corporation, Maynard, Mass.  Copyright (c) 1998 | ||||||
|  |  * Microsoft.  To anyone who acknowledges that this file is provided | ||||||
|  |  * "AS IS" without any express or implied warranty: permission to use, | ||||||
|  |  * copy, modify, and distribute this file for any purpose is hereby | ||||||
|  |  * granted without fee, provided that the above copyright notices and | ||||||
|  |  * this notice appears in all source code copies, and that none of the | ||||||
|  |  * names of Open Software Foundation, Inc., Hewlett-Packard Company, | ||||||
|  |  * or Digital Equipment Corporation be used in advertising or | ||||||
|  |  * publicity pertaining to distribution of the software without | ||||||
|  |  * specific, written prior permission.  Neither Open Software | ||||||
|  |  * Foundation, Inc., Hewlett-Packard Company, Microsoft, nor Digital | ||||||
|  |  * Equipment Corporation makes any representations about the | ||||||
|  |  * suitability of this software for any purpose. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/byteorder.h> | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  | 	uint8_t		nodeID[6]; | ||||||
|  | } uuid_node_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The uuid type used throughout when referencing uuids themselves | ||||||
|  |  */ | ||||||
|  | typedef struct uuid { | ||||||
|  | 	uint32_t	time_low; | ||||||
|  | 	uint16_t	time_mid; | ||||||
|  | 	uint16_t	time_hi_and_version; | ||||||
|  | 	uint8_t		clock_seq_hi_and_reserved; | ||||||
|  | 	uint8_t		clock_seq_low; | ||||||
|  | 	uint8_t		node_addr[6]; | ||||||
|  | } uuid_t; | ||||||
|  | 
 | ||||||
|  | #define	UUID_PRINTABLE_STRING_LENGTH 37 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Convert a uuid to/from little-endian format | ||||||
|  |  */ | ||||||
|  | #define	UUID_LE_CONVERT(dest, src)					\ | ||||||
|  | {									\ | ||||||
|  | 	(dest) = (src);							\ | ||||||
|  | 	(dest).time_low = LE_32((dest).time_low);			\ | ||||||
|  | 	(dest).time_mid = LE_16((dest).time_mid);			\ | ||||||
|  | 	(dest).time_hi_and_version = LE_16((dest).time_hi_and_version);	\ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static __inline int | ||||||
|  | uuid_is_null(const caddr_t uuid) | ||||||
|  | { | ||||||
|  | 	return (0); | ||||||
|  | } | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* _SYS_UUID_H */ | ||||||
							
								
								
									
										127
									
								
								include/os/freebsd/spl/sys/vfs.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								include/os/freebsd/spl/sys/vfs.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,127 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_VFS_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_VFS_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/param.h> | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/vnode.h> | ||||||
|  | 
 | ||||||
|  | #define	rootdir	rootvnode | ||||||
|  | 
 | ||||||
|  | struct thread; | ||||||
|  | struct vnode; | ||||||
|  | typedef	struct mount	vfs_t; | ||||||
|  | 
 | ||||||
|  | typedef	int	umode_t; | ||||||
|  | 
 | ||||||
|  | #define	vfs_flag	mnt_flag | ||||||
|  | #define	vfs_data	mnt_data | ||||||
|  | #define	vfs_count	mnt_ref | ||||||
|  | #define	vfs_fsid	mnt_stat.f_fsid | ||||||
|  | #define	vfs_bsize	mnt_stat.f_bsize | ||||||
|  | #define	vfs_resource	mnt_stat.f_mntfromname | ||||||
|  | 
 | ||||||
|  | #define	v_flag		v_vflag | ||||||
|  | #define	v_vfsp		v_mount | ||||||
|  | 
 | ||||||
|  | #define	VFS_RDONLY	MNT_RDONLY | ||||||
|  | #define	VFS_NOSETUID	MNT_NOSUID | ||||||
|  | #define	VFS_NOEXEC	MNT_NOEXEC | ||||||
|  | 
 | ||||||
|  | #define	fs_vscan(vp, cr, async)	(0) | ||||||
|  | 
 | ||||||
|  | #define	VROOT		VV_ROOT | ||||||
|  | 
 | ||||||
|  | #define	XU_NGROUPS	16 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Structure defining a mount option for a filesystem. | ||||||
|  |  * option names are found in mntent.h | ||||||
|  |  */ | ||||||
|  | typedef struct mntopt { | ||||||
|  | 	char	*mo_name;	/* option name */ | ||||||
|  | 	char	**mo_cancel;	/* list of options cancelled by this one */ | ||||||
|  | 	char	*mo_arg;	/* argument string for this option */ | ||||||
|  | 	int	mo_flags;	/* flags for this mount option */ | ||||||
|  | 	void	*mo_data;	/* filesystem specific data */ | ||||||
|  | } mntopt_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags that apply to mount options | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	MO_SET		0x01		/* option is set */ | ||||||
|  | #define	MO_NODISPLAY	0x02		/* option not listed in mnttab */ | ||||||
|  | #define	MO_HASVALUE	0x04		/* option takes a value */ | ||||||
|  | #define	MO_IGNORE	0x08		/* option ignored by parser */ | ||||||
|  | #define	MO_DEFAULT	MO_SET		/* option is on by default */ | ||||||
|  | #define	MO_TAG		0x10		/* flags a tag set by user program */ | ||||||
|  | #define	MO_EMPTY	0x20		/* empty space in option table */ | ||||||
|  | 
 | ||||||
|  | #define	VFS_NOFORCEOPT	0x01		/* honor MO_IGNORE (don't set option) */ | ||||||
|  | #define	VFS_DISPLAY	0x02		/* Turn off MO_NODISPLAY bit for opt */ | ||||||
|  | #define	VFS_NODISPLAY	0x04		/* Turn on MO_NODISPLAY bit for opt */ | ||||||
|  | #define	VFS_CREATEOPT	0x08		/* Create the opt if it's not there */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Structure holding mount option strings for the mounted file system. | ||||||
|  |  */ | ||||||
|  | typedef struct mntopts { | ||||||
|  | 	uint_t		mo_count;		/* number of entries in table */ | ||||||
|  | 	mntopt_t	*mo_list;		/* list of mount options */ | ||||||
|  | } mntopts_t; | ||||||
|  | 
 | ||||||
|  | void vfs_setmntopt(vfs_t *vfsp, const char *name, const char *arg, | ||||||
|  |     int flags __unused); | ||||||
|  | void vfs_clearmntopt(vfs_t *vfsp, const char *name); | ||||||
|  | int vfs_optionisset(const vfs_t *vfsp, const char *opt, char **argp); | ||||||
|  | int mount_snapshot(kthread_t *td, vnode_t **vpp, const char *fstype, | ||||||
|  |     char *fspath, char *fspec, int fsflags); | ||||||
|  | 
 | ||||||
|  | typedef	uint64_t	vfs_feature_t; | ||||||
|  | 
 | ||||||
|  | #define	VFSFT_XVATTR		0x100000001	/* Supports xvattr for attrs */ | ||||||
|  | #define	VFSFT_CASEINSENSITIVE	0x100000002	/* Supports case-insensitive */ | ||||||
|  | #define	VFSFT_NOCASESENSITIVE	0x100000004	/* NOT case-sensitive */ | ||||||
|  | #define	VFSFT_DIRENTFLAGS	0x100000008	/* Supports dirent flags */ | ||||||
|  | #define	VFSFT_ACLONCREATE	0x100000010	/* Supports ACL on create */ | ||||||
|  | #define	VFSFT_ACEMASKONACCESS	0x100000020	/* Can use ACEMASK for access */ | ||||||
|  | #define	VFSFT_SYSATTR_VIEWS	0x100000040	/* Supports sysattr view i/f */ | ||||||
|  | #define	VFSFT_ACCESS_FILTER	0x100000080	/* dirents filtered by access */ | ||||||
|  | #define	VFSFT_REPARSE		0x100000100	/* Supports reparse point */ | ||||||
|  | #define	VFSFT_ZEROCOPY_SUPPORTED	0x100000200 | ||||||
|  | 				/* Support loaning /returning cache buffer */ | ||||||
|  | 
 | ||||||
|  | #define	vfs_set_feature(vfsp, feature)		do { } while (0) | ||||||
|  | #define	vfs_clear_feature(vfsp, feature)	do { } while (0) | ||||||
|  | #define	vfs_has_feature(vfsp, feature)		(0) | ||||||
|  | 
 | ||||||
|  | #include <sys/mount.h> | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_VFS_H_ */ | ||||||
							
								
								
									
										57
									
								
								include/os/freebsd/spl/sys/vm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								include/os/freebsd/spl/sys/vm.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2013 EMC Corp. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_VM_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_VM_H_ | ||||||
|  | 
 | ||||||
|  | #include <sys/sf_buf.h> | ||||||
|  | 
 | ||||||
|  | extern const int zfs_vm_pagerret_bad; | ||||||
|  | extern const int zfs_vm_pagerret_error; | ||||||
|  | extern const int zfs_vm_pagerret_ok; | ||||||
|  | extern const int zfs_vm_pagerput_sync; | ||||||
|  | extern const int zfs_vm_pagerput_inval; | ||||||
|  | 
 | ||||||
|  | void	zfs_vmobject_assert_wlocked(vm_object_t object); | ||||||
|  | void	zfs_vmobject_wlock(vm_object_t object); | ||||||
|  | void	zfs_vmobject_wunlock(vm_object_t object); | ||||||
|  | 
 | ||||||
|  | static inline caddr_t | ||||||
|  | zfs_map_page(vm_page_t pp, struct sf_buf **sfp) | ||||||
|  | { | ||||||
|  | 	*sfp = sf_buf_alloc(pp, 0); | ||||||
|  | 	return ((caddr_t)sf_buf_kva(*sfp)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline void | ||||||
|  | zfs_unmap_page(struct sf_buf *sf) | ||||||
|  | { | ||||||
|  | 	sf_buf_free(sf); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_VM_H_ */ | ||||||
							
								
								
									
										34
									
								
								include/os/freebsd/spl/sys/vmsystm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								include/os/freebsd/spl/sys/vmsystm.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2020 iXsystems, Inc. | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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 _SPL_VMSYSTM_H_ | ||||||
|  | #define	_SPL_VMSYSTM_H_ | ||||||
|  | 
 | ||||||
|  | #define	xcopyout copyout | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
							
								
								
									
										204
									
								
								include/os/freebsd/spl/sys/vnode.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								include/os/freebsd/spl/sys/vnode.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,204 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_VNODE_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_VNODE_H_ | ||||||
|  | 
 | ||||||
|  | struct vnode; | ||||||
|  | struct vattr; | ||||||
|  | struct xucred; | ||||||
|  | 
 | ||||||
|  | typedef struct flock	flock64_t; | ||||||
|  | typedef	struct vnode	vnode_t; | ||||||
|  | typedef	struct vattr	vattr_t; | ||||||
|  | typedef enum vtype vtype_t; | ||||||
|  | 
 | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/queue.h> | ||||||
|  | #include_next <sys/sdt.h> | ||||||
|  | #include <sys/namei.h> | ||||||
|  | enum symfollow { NO_FOLLOW = NOFOLLOW }; | ||||||
|  | 
 | ||||||
|  | #define	NOCRED	((struct ucred *)0)	/* no credential available */ | ||||||
|  | #define	F_FREESP	11 	/* Free file space */ | ||||||
|  | 
 | ||||||
|  | #include <sys/proc.h> | ||||||
|  | #include <sys/vnode_impl.h> | ||||||
|  | #include_next <sys/vnode.h> | ||||||
|  | #include <sys/mount.h> | ||||||
|  | #include <sys/cred.h> | ||||||
|  | #include <sys/fcntl.h> | ||||||
|  | #include_next <sys/refcount.h> | ||||||
|  | #include <sys/file.h> | ||||||
|  | #include <sys/filedesc.h> | ||||||
|  | #include <sys/syscallsubr.h> | ||||||
|  | 
 | ||||||
|  | typedef	struct vop_vector	vnodeops_t; | ||||||
|  | #define	VOP_FID		VOP_VPTOFH | ||||||
|  | #define	vop_fid		vop_vptofh | ||||||
|  | #define	vop_fid_args	vop_vptofh_args | ||||||
|  | #define	a_fid		a_fhp | ||||||
|  | 
 | ||||||
|  | #define	IS_XATTRDIR(dvp)	(0) | ||||||
|  | 
 | ||||||
|  | #define	v_count	v_usecount | ||||||
|  | 
 | ||||||
|  | #define	rootvfs		(rootvnode == NULL ? NULL : rootvnode->v_mount) | ||||||
|  | 
 | ||||||
|  | static __inline int | ||||||
|  | vn_is_readonly(vnode_t *vp) | ||||||
|  | { | ||||||
|  | 	return (vp->v_mount->mnt_flag & MNT_RDONLY); | ||||||
|  | } | ||||||
|  | #define	vn_vfswlock(vp)		(0) | ||||||
|  | #define	vn_vfsunlock(vp)	do { } while (0) | ||||||
|  | #define	vn_ismntpt(vp)	   \ | ||||||
|  | 	((vp)->v_type == VDIR && (vp)->v_mountedhere != NULL) | ||||||
|  | #define	vn_mountedvfs(vp)	((vp)->v_mountedhere) | ||||||
|  | #define	vn_has_cached_data(vp)	\ | ||||||
|  | 	((vp)->v_object != NULL && \ | ||||||
|  | 	(vp)->v_object->resident_page_count > 0) | ||||||
|  | #define	vn_exists(vp)		do { } while (0) | ||||||
|  | #define	vn_invalid(vp)		do { } while (0) | ||||||
|  | #define	vn_renamepath(tdvp, svp, tnm, lentnm)	do { } while (0) | ||||||
|  | #define	vn_free(vp)		do { } while (0) | ||||||
|  | #define	vn_matchops(vp, vops)	((vp)->v_op == &(vops)) | ||||||
|  | 
 | ||||||
|  | #define	VN_HOLD(v)	vref(v) | ||||||
|  | #define	VN_RELE(v)	vrele(v) | ||||||
|  | #define	VN_URELE(v)	vput(v) | ||||||
|  | 
 | ||||||
|  | #define	vnevent_create(vp, ct)			do { } while (0) | ||||||
|  | #define	vnevent_link(vp, ct)			do { } while (0) | ||||||
|  | #define	vnevent_remove(vp, dvp, name, ct)	do { } while (0) | ||||||
|  | #define	vnevent_rmdir(vp, dvp, name, ct)	do { } while (0) | ||||||
|  | #define	vnevent_rename_src(vp, dvp, name, ct)	do { } while (0) | ||||||
|  | #define	vnevent_rename_dest(vp, dvp, name, ct)	do { } while (0) | ||||||
|  | #define	vnevent_rename_dest_dir(vp, ct)		do { } while (0) | ||||||
|  | 
 | ||||||
|  | #define	specvp(vp, rdev, type, cr)	(VN_HOLD(vp), (vp)) | ||||||
|  | #define	MANDLOCK(vp, mode)	(0) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * We will use va_spare is place of Solaris' va_mask. | ||||||
|  |  * This field is initialized in zfs_setattr(). | ||||||
|  |  */ | ||||||
|  | #define	va_mask		va_spare | ||||||
|  | /* TODO: va_fileid is shorter than va_nodeid !!! */ | ||||||
|  | #define	va_nodeid	va_fileid | ||||||
|  | /* TODO: This field needs conversion! */ | ||||||
|  | #define	va_nblocks	va_bytes | ||||||
|  | #define	va_blksize	va_blocksize | ||||||
|  | #define	va_seq		va_gen | ||||||
|  | 
 | ||||||
|  | #define	MAXOFFSET_T	OFF_MAX | ||||||
|  | #define	EXCL		0 | ||||||
|  | 
 | ||||||
|  | #define	FCREAT		O_CREAT | ||||||
|  | #define	FTRUNC		O_TRUNC | ||||||
|  | #define	FEXCL		O_EXCL | ||||||
|  | #define	FDSYNC		FFSYNC | ||||||
|  | #define	FRSYNC		FFSYNC | ||||||
|  | #define	FSYNC		FFSYNC | ||||||
|  | #define	FOFFMAX		0x00 | ||||||
|  | #define	FIGNORECASE	0x00 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Attributes of interest to the caller of setattr or getattr. | ||||||
|  |  */ | ||||||
|  | #define	AT_MODE		0x00002 | ||||||
|  | #define	AT_UID		0x00004 | ||||||
|  | #define	AT_GID		0x00008 | ||||||
|  | #define	AT_FSID		0x00010 | ||||||
|  | #define	AT_NODEID	0x00020 | ||||||
|  | #define	AT_NLINK	0x00040 | ||||||
|  | #define	AT_SIZE		0x00080 | ||||||
|  | #define	AT_ATIME	0x00100 | ||||||
|  | #define	AT_MTIME	0x00200 | ||||||
|  | #define	AT_CTIME	0x00400 | ||||||
|  | #define	AT_RDEV		0x00800 | ||||||
|  | #define	AT_BLKSIZE	0x01000 | ||||||
|  | #define	AT_NBLOCKS	0x02000 | ||||||
|  | /*			0x04000 */	/* unused */ | ||||||
|  | #define	AT_SEQ		0x08000 | ||||||
|  | /*
 | ||||||
|  |  * If AT_XVATTR is set then there are additional bits to process in | ||||||
|  |  * the xvattr_t's attribute bitmap.  If this is not set then the bitmap | ||||||
|  |  * MUST be ignored.  Note that this bit must be set/cleared explicitly. | ||||||
|  |  * That is, setting AT_ALL will NOT set AT_XVATTR. | ||||||
|  |  */ | ||||||
|  | #define	AT_XVATTR	0x10000 | ||||||
|  | 
 | ||||||
|  | #define	AT_ALL		(AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|\ | ||||||
|  | 			AT_NLINK|AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|\ | ||||||
|  | 			AT_RDEV|AT_BLKSIZE|AT_NBLOCKS|AT_SEQ) | ||||||
|  | 
 | ||||||
|  | #define	AT_STAT		(AT_MODE|AT_UID|AT_GID|AT_FSID|AT_NODEID|AT_NLINK|\ | ||||||
|  | 			AT_SIZE|AT_ATIME|AT_MTIME|AT_CTIME|AT_RDEV) | ||||||
|  | 
 | ||||||
|  | #define	AT_TIMES	(AT_ATIME|AT_MTIME|AT_CTIME) | ||||||
|  | 
 | ||||||
|  | #define	AT_NOSET	(AT_NLINK|AT_RDEV|AT_FSID|AT_NODEID|\ | ||||||
|  | 			AT_BLKSIZE|AT_NBLOCKS|AT_SEQ) | ||||||
|  | 
 | ||||||
|  | static __inline void | ||||||
|  | vattr_init_mask(vattr_t *vap) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	vap->va_mask = 0; | ||||||
|  | 
 | ||||||
|  | 	if (vap->va_uid != (uid_t)VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_UID; | ||||||
|  | 	if (vap->va_gid != (gid_t)VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_GID; | ||||||
|  | 	if (vap->va_size != (u_quad_t)VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_SIZE; | ||||||
|  | 	if (vap->va_atime.tv_sec != VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_ATIME; | ||||||
|  | 	if (vap->va_mtime.tv_sec != VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_MTIME; | ||||||
|  | 	if (vap->va_mode != (uint16_t)VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_MODE; | ||||||
|  | 	if (vap->va_flags != VNOVAL) | ||||||
|  | 		vap->va_mask |= AT_XVATTR; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define		RLIM64_INFINITY 0 | ||||||
|  | 
 | ||||||
|  | static __inline int | ||||||
|  | vn_rename(char *from, char *to, enum uio_seg seg) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | 	ASSERT(seg == UIO_SYSSPACE); | ||||||
|  | 
 | ||||||
|  | 	return (kern_renameat(curthread, AT_FDCWD, from, AT_FDCWD, to, seg)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #include <sys/vfs.h> | ||||||
|  | 
 | ||||||
|  | #endif	/* _OPENSOLARIS_SYS_VNODE_H_ */ | ||||||
							
								
								
									
										268
									
								
								include/os/freebsd/spl/sys/vnode_impl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								include/os/freebsd/spl/sys/vnode_impl.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,268 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved. | ||||||
|  |  * Copyright 2017 RackTop Systems. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/ | ||||||
|  | /*	  All Rights Reserved  	*/ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * University Copyright- Copyright (c) 1982, 1986, 1988 | ||||||
|  |  * The Regents of the University of California | ||||||
|  |  * All Rights Reserved | ||||||
|  |  * | ||||||
|  |  * University Acknowledgment- Portions of this document are derived from | ||||||
|  |  * software developed by the University of California, Berkeley, and its | ||||||
|  |  * contributors. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _SYS_VNODE_IMPL_H | ||||||
|  | #define	_SYS_VNODE_IMPL_H | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #define	IS_DEVVP(vp)	\ | ||||||
|  | 	((vp)->v_type == VCHR || (vp)->v_type == VBLK || (vp)->v_type == VFIFO) | ||||||
|  | 
 | ||||||
|  | #define	V_XATTRDIR	0x0000	/* attribute unnamed directory */ | ||||||
|  | 
 | ||||||
|  | #define	AV_SCANSTAMP_SZ	32		/* length of anti-virus scanstamp */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The xvattr structure is really a variable length structure that | ||||||
|  |  * is made up of: | ||||||
|  |  * - The classic vattr_t (xva_vattr) | ||||||
|  |  * - a 32 bit quantity (xva_mapsize) that specifies the size of the | ||||||
|  |  *   attribute bitmaps in 32 bit words. | ||||||
|  |  * - A pointer to the returned attribute bitmap (needed because the | ||||||
|  |  *   previous element, the requested attribute bitmap) is variable lenth. | ||||||
|  |  * - The requested attribute bitmap, which is an array of 32 bit words. | ||||||
|  |  *   Callers use the XVA_SET_REQ() macro to set the bits corresponding to | ||||||
|  |  *   the attributes that are being requested. | ||||||
|  |  * - The returned attribute bitmap, which is an array of 32 bit words. | ||||||
|  |  *   File systems that support optional attributes use the XVA_SET_RTN() | ||||||
|  |  *   macro to set the bits corresponding to the attributes that are being | ||||||
|  |  *   returned. | ||||||
|  |  * - The xoptattr_t structure which contains the attribute values | ||||||
|  |  * | ||||||
|  |  * xva_mapsize determines how many words in the attribute bitmaps. | ||||||
|  |  * Immediately following the attribute bitmaps is the xoptattr_t. | ||||||
|  |  * xva_getxoptattr() is used to get the pointer to the xoptattr_t | ||||||
|  |  * section. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	XVA_MAPSIZE	3		/* Size of attr bitmaps */ | ||||||
|  | #define	XVA_MAGIC	0x78766174	/* Magic # for verification */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The xvattr structure is an extensible structure which permits optional | ||||||
|  |  * attributes to be requested/returned.  File systems may or may not support | ||||||
|  |  * optional attributes.  They do so at their own discretion but if they do | ||||||
|  |  * support optional attributes, they must register the VFSFT_XVATTR feature | ||||||
|  |  * so that the optional attributes can be set/retrived. | ||||||
|  |  * | ||||||
|  |  * The fields of the xvattr structure are: | ||||||
|  |  * | ||||||
|  |  * xva_vattr - The first element of an xvattr is a legacy vattr structure | ||||||
|  |  * which includes the common attributes.  If AT_XVATTR is set in the va_mask | ||||||
|  |  * then the entire structure is treated as an xvattr.  If AT_XVATTR is not | ||||||
|  |  * set, then only the xva_vattr structure can be used. | ||||||
|  |  * | ||||||
|  |  * xva_magic - 0x78766174 (hex for "xvat"). Magic number for verification. | ||||||
|  |  * | ||||||
|  |  * xva_mapsize - Size of requested and returned attribute bitmaps. | ||||||
|  |  * | ||||||
|  |  * xva_rtnattrmapp - Pointer to xva_rtnattrmap[].  We need this since the | ||||||
|  |  * size of the array before it, xva_reqattrmap[], could change which means | ||||||
|  |  * the location of xva_rtnattrmap[] could change.  This will allow unbundled | ||||||
|  |  * file systems to find the location of xva_rtnattrmap[] when the sizes change. | ||||||
|  |  * | ||||||
|  |  * xva_reqattrmap[] - Array of requested attributes.  Attributes are | ||||||
|  |  * represented by a specific bit in a specific element of the attribute | ||||||
|  |  * map array.  Callers set the bits corresponding to the attributes | ||||||
|  |  * that the caller wants to get/set. | ||||||
|  |  * | ||||||
|  |  * xva_rtnattrmap[] - Array of attributes that the file system was able to | ||||||
|  |  * process.  Not all file systems support all optional attributes.  This map | ||||||
|  |  * informs the caller which attributes the underlying file system was able | ||||||
|  |  * to set/get.  (Same structure as the requested attributes array in terms | ||||||
|  |  * of each attribute  corresponding to specific bits and array elements.) | ||||||
|  |  * | ||||||
|  |  * xva_xoptattrs - Structure containing values of optional attributes. | ||||||
|  |  * These values are only valid if the corresponding bits in xva_reqattrmap | ||||||
|  |  * are set and the underlying file system supports those attributes. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Attribute bits used in the extensible attribute's (xva's) attribute | ||||||
|  |  * bitmaps.  Note that the bitmaps are made up of a variable length number | ||||||
|  |  * of 32-bit words.  The convention is to use XAT{n}_{attrname} where "n" | ||||||
|  |  * is the element in the bitmap (starting at 1).  This convention is for | ||||||
|  |  * the convenience of the maintainer to keep track of which element each | ||||||
|  |  * attribute belongs to. | ||||||
|  |  * | ||||||
|  |  * NOTE THAT CONSUMERS MUST *NOT* USE THE XATn_* DEFINES DIRECTLY.  CONSUMERS | ||||||
|  |  * MUST USE THE XAT_* DEFINES. | ||||||
|  |  */ | ||||||
|  | #define	XAT0_INDEX	0LL		/* Index into bitmap for XAT0 attrs */ | ||||||
|  | #define	XAT0_CREATETIME	0x00000001	/* Create time of file */ | ||||||
|  | #define	XAT0_ARCHIVE	0x00000002	/* Archive */ | ||||||
|  | #define	XAT0_SYSTEM	0x00000004	/* System */ | ||||||
|  | #define	XAT0_READONLY	0x00000008	/* Readonly */ | ||||||
|  | #define	XAT0_HIDDEN	0x00000010	/* Hidden */ | ||||||
|  | #define	XAT0_NOUNLINK	0x00000020	/* Nounlink */ | ||||||
|  | #define	XAT0_IMMUTABLE	0x00000040	/* immutable */ | ||||||
|  | #define	XAT0_APPENDONLY	0x00000080	/* appendonly */ | ||||||
|  | #define	XAT0_NODUMP	0x00000100	/* nodump */ | ||||||
|  | #define	XAT0_OPAQUE	0x00000200	/* opaque */ | ||||||
|  | #define	XAT0_AV_QUARANTINED	0x00000400	/* anti-virus quarantine */ | ||||||
|  | #define	XAT0_AV_MODIFIED	0x00000800	/* anti-virus modified */ | ||||||
|  | #define	XAT0_AV_SCANSTAMP	0x00001000	/* anti-virus scanstamp */ | ||||||
|  | #define	XAT0_REPARSE	0x00002000	/* FS reparse point */ | ||||||
|  | #define	XAT0_GEN	0x00004000	/* object generation number */ | ||||||
|  | #define	XAT0_OFFLINE	0x00008000	/* offline */ | ||||||
|  | #define	XAT0_SPARSE	0x00010000	/* sparse */ | ||||||
|  | 
 | ||||||
|  | /* Support for XAT_* optional attributes */ | ||||||
|  | #define	XVA_MASK		0xffffffff	/* Used to mask off 32 bits */ | ||||||
|  | #define	XVA_SHFT		32		/* Used to shift index */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Used to pry out the index and attribute bits from the XAT_* attributes | ||||||
|  |  * defined below.  Note that we're masking things down to 32 bits then | ||||||
|  |  * casting to uint32_t. | ||||||
|  |  */ | ||||||
|  | #define	XVA_INDEX(attr)		((uint32_t)(((attr) >> XVA_SHFT) & XVA_MASK)) | ||||||
|  | #define	XVA_ATTRBIT(attr)	((uint32_t)((attr) & XVA_MASK)) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The following defines present a "flat namespace" so that consumers don't | ||||||
|  |  * need to keep track of which element belongs to which bitmap entry. | ||||||
|  |  * | ||||||
|  |  * NOTE THAT THESE MUST NEVER BE OR-ed TOGETHER | ||||||
|  |  */ | ||||||
|  | #define	XAT_CREATETIME		((XAT0_INDEX << XVA_SHFT) | XAT0_CREATETIME) | ||||||
|  | #define	XAT_ARCHIVE		((XAT0_INDEX << XVA_SHFT) | XAT0_ARCHIVE) | ||||||
|  | #define	XAT_SYSTEM		((XAT0_INDEX << XVA_SHFT) | XAT0_SYSTEM) | ||||||
|  | #define	XAT_READONLY		((XAT0_INDEX << XVA_SHFT) | XAT0_READONLY) | ||||||
|  | #define	XAT_HIDDEN		((XAT0_INDEX << XVA_SHFT) | XAT0_HIDDEN) | ||||||
|  | #define	XAT_NOUNLINK		((XAT0_INDEX << XVA_SHFT) | XAT0_NOUNLINK) | ||||||
|  | #define	XAT_IMMUTABLE		((XAT0_INDEX << XVA_SHFT) | XAT0_IMMUTABLE) | ||||||
|  | #define	XAT_APPENDONLY		((XAT0_INDEX << XVA_SHFT) | XAT0_APPENDONLY) | ||||||
|  | #define	XAT_NODUMP		((XAT0_INDEX << XVA_SHFT) | XAT0_NODUMP) | ||||||
|  | #define	XAT_OPAQUE		((XAT0_INDEX << XVA_SHFT) | XAT0_OPAQUE) | ||||||
|  | #define	XAT_AV_QUARANTINED	((XAT0_INDEX << XVA_SHFT) | XAT0_AV_QUARANTINED) | ||||||
|  | #define	XAT_AV_MODIFIED		((XAT0_INDEX << XVA_SHFT) | XAT0_AV_MODIFIED) | ||||||
|  | #define	XAT_AV_SCANSTAMP	((XAT0_INDEX << XVA_SHFT) | XAT0_AV_SCANSTAMP) | ||||||
|  | #define	XAT_REPARSE		((XAT0_INDEX << XVA_SHFT) | XAT0_REPARSE) | ||||||
|  | #define	XAT_GEN			((XAT0_INDEX << XVA_SHFT) | XAT0_GEN) | ||||||
|  | #define	XAT_OFFLINE		((XAT0_INDEX << XVA_SHFT) | XAT0_OFFLINE) | ||||||
|  | #define	XAT_SPARSE		((XAT0_INDEX << XVA_SHFT) | XAT0_SPARSE) | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The returned attribute map array (xva_rtnattrmap[]) is located past the | ||||||
|  |  * requested attribute map array (xva_reqattrmap[]).  Its location changes | ||||||
|  |  * when the array sizes change.  We use a separate pointer in a known location | ||||||
|  |  * (xva_rtnattrmapp) to hold the location of xva_rtnattrmap[].  This is | ||||||
|  |  * set in xva_init() | ||||||
|  |  */ | ||||||
|  | #define	XVA_RTNATTRMAP(xvap)	((xvap)->xva_rtnattrmapp) | ||||||
|  | 
 | ||||||
|  | #define	MODEMASK	07777		/* mode bits plus permission bits */ | ||||||
|  | #define	PERMMASK	00777		/* permission bits */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * VOP_ACCESS flags | ||||||
|  |  */ | ||||||
|  | #define	V_ACE_MASK	0x1	/* mask represents  NFSv4 ACE permissions */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags for vnode operations. | ||||||
|  |  */ | ||||||
|  | enum rm		{ RMFILE, RMDIRECTORY };	/* rm or rmdir (remove) */ | ||||||
|  | enum create	{ CRCREAT, CRMKNOD, CRMKDIR };	/* reason for create */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Structure used by various vnode operations to determine | ||||||
|  |  * the context (pid, host, identity) of a caller. | ||||||
|  |  * | ||||||
|  |  * The cc_caller_id is used to identify one or more callers who invoke | ||||||
|  |  * operations, possibly on behalf of others.  For example, the NFS | ||||||
|  |  * server could have it's own cc_caller_id which can be detected by | ||||||
|  |  * vnode/vfs operations or (FEM) monitors on those operations.  New | ||||||
|  |  * caller IDs are generated by fs_new_caller_id(). | ||||||
|  |  */ | ||||||
|  | typedef struct caller_context { | ||||||
|  | 	pid_t		cc_pid;		/* Process ID of the caller */ | ||||||
|  | 	int		cc_sysid;	/* System ID, used for remote calls */ | ||||||
|  | 	u_longlong_t	cc_caller_id;	/* Identifier for (set of) caller(s) */ | ||||||
|  | 	ulong_t		cc_flags; | ||||||
|  | } caller_context_t; | ||||||
|  | 
 | ||||||
|  | struct taskq; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags for VOP_LOOKUP | ||||||
|  |  * | ||||||
|  |  * Defined in file.h, but also possible, FIGNORECASE and FSEARCH | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | #define	LOOKUP_DIR		0x01	/* want parent dir vp */ | ||||||
|  | #define	LOOKUP_XATTR		0x02	/* lookup up extended attr dir */ | ||||||
|  | #define	CREATE_XATTR_DIR	0x04	/* Create extended attr dir */ | ||||||
|  | #define	LOOKUP_HAVE_SYSATTR_DIR	0x08	/* Already created virtual GFS dir */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags for VOP_READDIR | ||||||
|  |  */ | ||||||
|  | #define	V_RDDIR_ENTFLAGS	0x01	/* request dirent flags */ | ||||||
|  | #define	V_RDDIR_ACCFILTER	0x02	/* filter out inaccessible dirents */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Public vnode manipulation functions. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | void	vn_rele_async(struct vnode *vp, struct taskq *taskq); | ||||||
|  | 
 | ||||||
|  | #define	VN_RELE_ASYNC(vp, taskq)	{ \ | ||||||
|  | 	vn_rele_async(vp, taskq); \ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Flags to VOP_SETATTR/VOP_GETATTR. | ||||||
|  |  */ | ||||||
|  | #define	ATTR_UTIME	0x01	/* non-default utime(2) request */ | ||||||
|  | #define	ATTR_EXEC	0x02	/* invocation from exec(2) */ | ||||||
|  | #define	ATTR_COMM	0x04	/* yield common vp attributes */ | ||||||
|  | #define	ATTR_HINT	0x08	/* information returned will be `hint' */ | ||||||
|  | #define	ATTR_REAL	0x10	/* yield attributes of the real vp */ | ||||||
|  | #define	ATTR_NOACLCHECK	0x20	/* Don't check ACL when checking permissions */ | ||||||
|  | #define	ATTR_TRIGGER	0x40	/* Mount first if vnode is a trigger mount */ | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _SYS_VNODE_H */ | ||||||
							
								
								
									
										68
									
								
								include/os/freebsd/spl/sys/zmod.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								include/os/freebsd/spl/sys/zmod.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | /*
 | ||||||
|  |  * CDDL HEADER START | ||||||
|  |  * | ||||||
|  |  * The contents of this file are subject to the terms of the | ||||||
|  |  * Common Development and Distribution License (the "License"). | ||||||
|  |  * You may not use this file except in compliance with the License. | ||||||
|  |  * | ||||||
|  |  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE | ||||||
|  |  * or http://www.opensolaris.org/os/licensing.
 | ||||||
|  |  * See the License for the specific language governing permissions | ||||||
|  |  * and limitations under the License. | ||||||
|  |  * | ||||||
|  |  * When distributing Covered Code, include this CDDL HEADER in each | ||||||
|  |  * file and include the License file at usr/src/OPENSOLARIS.LICENSE. | ||||||
|  |  * If applicable, add the following below this CDDL HEADER, with the | ||||||
|  |  * fields enclosed by brackets "[]" replaced with your own identifying | ||||||
|  |  * information: Portions Copyright [yyyy] [name of copyright owner] | ||||||
|  |  * | ||||||
|  |  * CDDL HEADER END | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved. | ||||||
|  |  * Use is subject to license terms. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef	_ZMOD_H | ||||||
|  | #define	_ZMOD_H | ||||||
|  | 
 | ||||||
|  | #pragma ident	"%Z%%M%	%I%	%E% SMI" | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * zmod - RFC-1950-compatible decompression routines | ||||||
|  |  * | ||||||
|  |  * This file provides the public interfaces to zmod, an in-kernel RFC 1950 | ||||||
|  |  * decompression library.  More information about the implementation of these | ||||||
|  |  * interfaces can be found in the usr/src/uts/common/zmod/ directory. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	Z_OK		0 | ||||||
|  | #define	Z_STREAM_END	1 | ||||||
|  | #define	Z_NEED_DICT	2 | ||||||
|  | #define	Z_ERRNO		(-1) | ||||||
|  | #define	Z_STREAM_ERROR	(-2) | ||||||
|  | #define	Z_DATA_ERROR	(-3) | ||||||
|  | #define	Z_MEM_ERROR	(-4) | ||||||
|  | #define	Z_BUF_ERROR	(-5) | ||||||
|  | #define	Z_VERSION_ERROR	(-6) | ||||||
|  | 
 | ||||||
|  | #define	Z_NO_COMPRESSION	0 | ||||||
|  | #define	Z_BEST_SPEED		1 | ||||||
|  | #define	Z_BEST_COMPRESSION	9 | ||||||
|  | #define	Z_DEFAULT_COMPRESSION	(-1) | ||||||
|  | 
 | ||||||
|  | extern int z_uncompress(void *, size_t *, const void *, size_t); | ||||||
|  | extern int z_compress(void *, size_t *, const void *, size_t); | ||||||
|  | extern int z_compress_level(void *, size_t *, const void *, size_t, int); | ||||||
|  | extern const char *z_strerror(int); | ||||||
|  | 
 | ||||||
|  | #ifdef	__cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif	/* _ZMOD_H */ | ||||||
							
								
								
									
										68
									
								
								include/os/freebsd/spl/sys/zone.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								include/os/freebsd/spl/sys/zone.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@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 AUTHORS 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 AUTHORS 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 _OPENSOLARIS_SYS_ZONE_H_ | ||||||
|  | #define	_OPENSOLARIS_SYS_ZONE_H_ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Macros to help with zone visibility restrictions. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define	GLOBAL_ZONEID	0 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Is thread in the global zone? | ||||||
|  |  */ | ||||||
|  | #define	INGLOBALZONE(p)	in_globalzone((p)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | extern boolean_t in_globalzone(struct proc *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Attach the given dataset to the given jail. | ||||||
|  |  */ | ||||||
|  | extern int zone_dataset_attach(struct ucred *, const char *, int); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Detach the given dataset to the given jail. | ||||||
|  |  */ | ||||||
|  | extern int zone_dataset_detach(struct ucred *, const char *, int); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Returns true if the named pool/dataset is visible in the current zone. | ||||||
|  |  */ | ||||||
|  | extern int zone_dataset_visible(const char *, int *); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Safely get the hostid of the specified zone (defaults to machine's hostid | ||||||
|  |  * if the specified zone doesn't emulate a hostid).  Passing NULL retrieves | ||||||
|  |  * the global zone's (i.e., physical system's) hostid. | ||||||
|  |  */ | ||||||
|  | extern uint32_t zone_get_hostid(void *); | ||||||
|  | 
 | ||||||
|  | #endif	/* !_OPENSOLARIS_SYS_ZONE_H_ */ | ||||||
							
								
								
									
										1
									
								
								include/os/freebsd/zfs/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/os/freebsd/zfs/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | SUBDIRS = sys | ||||||
							
								
								
									
										14
									
								
								include/os/freebsd/zfs/sys/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								include/os/freebsd/zfs/sys/Makefile.am
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | KERNEL_H = \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/freebsd_crypto.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/sha2.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/vdev_os.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_context_os.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_ctldir.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_dir.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_ioctl_compat.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_vfsops.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_vnops.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zfs_znode_impl.h \
 | ||||||
|  | 	$(top_srcdir)/include/os/freebsd/zfs/sys/zpl.h | ||||||
|  | 
 | ||||||
|  | EXTRA_DIST = $(KERNEL_H) | ||||||
							
								
								
									
										98
									
								
								include/os/freebsd/zfs/sys/freebsd_crypto.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								include/os/freebsd/zfs/sys/freebsd_crypto.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2018 Sean Eric Fagan <sef@ixsystems.com> | ||||||
|  |  * Portions Copyright (c) 2005-2011 Pawel Jakub Dawidek <pawel@dawidek.net> | ||||||
|  |  * 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 AUTHORS 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 AUTHORS 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. | ||||||
|  |  * | ||||||
|  |  * Portions of this file were taken from GELI's implementation of hmac. | ||||||
|  |  * | ||||||
|  |  * $FreeBSD$ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #ifndef _ZFS_FREEBSD_CRYPTO_H | ||||||
|  | #define	_ZFS_FREEBSD_CRYPTO_H | ||||||
|  | 
 | ||||||
|  | #include <sys/errno.h> | ||||||
|  | #include <sys/mutex.h> | ||||||
|  | #include <opencrypto/cryptodev.h> | ||||||
|  | #include <crypto/sha2/sha256.h> | ||||||
|  | #include <crypto/sha2/sha512.h> | ||||||
|  | 
 | ||||||
|  | #define	SUN_CKM_AES_CCM	"CKM_AES_CCM" | ||||||
|  | #define	SUN_CKM_AES_GCM	"CKM_AES_GCM" | ||||||
|  | #define	SUN_CKM_SHA512_HMAC	"CKM_SHA512_HMAC" | ||||||
|  | 
 | ||||||
|  | #define	CRYPTO_KEY_RAW	1 | ||||||
|  | 
 | ||||||
|  | #define	CRYPTO_BITS2BYTES(n) ((n) == 0 ? 0 : (((n) - 1) >> 3) + 1) | ||||||
|  | #define	CRYPTO_BYTES2BITS(n) ((n) << 3) | ||||||
|  | 
 | ||||||
|  | struct zio_crypt_info; | ||||||
|  | 
 | ||||||
|  | typedef struct freebsd_crypt_session { | ||||||
|  | 	struct mtx		fs_lock; | ||||||
|  | 	crypto_session_t	fs_sid; | ||||||
|  | 	boolean_t	fs_done; | ||||||
|  | } freebsd_crypt_session_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Unused types to minimize code differences. | ||||||
|  |  */ | ||||||
|  | typedef void *crypto_mechanism_t; | ||||||
|  | typedef void *crypto_ctx_template_t; | ||||||
|  | /*
 | ||||||
|  |  * Unlike the ICP crypto_key type, this only | ||||||
|  |  * supports <data, length> (the equivalent of | ||||||
|  |  * CRYPTO_KEY_RAW). | ||||||
|  |  */ | ||||||
|  | typedef struct crypto_key { | ||||||
|  | 	int	ck_format;	/* Unused, but minimizes code diff */ | ||||||
|  | 	void	*ck_data; | ||||||
|  | 	size_t	ck_length; | ||||||
|  | } crypto_key_t; | ||||||
|  | 
 | ||||||
|  | typedef struct hmac_ctx { | ||||||
|  | 	SHA512_CTX	innerctx; | ||||||
|  | 	SHA512_CTX	outerctx; | ||||||
|  | } *crypto_context_t; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * The only algorithm ZFS uses for hashing is SHA512_HMAC. | ||||||
|  |  */ | ||||||
|  | void crypto_mac(const crypto_key_t *key, const void *in_data, | ||||||
|  | 	size_t in_data_size, void *out_data, size_t out_data_size); | ||||||
|  | void crypto_mac_init(struct hmac_ctx *ctx, const crypto_key_t *key); | ||||||
|  | void crypto_mac_update(struct hmac_ctx *ctx, const void *data, | ||||||
|  | 	size_t data_size); | ||||||
|  | void crypto_mac_final(struct hmac_ctx *ctx, void *out_data, | ||||||
|  | 	size_t out_data_size); | ||||||
|  | 
 | ||||||
|  | int freebsd_crypt_newsession(freebsd_crypt_session_t *sessp, | ||||||
|  |     struct zio_crypt_info *, crypto_key_t *); | ||||||
|  | void freebsd_crypt_freesession(freebsd_crypt_session_t *sessp); | ||||||
|  | 
 | ||||||
|  | int freebsd_crypt_uio(boolean_t, freebsd_crypt_session_t *, | ||||||
|  | 	struct zio_crypt_info *, uio_t *, crypto_key_t *, uint8_t *, | ||||||
|  | 	size_t, size_t); | ||||||
|  | 
 | ||||||
|  | #endif /* _ZFS_FREEBSD_CRYPTO_H */ | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Matthew Macy
						Matthew Macy