linux/arch/x86/include/asm/microcode.h
<<
>>
Prefs
   1#ifndef _ASM_X86_MICROCODE_H
   2#define _ASM_X86_MICROCODE_H
   3
   4struct cpu_signature {
   5        unsigned int sig;
   6        unsigned int pf;
   7        unsigned int rev;
   8};
   9
  10struct device;
  11
  12enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };
  13
  14struct microcode_ops {
  15        enum ucode_state (*request_microcode_user) (int cpu,
  16                                const void __user *buf, size_t size);
  17
  18        enum ucode_state (*request_microcode_fw) (int cpu,
  19                                struct device *device);
  20
  21        void (*microcode_fini_cpu) (int cpu);
  22
  23        /*
  24         * The generic 'microcode_core' part guarantees that
  25         * the callbacks below run on a target cpu when they
  26         * are being called.
  27         * See also the "Synchronization" section in microcode_core.c.
  28         */
  29        int (*apply_microcode) (int cpu);
  30        int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
  31};
  32
  33struct ucode_cpu_info {
  34        struct cpu_signature    cpu_sig;
  35        int                     valid;
  36        void                    *mc;
  37};
  38extern struct ucode_cpu_info ucode_cpu_info[];
  39
  40#ifdef CONFIG_MICROCODE_INTEL
  41extern struct microcode_ops * __init init_intel_microcode(void);
  42#else
  43static inline struct microcode_ops * __init init_intel_microcode(void)
  44{
  45        return NULL;
  46}
  47#endif /* CONFIG_MICROCODE_INTEL */
  48
  49#ifdef CONFIG_MICROCODE_AMD
  50extern struct microcode_ops * __init init_amd_microcode(void);
  51
  52static inline void get_ucode_data(void *to, const u8 *from, size_t n)
  53{
  54        memcpy(to, from, n);
  55}
  56
  57#else
  58static inline struct microcode_ops * __init init_amd_microcode(void)
  59{
  60        return NULL;
  61}
  62#endif
  63
  64#endif /* _ASM_X86_MICROCODE_H */
  65