Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add generic implementation handling and new SHA2 impl
The skeleton file module/icp/include/generic_impl.c can be used for iterating over different implementations of algorithms. It's used by SHA256, SHA512 and BLAKE3 currently. The generic SHA2 implementation is based on public domain code of ccpcrypto v0.10. The assembly files are taken from current openssl master and are licensed under the Apache License Version 2.0. sha256-x86_64.S: x86-64, SSSE3, AVX, AVX2, SHA-NI sha512-x86_64.S: x86-64,AVX, AVX2 sha256-armv7.S: ... sha512-armv7.S: ... sha256-armv8.S: NEON, ARMv8 Cryptography Extension sha512-armv8.S: ARMv8 Cryptography Extension sha256-ppc.S: generic PPC64 LE/BE sha512-ppc.S: generic PPC64 LE/BE sha256-p8.S: Power ISA Version 2.07 LE/BE sha512-p8.S: Power ISA Version 2.07 LE/BE Signed-off-by: Tino Reichardt <milky-zfs@mcmilk.de>
- Loading branch information
Showing
44 changed files
with
28,492 additions
and
126 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* | ||
* 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 https://opensource.org/licenses/CDDL-1.0. | ||
* 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) 2022 Tino Reichardt <milky-zfs@mcmilk.de> | ||
*/ | ||
|
||
/* | ||
* USER API: | ||
* | ||
* Kernel fpu methods: | ||
* kfpu_allowed() | ||
* kfpu_begin() | ||
* kfpu_end() | ||
* kfpu_init() | ||
* kfpu_fini() | ||
* | ||
* SIMD support: | ||
* | ||
* Following functions should be called to determine whether CPU feature | ||
* is supported. All functions are usable in kernel and user space. | ||
* If a SIMD algorithm is using more than one instruction set | ||
* all relevant feature test functions should be called. | ||
* | ||
* Supported features: | ||
* zfs_neon_available() | ||
* zfs_sha256_available() | ||
* zfs_sha512_available() | ||
*/ | ||
|
||
#ifndef _FREEBSD_SIMD_AARCH64_H | ||
#define _FREEBSD_SIMD_AARCH64_H | ||
|
||
#include <sys/types.h> | ||
#include <machine/elf.h> | ||
|
||
#define kfpu_allowed() 1 | ||
#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) | ||
|
||
/* | ||
* Check if NEON is available | ||
*/ | ||
static inline boolean_t | ||
zfs_neon_available(void) | ||
{ | ||
return (elf_hwcap & HWCAP_FP); | ||
} | ||
|
||
/* | ||
* Check if SHA256 is available | ||
*/ | ||
static inline boolean_t | ||
zfs_sha256_available(void) | ||
{ | ||
return (elf_hwcap & HWCAP_SHA2); | ||
} | ||
|
||
/* | ||
* Check if SHA512 is available | ||
*/ | ||
static inline boolean_t | ||
zfs_sha512_available(void) | ||
{ | ||
return (elf_hwcap & HWCAP_SHA512); | ||
} | ||
|
||
#endif /* _FREEBSD_SIMD_AARCH64_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* | ||
* 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 https://opensource.org/licenses/CDDL-1.0. | ||
* 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) 2022 Tino Reichardt <milky-zfs@mcmilk.de> | ||
*/ | ||
|
||
/* | ||
* USER API: | ||
* | ||
* Kernel fpu methods: | ||
* kfpu_allowed() | ||
* kfpu_begin() | ||
* kfpu_end() | ||
* kfpu_init() | ||
* kfpu_fini() | ||
* | ||
* SIMD support: | ||
* | ||
* Following functions should be called to determine whether CPU feature | ||
* is supported. All functions are usable in kernel and user space. | ||
* If a SIMD algorithm is using more than one instruction set | ||
* all relevant feature test functions should be called. | ||
* | ||
* Supported features: | ||
* zfs_neon_available() | ||
* zfs_sha256_available() | ||
*/ | ||
|
||
#ifndef _FREEBSD_SIMD_ARM_H | ||
#define _FREEBSD_SIMD_ARM_H | ||
|
||
#include <sys/types.h> | ||
#include <machine/elf.h> | ||
|
||
#define kfpu_allowed() 1 | ||
#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) | ||
|
||
/* | ||
* Check if NEON is available | ||
*/ | ||
static inline boolean_t | ||
zfs_neon_available(void) | ||
{ | ||
return (elf_hwcap & HWCAP_NEON); | ||
} | ||
|
||
/* | ||
* Check if SHA256 is available | ||
*/ | ||
static inline boolean_t | ||
zfs_sha256_available(void) | ||
{ | ||
return (elf_hwcap2 & HWCAP2_SHA2); | ||
} | ||
|
||
#endif /* _FREEBSD_SIMD_ARM_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.