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