{
DOMPRINTF("%s: PAE fixup", __FUNCTION__);
dom->guest_type = "xen-3.0-x86_32p";
- dom->parms.pae = 2;
+ dom->parms.pae = XEN_PAE_EXTCR3;
}
break;
}
case EM_386:
switch ( dom->parms.pae )
{
- case 3 /* PAEKERN_bimodal */:
+ case XEN_PAE_BIMODAL:
if ( strstr(dom->xen_caps, "xen-3.0-x86_32p") )
return "xen-3.0-x86_32p";
return "xen-3.0-x86_32";
- case PAEKERN_extended_cr3:
- case PAEKERN_yes:
+ case XEN_PAE_EXTCR3:
+ case XEN_PAE_YES:
return "xen-3.0-x86_32p";
- case PAEKERN_no:
+ case XEN_PAE_NO:
default:
return "xen-3.0-x86_32";
}
xen_pfn_t pgpfn;
xen_pfn_t l3mfn = xc_dom_p2m_guest(dom, l3pfn);
- if ( dom->parms.pae == 1 )
+ if ( dom->parms.pae == XEN_PAE_YES )
{
if ( l3mfn >= 0x100000 )
l3mfn = move_l3_below_4G(dom, l3pfn, l3mfn);
ctxt->user_regs.eflags = 1 << 9; /* Interrupt Enable */
ctxt->flags = VGCF_in_kernel_X86_32 | VGCF_online_X86_32;
- if ( dom->parms.pae == 2 /* extended_cr3 */ ||
- dom->parms.pae == 3 /* bimodal */ )
+ if ( dom->parms.pae == XEN_PAE_EXTCR3 ||
+ dom->parms.pae == XEN_PAE_BIMODAL )
ctxt->vm_assist |= (1UL << VMASST_TYPE_pae_extended_cr3);
cr3_pfn = xc_dom_p2m_guest(dom, dom->pgtables_seg.pfn);
#define MFN_MASK_X86 ((1ULL << (MADDR_BITS_X86 - PAGE_SHIFT_X86)) - 1)
#define MADDR_MASK_X86 (MFN_MASK_X86 << PAGE_SHIFT_X86)
-
-#define PAEKERN_no 0
-#define PAEKERN_yes 1
-#define PAEKERN_extended_cr3 2
-#define PAEKERN_bimodal 3
-
int pin_table(xc_interface *xch, unsigned int type, unsigned long mfn,
domid_t dom);
compat32 = 0;
machine = elf_uval(&elf, elf.ehdr, e_machine);
printk(" Xen kernel: 64-bit, lsb, compat32\n");
- if (elf_32bit(&elf) && parms.pae == PAEKERN_bimodal)
- parms.pae = PAEKERN_extended_cr3;
+ if (elf_32bit(&elf) && parms.pae == XEN_PAE_BIMODAL)
+ parms.pae = XEN_PAE_EXTCR3;
if (elf_32bit(&elf) && parms.pae && machine == EM_386)
{
compat32 = 1;
nr_pages = compute_dom0_nr_pages(d, &parms, initrd_len);
- if ( parms.pae == PAEKERN_extended_cr3 )
+ if ( parms.pae == XEN_PAE_EXTCR3 )
set_bit(VMASST_TYPE_pae_extended_cr3, &d->vm_assist);
if ( (parms.virt_hv_start_low != UNSET_ADDR) && elf_32bit(&elf) )
break;
case XEN_ELFNOTE_PAE_MODE:
if ( !strcmp(str, "yes") )
- parms->pae = 2 /* extended_cr3 */;
+ parms->pae = XEN_PAE_EXTCR3;
if ( strstr(str, "bimodal") )
- parms->pae = 3 /* bimodal */;
+ parms->pae = XEN_PAE_BIMODAL;
break;
case XEN_ELFNOTE_BSD_SYMTAB:
if ( !strcmp(str, "yes") )
if ( !strcmp(name, "PAE") )
{
if ( !strcmp(value, "yes[extended-cr3]") )
- parms->pae = 2 /* extended_cr3 */;
+ parms->pae = XEN_PAE_EXTCR3;
else if ( !strncmp(value, "yes", 3) )
- parms->pae = 1 /* yes */;
+ parms->pae = XEN_PAE_YES;
}
if ( !strcmp(name, "BSD_SYMTAB") )
parms->bsd_symtab = 1;
#define ELFNOTE_DESC(_n_) (ELFNOTE_NAME(_n_) + ELFNOTE_ALIGN((_n_)->namesz))
#define ELFNOTE_NEXT(_n_) ((Elf_Note *)(ELFNOTE_DESC(_n_) + ELFNOTE_ALIGN((_n_)->descsz)))
-struct domain_setup_info;
-extern int loadelfimage(struct domain_setup_info *);
-extern int parseelfimage(struct domain_setup_info *);
-
-extern unsigned long long xen_elfnote_numeric(struct domain_setup_info *dsi,
- int type, int *defined);
-extern const char *xen_elfnote_string(struct domain_setup_info *dsi, int type);
-
-#ifdef CONFIG_COMPAT
-extern int elf32_sanity_check(const Elf32_Ehdr *ehdr);
-extern int loadelf32image(struct domain_setup_info *);
-extern int parseelf32image(struct domain_setup_info *);
-extern unsigned long long xen_elf32note_numeric(struct domain_setup_info *,
- int type, int *defined);
-extern const char *xen_elf32note_string(struct domain_setup_info *, int type);
-#endif
-
-#ifdef Elf_Ehdr
-extern int elf_sanity_check(const Elf_Ehdr *ehdr);
-#endif
-
#endif /* __XEN_ELF_H__ */
XEN_ENT_STR = 2
};
+enum xen_pae_type {
+ XEN_PAE_NO = 0,
+ XEN_PAE_YES = 1,
+ XEN_PAE_EXTCR3 = 2,
+ XEN_PAE_BIMODAL = 3
+};
+
struct xen_elfnote {
enum xen_elfnote_type type;
const char *name;
char guest_ver[16];
char xen_ver[16];
char loader[16];
- int pae; /* some kind of enum apparently */
+ enum xen_pae_type pae;
bool bsd_symtab;
uint64_t virt_base;
uint64_t virt_entry;
struct vnuma_info *vnuma;
};
-struct domain_setup_info
-{
- /* Initialised by caller. */
- unsigned long image_addr;
- unsigned long image_len;
- /* Initialised by loader: Public. */
- unsigned long v_start;
- unsigned long v_end;
- unsigned long v_kernstart;
- unsigned long v_kernend;
- unsigned long v_kernentry;
-#define PAEKERN_no 0
-#define PAEKERN_yes 1
-#define PAEKERN_extended_cr3 2
-#define PAEKERN_bimodal 3
- unsigned int pae_kernel;
- /* Initialised by loader: Private. */
- unsigned long elf_paddr_offset;
- unsigned int load_symtab;
- unsigned long symtab_addr;
- unsigned long symtab_len;
-};
-
/* Protect updates/reads (resp.) of domain_list and domain_hash. */
extern spinlock_t domlist_update_lock;
extern rcu_read_lock_t domlist_read_lock;