1 : /*
2 : * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 : * Use of this source code is governed by a BSD-style license that can be
4 : * found in the LICENSE file.
5 : */
6 :
7 : #ifndef NATIVE_CLIENT_SRC_TRUSTED_CPU_FEATURES_ARCH_ARM_CPU_ARM_H_
8 : #define NATIVE_CLIENT_SRC_TRUSTED_CPU_FEATURES_ARCH_ARM_CPU_ARM_H_
9 :
10 : #include "native_client/src/include/nacl_compiler_annotations.h"
11 : #include "native_client/src/include/nacl_macros.h"
12 : #include "native_client/src/include/portability.h"
13 : #include "native_client/src/trusted/validator/ncvalidate.h"
14 :
15 :
16 : EXTERN_C_BEGIN
17 :
18 : /* List of features supported by ARM CPUs. */
19 : typedef enum {
20 : #define NACL_ARM_CPU_FEATURE(name) NACL_CONCAT(NaClCPUFeatureArm_, name),
21 : #include "native_client/src/trusted/cpu_features/arch/arm/cpu_arm_features.h"
22 : #undef NACL_ARM_CPU_FEATURE
23 : /* Leave the following as the last entry. */
24 : NaClCPUFeatureArm_Max
25 : } NaClCPUFeatureArmID;
26 :
27 : typedef struct cpu_feature_struct_arm {
28 : char data[NaClCPUFeatureArm_Max];
29 : } NaClCPUFeaturesArm;
30 :
31 : /*
32 : * Platform-independent NaClValidatorInterface functions.
33 : */
34 : void NaClSetAllCPUFeaturesArm(NaClCPUFeatures *features);
35 : void NaClGetCurrentCPUFeaturesArm(NaClCPUFeatures *features);
36 : int NaClFixCPUFeaturesArm(NaClCPUFeatures *features);
37 :
38 : /*
39 : * Platform-dependent getter/setter.
40 : */
41 : static INLINE int NaClGetCPUFeatureArm(const NaClCPUFeaturesArm *features,
42 0 : NaClCPUFeatureArmID id) {
43 0 : return features->data[id];
44 0 : }
45 :
46 : void NaClSetCPUFeatureArm(NaClCPUFeaturesArm *features, NaClCPUFeatureArmID id,
47 : int state);
48 : const char *NaClGetCPUFeatureArmName(NaClCPUFeatureArmID id);
49 :
50 : /*
51 : * Platform-independent functions which are only used in platform-dependent
52 : * code.
53 : */
54 : void NaClClearCPUFeaturesArm(NaClCPUFeaturesArm *features);
55 : void NaClCopyCPUFeaturesArm(NaClCPUFeaturesArm *target,
56 : const NaClCPUFeaturesArm *source);
57 : /*
58 : * TODO(jfb) The x86 CPU features also offers this function, which is
59 : * currently not used on ARM: NaClArchSupportedArm.
60 : */
61 :
62 : EXTERN_C_END
63 :
64 : #endif /* NATIVE_CLIENT_SRC_TRUSTED_CPU_FEATURES_ARCH_ARM_CPU_ARM_H_ */
|