xref: /freebsd/lib/libmd/aarch64/sha1dispatch.c (revision f6210541f9e3c6cfda321e0ad98f277fb98a625b)
1*f6210541SRobert Clausecker /*-
2*f6210541SRobert Clausecker  * Copyright (c) 2024 Robert Clausecker <fuz@freebsd.org>
3*f6210541SRobert Clausecker  *
4*f6210541SRobert Clausecker  * SPDX-License-Identifier: BSD-2-Clause
5*f6210541SRobert Clausecker  */
6*f6210541SRobert Clausecker 
7*f6210541SRobert Clausecker #include <machine/ifunc.h>
8*f6210541SRobert Clausecker #include <sha.h>
9*f6210541SRobert Clausecker #include <sys/auxv.h>
10*f6210541SRobert Clausecker 
11*f6210541SRobert Clausecker extern void _libmd_sha1block_scalar(SHA1_CTX *, const void *, size_t);
12*f6210541SRobert Clausecker extern void _libmd_sha1block_sha1(SHA1_CTX *, const void *, size_t);
13*f6210541SRobert Clausecker 
14*f6210541SRobert Clausecker DEFINE_IFUNC(, void, sha1_block, (SHA1_CTX *, const void *, size_t))
15*f6210541SRobert Clausecker {
16*f6210541SRobert Clausecker 	unsigned long hwcap = 0;
17*f6210541SRobert Clausecker 
18*f6210541SRobert Clausecker 	elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
19*f6210541SRobert Clausecker 
20*f6210541SRobert Clausecker 	if (hwcap & HWCAP_SHA1)
21*f6210541SRobert Clausecker 		return (_libmd_sha1block_sha1);
22*f6210541SRobert Clausecker 	else
23*f6210541SRobert Clausecker 		return (_libmd_sha1block_scalar);
24*f6210541SRobert Clausecker }
25