diff options
| author | Brent Cook <busterb@gmail.com> | 2025-05-18 14:14:50 -0500 |
|---|---|---|
| committer | Brent Cook <busterb@gmail.com> | 2025-05-19 06:19:47 +0900 |
| commit | b905935b885023c203f24a9cdfbebde1ab965b0b (patch) | |
| tree | ac702ef02489ff863ef215c5f9cb897f2d85aab7 | |
| parent | 57af1184805d44d48c1f6df7e13f1f823dceb6f4 (diff) | |
| download | portable-b905935b885023c203f24a9cdfbebde1ab965b0b.tar.gz portable-b905935b885023c203f24a9cdfbebde1ab965b0b.tar.bz2 portable-b905935b885023c203f24a9cdfbebde1ab965b0b.zip | |
add linux aarc64 cpu_caps
| -rw-r--r-- | crypto/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | crypto/Makefile.am | 4 | ||||
| -rw-r--r-- | crypto/arch/aarch64/crypto_cpu_caps_linux.c | 62 |
3 files changed, 68 insertions, 0 deletions
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 184fbf6..dff4993 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt | |||
| @@ -148,6 +148,8 @@ endif() | |||
| 148 | if(HOST_AARCH64) | 148 | if(HOST_AARCH64) |
| 149 | if(APPLE) | 149 | if(APPLE) |
| 150 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_apple.c) | 150 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_apple.c) |
| 151 | elseif(LINUX) | ||
| 152 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps_linux.c) | ||
| 151 | elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") | 153 | elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") |
| 152 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) | 154 | set(CRYPTO_SRC ${CRYPTO_SRC} arch/aarch64/crypto_cpu_caps.c) |
| 153 | else() | 155 | else() |
diff --git a/crypto/Makefile.am b/crypto/Makefile.am index bbce59a..0d130d8 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am | |||
| @@ -213,6 +213,9 @@ if HOST_AARCH64 | |||
| 213 | if HOST_DARWIN | 213 | if HOST_DARWIN |
| 214 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_apple.c | 214 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_apple.c |
| 215 | else | 215 | else |
| 216 | if HOST_LINUX | ||
| 217 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_linux.c | ||
| 218 | else | ||
| 216 | if HOST_OPENBSD | 219 | if HOST_OPENBSD |
| 217 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c | 220 | libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps.c |
| 218 | else | 221 | else |
| @@ -220,6 +223,7 @@ libcrypto_la_SOURCES += arch/aarch64/crypto_cpu_caps_none.c | |||
| 220 | endif | 223 | endif |
| 221 | endif | 224 | endif |
| 222 | endif | 225 | endif |
| 226 | endif | ||
| 223 | 227 | ||
| 224 | if HOST_X86_64 | 228 | if HOST_X86_64 |
| 225 | libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c | 229 | libcrypto_la_SOURCES += arch/amd64/crypto_cpu_caps.c |
diff --git a/crypto/arch/aarch64/crypto_cpu_caps_linux.c b/crypto/arch/aarch64/crypto_cpu_caps_linux.c new file mode 100644 index 0000000..ae28120 --- /dev/null +++ b/crypto/arch/aarch64/crypto_cpu_caps_linux.c | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | /* $OpenBSD: crypto_cpu_caps.c,v 1.2 2024/11/12 13:52:31 jsing Exp $ */ | ||
| 2 | /* | ||
| 3 | * Copyright (c) 2025 Brent Cook <bcook@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 17 | |||
| 18 | #include <sys/auxv.h> | ||
| 19 | |||
| 20 | /* from arch/arm64/include/uapi/asm/hwcap.h */ | ||
| 21 | #define HWCAP_AES (1 << 3) | ||
| 22 | #define HWCAP_PMULL (1 << 4) | ||
| 23 | #define HWCAP_SHA1 (1 << 5) | ||
| 24 | #define HWCAP_SHA2 (1 << 6) | ||
| 25 | #define HWCAP_CRC32 (1 << 7) | ||
| 26 | #define HWCAP_SHA3 (1 << 17) | ||
| 27 | #define HWCAP_SHA512 (1 << 21) | ||
| 28 | |||
| 29 | #include "crypto_arch.h" | ||
| 30 | |||
| 31 | /* Machine dependent CPU capabilities. */ | ||
| 32 | uint64_t crypto_cpu_caps_aarch64; | ||
| 33 | |||
| 34 | static uint64_t | ||
| 35 | check_cpu_cap(unsigned long hwcap, uint64_t cap_flag) | ||
| 36 | { | ||
| 37 | return (getauxval(AT_HWCAP) & hwcap) ? cap_flag : 0; | ||
| 38 | } | ||
| 39 | |||
| 40 | void | ||
| 41 | crypto_cpu_caps_init(void) | ||
| 42 | { | ||
| 43 | crypto_cpu_caps_aarch64 = 0; | ||
| 44 | |||
| 45 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_AES, | ||
| 46 | CRYPTO_CPU_CAPS_AARCH64_AES); | ||
| 47 | |||
| 48 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_PMULL, | ||
| 49 | CRYPTO_CPU_CAPS_AARCH64_PMULL); | ||
| 50 | |||
| 51 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA1, | ||
| 52 | CRYPTO_CPU_CAPS_AARCH64_SHA1); | ||
| 53 | |||
| 54 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA2, | ||
| 55 | CRYPTO_CPU_CAPS_AARCH64_SHA2); | ||
| 56 | |||
| 57 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA512, | ||
| 58 | CRYPTO_CPU_CAPS_AARCH64_SHA512); | ||
| 59 | |||
| 60 | crypto_cpu_caps_aarch64 |= check_cpu_cap(HWCAP_SHA3, | ||
| 61 | CRYPTO_CPU_CAPS_AARCH64_SHA3); | ||
| 62 | } | ||
