xref: /freebsd/usr.sbin/bhyve/acpi_device.h (revision 0926566f6f9cc1dba0d7b5d7e0b45484dd901b20)
11231f047SCorvin Köhne /*-
21231f047SCorvin Köhne  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
31231f047SCorvin Köhne  *
41231f047SCorvin Köhne  * Copyright (c) 2021 Beckhoff Automation GmbH & Co. KG
51231f047SCorvin Köhne  * Author: Corvin Köhne <c.koehne@beckhoff.com>
61231f047SCorvin Köhne  */
71231f047SCorvin Köhne 
81231f047SCorvin Köhne #pragma once
91231f047SCorvin Köhne 
101231f047SCorvin Köhne #pragma GCC diagnostic push
111231f047SCorvin Köhne #pragma GCC diagnostic ignored "-Wunused-parameter"
121231f047SCorvin Köhne #include <contrib/dev/acpica/include/acpi.h>
131231f047SCorvin Köhne #pragma GCC diagnostic pop
141231f047SCorvin Köhne 
151231f047SCorvin Köhne struct vmctx;
161231f047SCorvin Köhne 
171231f047SCorvin Köhne struct acpi_device;
181231f047SCorvin Köhne 
19*0926566fSCorvin Köhne /**
20*0926566fSCorvin Köhne  * Device specific information and emulation.
21*0926566fSCorvin Köhne  *
22*0926566fSCorvin Köhne  * @param name        Used as device name in the DSDT.
23*0926566fSCorvin Köhne  * @param hid         Used as _HID in the DSDT.
24*0926566fSCorvin Köhne  * @param build_table Called to build a device specific ACPI table like the TPM2
25*0926566fSCorvin Köhne  *                    table.
26*0926566fSCorvin Köhne  */
27acd0088cSCorvin Köhne struct acpi_device_emul {
28acd0088cSCorvin Köhne 	const char *name;
29acd0088cSCorvin Köhne 	const char *hid;
30*0926566fSCorvin Köhne 
31*0926566fSCorvin Köhne 	int (*build_table)(const struct acpi_device *dev);
32acd0088cSCorvin Köhne };
33acd0088cSCorvin Köhne 
341231f047SCorvin Köhne /**
351231f047SCorvin Köhne  * Creates an ACPI device.
361231f047SCorvin Köhne  *
371231f047SCorvin Köhne  * @param[out] new_dev Returns the newly create ACPI device.
381231f047SCorvin Köhne  * @param[in]  vm_ctx  VM context the ACPI device is created in.
39acd0088cSCorvin Köhne  * @param[in]  emul    Device emulation struct. It contains some information
40acd0088cSCorvin Köhne  *                     like the name of the ACPI device and some device specific
41acd0088cSCorvin Köhne  *                     functions.
421231f047SCorvin Köhne  */
4340468990SCorvin Köhne int acpi_device_create(struct acpi_device **new_dev, struct vmctx *vm_ctx,
44acd0088cSCorvin Köhne     const struct acpi_device_emul *emul);
4540468990SCorvin Köhne void acpi_device_destroy(struct acpi_device *dev);
4613a1df5bSCorvin Köhne 
4740468990SCorvin Köhne int acpi_device_add_res_fixed_ioport(struct acpi_device *dev, UINT16 port,
4840468990SCorvin Köhne     UINT8 length);
4940468990SCorvin Köhne int acpi_device_add_res_fixed_memory32(struct acpi_device *dev,
5040468990SCorvin Köhne     UINT8 write_protected, UINT32 address, UINT32 length);
51682a522dSCorvin Köhne 
52*0926566fSCorvin Köhne int acpi_device_build_table(const struct acpi_device *dev);
5340468990SCorvin Köhne void acpi_device_write_dsdt(const struct acpi_device *dev);
54