root/arch/x86/include/asm/microcode.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. init_intel_microcode
  2. init_amd_microcode
  3. exit_amd_microcode
  4. load_ucode_bsp
  5. load_ucode_ap
  6. save_microcode_in_initrd
  7. reload_early_microcode

#ifndef _ASM_X86_MICROCODE_H
#define _ASM_X86_MICROCODE_H

#define native_rdmsr(msr, val1, val2)                   \
do {                                                    \
        u64 __val = native_read_msr((msr));             \
        (void)((val1) = (u32)__val);                    \
        (void)((val2) = (u32)(__val >> 32));            \
} while (0)

#define native_wrmsr(msr, low, high)                    \
        native_write_msr(msr, low, high)

#define native_wrmsrl(msr, val)                         \
        native_write_msr((msr),                         \
                         (u32)((u64)(val)),             \
                         (u32)((u64)(val) >> 32))

struct cpu_signature {
        unsigned int sig;
        unsigned int pf;
        unsigned int rev;
};

struct device;

enum ucode_state { UCODE_ERROR, UCODE_OK, UCODE_NFOUND };
extern bool dis_ucode_ldr;

struct microcode_ops {
        enum ucode_state (*request_microcode_user) (int cpu,
                                const void __user *buf, size_t size);

        enum ucode_state (*request_microcode_fw) (int cpu, struct device *,
                                                  bool refresh_fw);

        void (*microcode_fini_cpu) (int cpu);

        /*
         * The generic 'microcode_core' part guarantees that
         * the callbacks below run on a target cpu when they
         * are being called.
         * See also the "Synchronization" section in microcode_core.c.
         */
        int (*apply_microcode) (int cpu);
        int (*collect_cpu_info) (int cpu, struct cpu_signature *csig);
};

struct ucode_cpu_info {
        struct cpu_signature    cpu_sig;
        int                     valid;
        void                    *mc;
};
extern struct ucode_cpu_info ucode_cpu_info[];

#ifdef CONFIG_MICROCODE_INTEL
extern struct microcode_ops * __init init_intel_microcode(void);
#else
static inline struct microcode_ops * __init init_intel_microcode(void)
{
        return NULL;
}
#endif /* CONFIG_MICROCODE_INTEL */

#ifdef CONFIG_MICROCODE_AMD
extern struct microcode_ops * __init init_amd_microcode(void);
extern void __exit exit_amd_microcode(void);
#else
static inline struct microcode_ops * __init init_amd_microcode(void)
{
        return NULL;
}
static inline void __exit exit_amd_microcode(void) {}
#endif

#ifdef CONFIG_MICROCODE_EARLY
#define MAX_UCODE_COUNT 128
extern void __init load_ucode_bsp(void);
extern void load_ucode_ap(void);
extern int __init save_microcode_in_initrd(void);
void reload_early_microcode(void);
#else
static inline void __init load_ucode_bsp(void) {}
static inline void load_ucode_ap(void) {}
static inline int __init save_microcode_in_initrd(void)
{
        return 0;
}
static inline void reload_early_microcode(void) {}
#endif

#endif /* _ASM_X86_MICROCODE_H */

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