xref: /freebsd/usr.sbin/bhyve/acpi_device.h (revision 4d846d260e2b9a3d4d0a701462568268cbfe7a5b)
11231f047SCorvin Köhne /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
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 
190926566fSCorvin Köhne /**
200926566fSCorvin Köhne  * Device specific information and emulation.
210926566fSCorvin Köhne  *
220926566fSCorvin Köhne  * @param name        Used as device name in the DSDT.
230926566fSCorvin Köhne  * @param hid         Used as _HID in the DSDT.
240926566fSCorvin Köhne  * @param build_table Called to build a device specific ACPI table like the TPM2
250926566fSCorvin Köhne  *                    table.
26e976464aSCorvin Köhne  * @param write_dsdt  Called to append the DSDT with device specific
27e976464aSCorvin Köhne  *                    information.
280926566fSCorvin Köhne  */
29acd0088cSCorvin Köhne struct acpi_device_emul {
30acd0088cSCorvin Köhne 	const char *name;
31acd0088cSCorvin Köhne 	const char *hid;
320926566fSCorvin Köhne 
330926566fSCorvin Köhne 	int (*build_table)(const struct acpi_device *dev);
34e976464aSCorvin Köhne 	int (*write_dsdt)(const struct acpi_device *dev);
35acd0088cSCorvin Köhne };
36acd0088cSCorvin Köhne 
371231f047SCorvin Köhne /**
381231f047SCorvin Köhne  * Creates an ACPI device.
391231f047SCorvin Köhne  *
401231f047SCorvin Köhne  * @param[out] new_dev Returns the newly create ACPI device.
41158adcedSCorvin Köhne  * @param[in]  softc   Pointer to the software context of the ACPI device.
421231f047SCorvin Köhne  * @param[in]  vm_ctx  VM context the ACPI device is created in.
43acd0088cSCorvin Köhne  * @param[in]  emul    Device emulation struct. It contains some information
44acd0088cSCorvin Köhne  *                     like the name of the ACPI device and some device specific
45acd0088cSCorvin Köhne  *                     functions.
461231f047SCorvin Köhne  */
47158adcedSCorvin Köhne int acpi_device_create(struct acpi_device **new_dev, void *softc,
48158adcedSCorvin Köhne     struct vmctx *vm_ctx, const struct acpi_device_emul *emul);
4940468990SCorvin Köhne void acpi_device_destroy(struct acpi_device *dev);
5013a1df5bSCorvin Köhne 
5140468990SCorvin Köhne int acpi_device_add_res_fixed_ioport(struct acpi_device *dev, UINT16 port,
5240468990SCorvin Köhne     UINT8 length);
5340468990SCorvin Köhne int acpi_device_add_res_fixed_memory32(struct acpi_device *dev,
5440468990SCorvin Köhne     UINT8 write_protected, UINT32 address, UINT32 length);
55682a522dSCorvin Köhne 
56158adcedSCorvin Köhne void *acpi_device_get_softc(const struct acpi_device *dev);
57158adcedSCorvin Köhne 
580926566fSCorvin Köhne int acpi_device_build_table(const struct acpi_device *dev);
59ab34ea47SCorvin Köhne int acpi_device_write_dsdt(const struct acpi_device *dev);
60