root/include/linux/cpufeature.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
   4  */
   5 
   6 #ifndef __LINUX_CPUFEATURE_H
   7 #define __LINUX_CPUFEATURE_H
   8 
   9 #ifdef CONFIG_GENERIC_CPU_AUTOPROBE
  10 
  11 #include <linux/init.h>
  12 #include <linux/mod_devicetable.h>
  13 #include <asm/cpufeature.h>
  14 
  15 /*
  16  * Macros imported from <asm/cpufeature.h>:
  17  * - cpu_feature(x)             ordinal value of feature called 'x'
  18  * - cpu_have_feature(u32 n)    whether feature #n is available
  19  * - MAX_CPU_FEATURES           upper bound for feature ordinal values
  20  * Optional:
  21  * - CPU_FEATURE_TYPEFMT        format string fragment for printing the cpu type
  22  * - CPU_FEATURE_TYPEVAL        set of values matching the format string above
  23  */
  24 
  25 #ifndef CPU_FEATURE_TYPEFMT
  26 #define CPU_FEATURE_TYPEFMT     "%s"
  27 #endif
  28 
  29 #ifndef CPU_FEATURE_TYPEVAL
  30 #define CPU_FEATURE_TYPEVAL     ELF_PLATFORM
  31 #endif
  32 
  33 /*
  34  * Use module_cpu_feature_match(feature, module_init_function) to
  35  * declare that
  36  * a) the module shall be probed upon discovery of CPU feature 'feature'
  37  *    (typically at boot time using udev)
  38  * b) the module must not be loaded if CPU feature 'feature' is not present
  39  *    (not even by manual insmod).
  40  *
  41  * For a list of legal values for 'feature', please consult the file
  42  * 'asm/cpufeature.h' of your favorite architecture.
  43  */
  44 #define module_cpu_feature_match(x, __initfunc)                 \
  45 static struct cpu_feature const __maybe_unused cpu_feature_match_ ## x[] = \
  46         { { .feature = cpu_feature(x) }, { } };                 \
  47 MODULE_DEVICE_TABLE(cpu, cpu_feature_match_ ## x);              \
  48                                                                 \
  49 static int __init cpu_feature_match_ ## x ## _init(void)        \
  50 {                                                               \
  51         if (!cpu_have_feature(cpu_feature(x)))                  \
  52                 return -ENODEV;                                 \
  53         return __initfunc();                                    \
  54 }                                                               \
  55 module_init(cpu_feature_match_ ## x ## _init)
  56 
  57 #endif
  58 #endif

/* [<][>][^][v][top][bottom][index][help] */