bhyve: add basic TPM device

Add an empty TPM device struct which will be used for TPM emulation in
subsequent commits.

Reviewed by:		markj
MFC after:		1 week
Sponsored by:		Beckhoff Automation GmbH & Co. KG
Differential Revision:	https://reviews.freebsd.org/D40452
This commit is contained in:
Corvin Köhne 2023-05-15 13:00:06 +02:00
parent 4e46ab0ebe
commit d5edf13d01
No known key found for this signature in database
GPG key ID: D854DA56315E026A
3 changed files with 87 additions and 0 deletions

View file

@ -72,6 +72,7 @@ SRCS= \
smbiostbl.c \
sockstream.c \
task_switch.c \
tpm_device.c \
uart_emul.c \
usb_emul.c \
usb_mouse.c \

View file

@ -0,0 +1,68 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2023 Beckhoff Automation GmbH & Co. KG
* Author: Corvin Köhne <corvink@FreeBSD.org>
*/
#include <sys/types.h>
#include <err.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <vmmapi.h>
#include "config.h"
#include "tpm_device.h"
struct tpm_device {
struct vmctx *vm_ctx;
};
void
tpm_device_destroy(struct tpm_device *const dev)
{
if (dev == NULL)
return;
free(dev);
}
int
tpm_device_create(struct tpm_device **const new_dev, struct vmctx *const vm_ctx,
nvlist_t *const nvl)
{
struct tpm_device *dev = NULL;
const char *value;
int error;
if (new_dev == NULL || vm_ctx == NULL) {
error = EINVAL;
goto err_out;
}
value = get_config_value_node(nvl, "version");
if (value == NULL || strcmp(value, "2.0")) {
warnx("%s: unsupported tpm version %s", __func__, value);
error = EINVAL;
goto err_out;
}
dev = calloc(1, sizeof(*dev));
if (dev == NULL) {
error = ENOMEM;
goto err_out;
}
dev->vm_ctx = vm_ctx;
*new_dev = dev;
return (0);
err_out:
tpm_device_destroy(dev);
return (error);
}

View file

@ -0,0 +1,18 @@
/*-
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2023 Beckhoff Automation GmbH & Co. KG
* Author: Corvin Köhne <corvink@FreeBSD.org>
*/
#pragma once
#include <vmmapi.h>
#include "config.h"
struct tpm_device;
int tpm_device_create(struct tpm_device **new_dev, struct vmctx *vm_ctx,
nvlist_t *nvl);
void tpm_device_destroy(struct tpm_device *dev);