socsvn commit: r289539 - in soc2015/mihai/bhyve-on-arm-head: lib/libvmmapiarm usr.sbin/bhyvearm usr.sbin/bhyveloadarm
mihai at FreeBSD.org
mihai at FreeBSD.org
Mon Aug 10 18:47:25 UTC 2015
Author: mihai
Date: Mon Aug 10 18:47:22 2015
New Revision: 289539
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=289539
Log:
usr.sbin: bhyve*: attach a vgic to a VM
Modified:
soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c
soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h
soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c
soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c
Modified: soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c Mon Aug 10 18:46:26 2015 (r289538)
+++ soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.c Mon Aug 10 18:47:22 2015 (r289539)
@@ -320,12 +320,22 @@
return (NULL);
}
-/*
- * From Intel Vol 3a:
- * Table 9-1. IA-32 Processor States Following Power-up, Reset or INIT
- */
int
vcpu_reset(struct vmctx *vmctx, int vcpu)
{
return (ENXIO);
}
+
+int
+vm_attach_vgic(struct vmctx *ctx, uint64_t distributor_paddr, uint64_t cpu_int_paddr)
+{
+ struct vm_attach_vgic vav;
+
+ bzero(&vav, sizeof(vav));
+ vav.distributor_paddr = distributor_paddr;
+ vav.cpu_int_paddr = cpu_int_paddr;
+
+ return (ioctl(ctx->fd, VM_ATTACH_VGIC, &vav));
+}
+
+
Modified: soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h Mon Aug 10 18:46:26 2015 (r289538)
+++ soc2015/mihai/bhyve-on-arm-head/lib/libvmmapiarm/vmmapi.h Mon Aug 10 18:47:22 2015 (r289539)
@@ -68,4 +68,7 @@
/* Reset vcpu register state */
int vcpu_reset(struct vmctx *ctx, int vcpu);
+
+int vm_attach_vgic(struct vmctx *ctx, uint64_t distributor_paddr, uint64_t cpu_int_paddr);
+
#endif /* _VMMAPI_H_ */
Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c Mon Aug 10 18:46:26 2015 (r289538)
+++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c Mon Aug 10 18:47:22 2015 (r289539)
@@ -299,12 +299,10 @@
int max_vcpus;
struct vmctx *ctx;
uint64_t pc;
- size_t memsize;
bvmcons = 0;
progname = basename(argv[0]);
guest_ncpus = 1;
- memsize = 256 * MB;
while ((c = getopt(argc, argv, "abehAHIPp:g:c:s:S:m:")) != -1) {
switch (c) {
Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c
==============================================================================
--- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c Mon Aug 10 18:46:26 2015 (r289538)
+++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c Mon Aug 10 18:47:22 2015 (r289539)
@@ -79,7 +79,7 @@
fprintf(stderr,
"usage: %s [-k <kernel-image>] -l <kernel-load-address>, -b <memory-base-address>\n"
- " %*s [-m mem-size] <vmname>\n",
+ " %*s [-m mem-size] [-p periphbase] <vmname>\n",
progname,
(int)strlen(progname), "");
exit(1);
@@ -92,6 +92,7 @@
int opt, error;
int kernel_image_fd;
uint64_t kernel_load_address, memory_base_address;
+ uint64_t periphbase;
char kernel_image_name[KERNEL_IMAGE_NAME_LEN];
struct stat st;
void *addr;
@@ -101,9 +102,10 @@
mem_size = 128 * MB;
kernel_load_address = 0xc0000000;
memory_base_address = 0xc0000000;
- strncpy(kernel_image_name, "wfi.out", KERNEL_IMAGE_NAME_LEN);
+ periphbase = 0x2c000000;
+ strncpy(kernel_image_name, "kernel.bin", KERNEL_IMAGE_NAME_LEN);
- while ((opt = getopt(argc, argv, "k:l:b:m:")) != -1) {
+ while ((opt = getopt(argc, argv, "k:l:b:m:p")) != -1) {
switch (opt) {
case 'k':
strncpy(kernel_image_name, optarg, KERNEL_IMAGE_NAME_LEN);
@@ -117,6 +119,8 @@
case 'm':
mem_size = strtoul(optarg, NULL, 0) * MB;
break;
+ case 'p':
+ periphbase = strtoul(optarg, NULL, 0);
case '?':
usage();
}
@@ -171,6 +175,9 @@
exit(1);
}
+ error = vm_attach_vgic(ctx, periphbase + 0x1000, periphbase + 0x2000);
+ if (error) {
+ }
munmap(addr, st.st_size);
guest_setreg(VM_REG_GUEST_PC, kernel_load_address);
More information about the svn-soc-all
mailing list