// XXX: figure out how to do this arch-independent(?) -SG, 2014-06-16
#define VREGION_FLAGS_LARGE 0x40 // Map large pages, if possible
#define VREGION_FLAGS_HUGE 0x80 // Map huge pages, if possible
-#define VREGION_FLAGS_MASK 0xff // Mask of all individual VREGION_FLAGS
+#define VREGION_FLAGS_WRITE_COMBINING 0x100 // Write-combining caching
+#define VREGION_FLAGS_MASK 0x1ff // Mask of all individual VREGION_FLAGS
+ #define VREGION_FLAGS_VTD_SNOOP 0x800 // Snooping (for pages) allowed by VT-d
#define VREGION_FLAGS_READ_WRITE \
- (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE)
+ (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE | VREGION_FLAGS_VTD_SNOOP)
#define VREGION_FLAGS_READ_EXECUTE \
- (VREGION_FLAGS_READ | VREGION_FLAGS_EXECUTE)
+ (VREGION_FLAGS_READ | VREGION_FLAGS_EXECUTE | VREGION_FLAGS_VTD_SNOOP)
#define VREGION_FLAGS_READ_WRITE_NOCACHE \
- (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE | VREGION_FLAGS_NOCACHE)
+ (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE | VREGION_FLAGS_NOCACHE | VREGION_FLAGS_VTD_SNOOP)
#define VREGION_FLAGS_READ_WRITE_MPB \
- (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE | VREGION_FLAGS_MPB)
+ (VREGION_FLAGS_READ | VREGION_FLAGS_WRITE | VREGION_FLAGS_MPB | VREGION_FLAGS_VTD_SNOOP)
struct vspace;
struct memobj;
DispatcherCmd_PerfMon, ///< Performance monitoring
DispatcherCmd_SetupGuest, ///< Set up the DCB of a guest domain
DispatcherCmd_DumpPTables, ///< Dump hw page tables of dispatcher
+ DispatcherCmd_DumpCapabilities ///< Dump capabilities of dispatcher
+ DispatcherCmd_Vmread, ///< Execute vmread on the current and active VMCS
+ DispatcherCmd_Vmwrite, ///< Execute vmwrite on the current and active VMCS
+ DispatcherCmd_Vmptrld, ///< Make VMCS clear and inactive
+ DispatcherCmd_Vmclear ///< Make VMCS current and active
};
/**
[DispatcherCmd_SetupGuest] = handle_dispatcher_setup_guest,
#endif
[DispatcherCmd_DumpPTables] = dispatcher_dump_ptables,
+ [DispatcherCmd_DumpCapabilities] = dispatcher_dump_capabilities
+ [DispatcherCmd_Vmread] = handle_vmread,
+ [DispatcherCmd_Vmwrite] = handle_vmwrite,
+ [DispatcherCmd_Vmptrld] = handle_vmptrld,
+ [DispatcherCmd_Vmclear] = handle_vmclear,
},
[ObjType_KernelControlBlock] = {
[FrameCmd_Identify] = handle_kcb_identify,
tmp.large.attr_index = bitmap & X86_64_PTABLE_ATTR_INDEX ? 1 : 0;
tmp.large.execute_disable = bitmap & X86_64_PTABLE_EXECUTE_DISABLE ? 1 : 0;
tmp.large.always1 = 1;
+ tmp.large.vtd_snoop = bitmap & X86_64_VTD_PAGE_SNOOP ? 1 : 0;
tmp.large.base_addr = base >> 21;
-
+
*entry = tmp;
}
m.add_module("%s/sbin/routing_setup" %a, ["boot"])
m.add_module("%s/sbin/corectrl" % a, ["auto"])
+ is_babybel = 0
+ if re.search("babybel[1-4]|xeon_phi_[1-4]", machine.name) :
+ is_babybel = 1
+
if machine.name == "sbrinz1" or machine.name == "sbrinz2" \
or machine.name == "tomme1" or machine.name == "tomme2" \
- or machine.name == "babybel1" or machine.name == "babybel2" \
- or machine.name == "babybel3" :
+ or is_babybel == 1 :
# PCI allocation broken, use BIOS plan
m.add_module("%s/sbin/pci" % a, ["auto",
- "skb_bridge_program=bridge_bios"])
+ "skb_bridge_program=bridge_bios"] + machine.get_pci_args())
else:
- m.add_module("%s/sbin/pci" % a, ["auto"])
+ m.add_module("%s/sbin/pci" % a, ["auto"] + machine.get_pci_args())
+ if is_babybel :
+ m.add_module("%s/sbin/kaluga" % a, ["boot", "eth0=4:0:0"])
+ else :
+ m.add_module("%s/sbin/kaluga" % a, ["boot"])
+
if a == "armv7":
if machine.get_ncores() == 2:
m.add_module("corectrl", ["boot", "1"])
}
*/
- get_cap_response_cont(b, SYS_ERR_OK, cap, type);
+ get_cap_response_cont(b, SYS_ERR_OK, cap, type, bar_nr);
}
}
-
- static void reregister_interrupt_handler(struct pci_binding *b,
- uint32_t class_code, uint32_t sub_class,
- uint32_t prog_if, uint32_t vendor_id,
- uint32_t device_id,
- uint32_t bus, uint32_t dev, uint32_t fun,
- coreid_t coreid, uint32_t vector)
- {
- errval_t err;
- err = device_reregister_interrupt(coreid, vector,
- class_code, sub_class, prog_if, vendor_id, device_id,
- &bus, &dev, &fun);
- err = b->tx_vtbl.reregister_interrupt_response(b, NOP_CONT, err);
- assert(err_is_ok(err));
- }
/*
static void get_vbe_bios_cap(struct pci_binding *b)
{