#include <xen/watchdog.h>
#include <asm/apic.h>
+#include <asm/bootinfo.h>
#include <asm/cpu-policy.h>
#include <asm/nmi.h>
#include <asm/processor.h>
}
custom_param("ucode", parse_ucode);
-static void __init microcode_scan_module(
- unsigned long *module_map,
- const multiboot_info_t *mbi)
+static void __init microcode_scan_module(struct boot_info *bi)
{
- module_t *mod = (module_t *)__va(mbi->mods_addr);
uint64_t *_blob_start;
unsigned long _blob_size;
struct cpio_data cd;
/*
* Try all modules and see whichever could be the microcode blob.
*/
- for ( i = 1 /* Ignore dom0 kernel */; i < mbi->mods_count; i++ )
+ for ( i = 1 /* Ignore dom0 kernel */; i < bi->nr_modules; i++ )
{
- if ( !test_bit(i, module_map) )
+ if ( !test_bit(i, bi->module_map) )
continue;
- _blob_start = bootstrap_map(&mod[i]);
- _blob_size = mod[i].mod_end;
+ _blob_start = bootstrap_map(bi->mods[i].mod);
+ _blob_size = bi->mods[i].mod->mod_end;
if ( !_blob_start )
{
printk("Could not map multiboot module #%d (size: %ld)\n",
}
}
-static void __init microcode_grab_module(
- unsigned long *module_map,
- const multiboot_info_t *mbi)
+static void __init microcode_grab_module(struct boot_info *bi)
{
- module_t *mod = (module_t *)__va(mbi->mods_addr);
-
if ( ucode_mod_idx < 0 )
- ucode_mod_idx += mbi->mods_count;
- if ( ucode_mod_idx <= 0 || ucode_mod_idx >= mbi->mods_count ||
- !__test_and_clear_bit(ucode_mod_idx, module_map) )
+ ucode_mod_idx += bi->nr_modules;
+ if ( ucode_mod_idx <= 0 || ucode_mod_idx >= bi->nr_modules ||
+ !__test_and_clear_bit(ucode_mod_idx, bi->module_map) )
goto scan;
- ucode_mod = mod[ucode_mod_idx];
+ ucode_mod = *bi->mods[ucode_mod_idx].mod;
scan:
if ( ucode_scan )
- microcode_scan_module(module_map, mbi);
+ microcode_scan_module(bi);
}
static struct microcode_ops __ro_after_init ucode_ops;
return rc;
}
-int __init microcode_init_cache(unsigned long *module_map,
- const struct multiboot_info *mbi)
+int __init microcode_init_cache(struct boot_info *bi)
{
int rc = 0;
if ( ucode_scan )
/* Need to rescan the modules because they might have been relocated */
- microcode_scan_module(module_map, mbi);
+ microcode_scan_module(bi);
if ( ucode_mod.mod_end )
rc = early_update_cache(bootstrap_map(&ucode_mod),
return microcode_update_cpu(patch, 0);
}
-int __init early_microcode_init(unsigned long *module_map,
- const struct multiboot_info *mbi)
+int __init early_microcode_init(struct boot_info *bi)
{
const struct cpuinfo_x86 *c = &boot_cpu_data;
int rc = 0;
return -ENODEV;
}
- microcode_grab_module(module_map, mbi);
+ microcode_grab_module(bi);
if ( ucode_mod.mod_end || ucode_blob.size )
rc = early_microcode_update_cpu();
void microcode_set_module(unsigned int idx);
int microcode_update(XEN_GUEST_HANDLE(const_void) buf,
unsigned long len, unsigned int flags);
-int early_microcode_init(unsigned long *module_map,
- const struct multiboot_info *mbi);
-int microcode_init_cache(unsigned long *module_map,
- const struct multiboot_info *mbi);
int microcode_update_one(void);
+struct boot_info;
+int early_microcode_init(struct boot_info *bi);
+int microcode_init_cache(struct boot_info *bi);
+
#endif /* ASM_X86__MICROCODE_H */