mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
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:
parent
4e46ab0ebe
commit
d5edf13d01
|
@ -72,6 +72,7 @@ SRCS= \
|
||||||
smbiostbl.c \
|
smbiostbl.c \
|
||||||
sockstream.c \
|
sockstream.c \
|
||||||
task_switch.c \
|
task_switch.c \
|
||||||
|
tpm_device.c \
|
||||||
uart_emul.c \
|
uart_emul.c \
|
||||||
usb_emul.c \
|
usb_emul.c \
|
||||||
usb_mouse.c \
|
usb_mouse.c \
|
||||||
|
|
68
usr.sbin/bhyve/tpm_device.c
Normal file
68
usr.sbin/bhyve/tpm_device.c
Normal 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);
|
||||||
|
}
|
18
usr.sbin/bhyve/tpm_device.h
Normal file
18
usr.sbin/bhyve/tpm_device.h
Normal 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);
|
Loading…
Reference in a new issue