Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144447711
D33433.id99988.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D33433.id99988.diff
View Options
diff --git a/usr.sbin/bhyve/bhyve_config.5 b/usr.sbin/bhyve/bhyve_config.5
--- a/usr.sbin/bhyve/bhyve_config.5
+++ b/usr.sbin/bhyve/bhyve_config.5
@@ -436,12 +436,17 @@
.Va lpc :
.Bl -column "pc-testdev" "Format" "Default"
.It Sy Name Ta Sy Format Ta Sy Default Ta Sy Description
-.It Va bootrom Ta path Ta Ta
+.It Va bootrom.romfile Ta path Ta Ta
Path to a boot ROM.
The contents of this file are copied into the guest's
memory ending just before the 4GB physical address.
If a boot ROM is present, a firmware interface device is
also enabled for use by the boot ROM.
+.It Va bootrom.varfile Ta path Ta Ta
+Path to boot VARS.
+The contents of this file are copied beneath the boot
+ROM. Firmware can write to it to save variables. All
+variables will be persistent even on reboots of the guest.
.It Va com1 Ta node Ta Ta
Settings for the COM1 serial port device.
.It Va com2 Ta node Ta Ta
diff --git a/usr.sbin/bhyve/bootrom.h b/usr.sbin/bhyve/bootrom.h
--- a/usr.sbin/bhyve/bootrom.h
+++ b/usr.sbin/bhyve/bootrom.h
@@ -36,6 +36,8 @@
#include <stdint.h>
#include <limits.h>
+#include "config.h"
+
struct vmctx;
void init_bootrom(struct vmctx *ctx);
@@ -45,6 +47,6 @@
};
int bootrom_alloc(struct vmctx *ctx, size_t len, int prot, int flags,
char **region_out, uint64_t *gpa_out);
-int bootrom_loadrom(struct vmctx *ctx, const char *romfile);
+int bootrom_loadrom(struct vmctx *ctx, const nvlist_t *const nvl);
#endif
diff --git a/usr.sbin/bhyve/bootrom.c b/usr.sbin/bhyve/bootrom.c
--- a/usr.sbin/bhyve/bootrom.c
+++ b/usr.sbin/bhyve/bootrom.c
@@ -191,19 +191,23 @@
}
int
-bootrom_loadrom(struct vmctx *ctx, const char *romfile)
+bootrom_loadrom(struct vmctx *ctx, const nvlist_t *const nvl)
{
struct stat sbuf;
ssize_t rlen;
off_t rom_size, var_size, total_size;
- char *ptr, *varfile;
+ char *ptr;
int fd, varfd, i, rv;
rv = -1;
varfd = -1;
- varfile = strdup(romfile);
- romfile = strsep(&varfile, ",");
+ const char *romfile = get_config_value_node(nvl, "romfile");
+ const char *varfile = get_config_value_node(nvl, "varfile");
+
+ if (romfile == NULL) {
+ return (-1);
+ }
fd = open(romfile, O_RDONLY);
if (fd < 0) {
diff --git a/usr.sbin/bhyve/pci_lpc.c b/usr.sbin/bhyve/pci_lpc.c
--- a/usr.sbin/bhyve/pci_lpc.c
+++ b/usr.sbin/bhyve/pci_lpc.c
@@ -101,7 +101,11 @@
lpcdev = strsep(&str, ",");
if (lpcdev != NULL) {
if (strcasecmp(lpcdev, "bootrom") == 0) {
- set_config_value("lpc.bootrom", str);
+ nvlist_t *const nvl = create_config_node("lpc.bootrom");
+ const char *const romfile = strsep(&str, ",");
+ const char *const varfile = strsep(&str, ",");
+ set_config_value_node(nvl, "romfile", romfile);
+ set_config_value_node(nvl, "varfile", varfile);
error = 0;
goto done;
}
@@ -144,8 +148,7 @@
const char *
lpc_bootrom(void)
{
-
- return (get_config_value("lpc.bootrom"));
+ return (get_config_value("lpc.bootrom.romfile"));
}
static void
@@ -204,13 +207,13 @@
{
struct lpc_uart_softc *sc;
struct inout_port iop;
- const char *backend, *name, *romfile;
+ const char *backend, *name;
char *node_name;
int unit, error;
- romfile = get_config_value("lpc.bootrom");
- if (romfile != NULL) {
- error = bootrom_loadrom(ctx, romfile);
+ const nvlist_t *const nvl_bootrom = find_config_node("lpc.bootrom");
+ if (nvl_bootrom != NULL) {
+ error = bootrom_loadrom(ctx, nvl_bootrom);
if (error)
return (error);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Feb 9, 12:09 PM (4 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28576678
Default Alt Text
D33433.id99988.diff (3 KB)
Attached To
Mode
D33433: bhyve: add varfile option to nvlist of lpc device
Attached
Detach File
Event Timeline
Log In to Comment