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
2009-05-11 23:48:27 +02:00
enum ucode_state ( * request_microcode_fw ) ( int cpu ,
struct device * device ) ;
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 ) ;
2010-11-01 23:36:53 +01:00
static inline void get_ucode_data ( void * to , const u8 * from , size_t n )
{
memcpy ( to , from , n ) ;
}
2008-09-23 12:08:44 +02:00
# else
static inline struct microcode_ops * __init init_amd_microcode ( void )
{
return NULL ;
}
# endif
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_MICROCODE_H */