Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F135458551
D36450.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D36450.id.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
@@ -170,6 +170,10 @@
.It Va virtio_msix Ta bool Ta true Ta
Use MSI-X interrupts for PCI VirtIO devices.
If set to false, MSI interrupts are used instead.
+.It Va virtio_subvendor Ta string Ta Ta
+Specify which subvendor id should be used for VirtIO devices.
+At the moment, either unset or "oracle" are supported as values.
+The "oracle" option is required for Windows VMs with secure boot.
.It Va config.dump Ta bool Ta false Ta
If this value is set to true after
.Xr bhyve 8
diff --git a/usr.sbin/bhyve/pci_virtio_9p.c b/usr.sbin/bhyve/pci_virtio_9p.c
--- a/usr.sbin/bhyve/pci_virtio_9p.c
+++ b/usr.sbin/bhyve/pci_virtio_9p.c
@@ -334,7 +334,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_STORAGE);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_9P);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
if (vi_intr_init(&sc->vsc_vs, 1, fbsdrun_virtio_msix()))
return (1);
diff --git a/usr.sbin/bhyve/pci_virtio_block.c b/usr.sbin/bhyve/pci_virtio_block.c
--- a/usr.sbin/bhyve/pci_virtio_block.c
+++ b/usr.sbin/bhyve/pci_virtio_block.c
@@ -557,7 +557,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_STORAGE);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_BLOCK);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
if (vi_intr_init(&sc->vbsc_vs, 1, fbsdrun_virtio_msix())) {
blockif_close(sc->bc);
diff --git a/usr.sbin/bhyve/pci_virtio_console.c b/usr.sbin/bhyve/pci_virtio_console.c
--- a/usr.sbin/bhyve/pci_virtio_console.c
+++ b/usr.sbin/bhyve/pci_virtio_console.c
@@ -713,7 +713,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_SIMPLECOMM);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_CONSOLE);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
if (vi_intr_init(&sc->vsc_vs, 1, fbsdrun_virtio_msix()))
return (1);
diff --git a/usr.sbin/bhyve/pci_virtio_net.c b/usr.sbin/bhyve/pci_virtio_net.c
--- a/usr.sbin/bhyve/pci_virtio_net.c
+++ b/usr.sbin/bhyve/pci_virtio_net.c
@@ -639,7 +639,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_NETWORK);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_NETWORK);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
/* Link is always up. */
sc->vsc_config.status = 1;
diff --git a/usr.sbin/bhyve/pci_virtio_rnd.c b/usr.sbin/bhyve/pci_virtio_rnd.c
--- a/usr.sbin/bhyve/pci_virtio_rnd.c
+++ b/usr.sbin/bhyve/pci_virtio_rnd.c
@@ -58,6 +58,7 @@
#include <sysexits.h>
#include "bhyverun.h"
+#include "config.h"
#include "debug.h"
#include "pci_emul.h"
#include "virtio.h"
@@ -192,7 +193,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_CRYPTO);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_ENTROPY);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
if (vi_intr_init(&sc->vrsc_vs, 1, fbsdrun_virtio_msix()))
return (1);
diff --git a/usr.sbin/bhyve/pci_virtio_scsi.c b/usr.sbin/bhyve/pci_virtio_scsi.c
--- a/usr.sbin/bhyve/pci_virtio_scsi.c
+++ b/usr.sbin/bhyve/pci_virtio_scsi.c
@@ -731,7 +731,12 @@
pci_set_cfgdata16(pi, PCIR_VENDOR, VIRTIO_VENDOR);
pci_set_cfgdata8(pi, PCIR_CLASS, PCIC_STORAGE);
pci_set_cfgdata16(pi, PCIR_SUBDEV_0, VIRTIO_ID_SCSI);
- pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ const char *subvendor = get_config_value("virtio_subvendor");
+ if (subvendor == NULL || strcmp(subvendor, "oracle") != 0) {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR);
+ } else {
+ pci_set_cfgdata16(pi, PCIR_SUBVEND_0, VIRTIO_VENDOR_ORACLE);
+ }
if (vi_intr_init(&sc->vss_vs, 1, fbsdrun_virtio_msix()))
return (1);
diff --git a/usr.sbin/bhyve/virtio.h b/usr.sbin/bhyve/virtio.h
--- a/usr.sbin/bhyve/virtio.h
+++ b/usr.sbin/bhyve/virtio.h
@@ -165,6 +165,7 @@
* PCI vendor/device IDs
*/
#define VIRTIO_VENDOR 0x1AF4
+#define VIRTIO_VENDOR_ORACLE 0x108E
#define VIRTIO_DEV_NET 0x1000
#define VIRTIO_DEV_BLOCK 0x1001
#define VIRTIO_DEV_CONSOLE 0x1003
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 11, 1:05 AM (2 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25131256
Default Alt Text
D36450.id.diff (5 KB)
Attached To
Mode
D36450: bhyve/virtio: add config option to change the subvendor
Attached
Detach File
Event Timeline
Log In to Comment