2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_MICROCODE_H
# define _ASM_X86_MICROCODE_H
2008-08-20 00:22:26 +02:00
2008-09-23 12:08:44 +02:00
struct cpu_signature {
unsigned int sig ;
unsigned int pf ;
unsigned int rev ;
} ;
2008-07-28 18:44:21 +02:00
2008-09-11 23:27:52 +02:00
struct device ;
2008-08-20 00:22:26 +02:00
2009-05-11 23:48:27 +02:00
enum ucode_state { UCODE_ERROR , UCODE_OK , UCODE_NFOUND } ;
2008-07-28 18:44:20 +02:00
struct microcode_ops {
2009-05-11 23:48:27 +02:00
enum ucode_state ( * request_microcode_user ) ( int cpu ,
const void __user * buf , size_t size ) ;
2008-09-11 23:27:52 +02:00
2012-07-26 15:51:00 +02:00
enum ucode_state ( * request_microcode_fw ) ( int cpu , struct device * ,
bool refresh_fw ) ;
2008-09-11 23:27:52 +02:00
void ( * microcode_fini_cpu ) ( int cpu ) ;
2009-05-11 23:48:27 +02:00
/*
* 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 ) ;
2008-07-28 18:44:20 +02:00
} ;
2008-08-20 00:22:26 +02:00
struct ucode_cpu_info {
2009-05-11 23:48:27 +02:00
struct cpu_signature cpu_sig ;
int valid ;
void * mc ;
2008-07-28 18:44:15 +02:00
} ;
2008-08-20 00:22:26 +02:00
extern struct ucode_cpu_info ucode_cpu_info [ ] ;
2008-09-23 12:08:44 +02:00
# 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 ) ;
2011-12-02 16:50:04 +01:00
extern void __exit exit_amd_microcode ( void ) ;
2008-09-23 12:08:44 +02:00
# else
static inline struct microcode_ops * __init init_amd_microcode ( void )
{
return NULL ;
}
2011-12-02 16:50:04 +01:00
static inline void __exit exit_amd_microcode ( void ) { }
2008-09-23 12:08:44 +02:00
# endif
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_MICROCODE_H */