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