1e3c27dc0ace077ca3b7deebae0ceae85e5ec3ee
[libgcrypt.git] / src / hwfeatures.c
1 /* hwfeatures.c - Detect hardware features.
2  * Copyright (C) 2007, 2011  Free Software Foundation, Inc.
3  * Copyright (C) 2012  g10 Code GmbH
4  *
5  * This file is part of Libgcrypt.
6  *
7  * Libgcrypt is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as
9  * published by the Free Software Foundation; either version 2.1 of
10  * the License, or (at your option) any later version.
11  *
12  * Libgcrypt is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #include <config.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <stdarg.h>
26 #include <unistd.h>
27
28 #include "g10lib.h"
29 #include "hwf-common.h"
30
31
32 /* A bit vector describing the hardware features currently
33    available. */
34 static unsigned int hw_features;
35
36
37 /* Return a bit vector describing the available hardware features.
38    The HWF_ constants are used to test for them. */
39 unsigned int
40 _gcry_get_hw_features (void)
41 {
42   return hw_features;
43 }
44
45
46 /* Detect the available hardware features.  This function is called
47    once right at startup and we assume that no other threads are
48    running.  */
49 void
50 _gcry_detect_hw_features (unsigned int disabled_features)
51 {
52   hw_features = 0;
53
54   if (fips_mode ())
55     return; /* Hardware support is not to be evaluated.  */
56
57 #if defined (HAVE_CPU_ARCH_X86)
58   {
59     hw_features = _gcry_hwf_detect_x86 ();
60   }
61 #endif /* HAVE_CPU_ARCH_X86 */
62 #if defined (HAVE_CPU_ARCH_ARM)
63   {
64     hw_features = _gcry_hwf_detect_arm ();
65   }
66 #endif /* HAVE_CPU_ARCH_ARM */
67
68   hw_features &= ~disabled_features;
69 }