xref: /illumos-gate/usr/src/cmd/bhyve/acpi_device.h (revision 32640292339b07090f10ce34d455f98711077343)
1*32640292SAndy Fiddaman /*-
2*32640292SAndy Fiddaman  * SPDX-License-Identifier: BSD-2-Clause
3*32640292SAndy Fiddaman  *
4*32640292SAndy Fiddaman  * Copyright (c) 2021 Beckhoff Automation GmbH & Co. KG
5*32640292SAndy Fiddaman  * Author: Corvin Köhne <c.koehne@beckhoff.com>
6*32640292SAndy Fiddaman  */
7*32640292SAndy Fiddaman 
8*32640292SAndy Fiddaman #pragma once
9*32640292SAndy Fiddaman 
10*32640292SAndy Fiddaman #pragma GCC diagnostic push
11*32640292SAndy Fiddaman #pragma GCC diagnostic ignored "-Wunused-parameter"
12*32640292SAndy Fiddaman #include <contrib/dev/acpica/include/acpi.h>
13*32640292SAndy Fiddaman #pragma GCC diagnostic pop
14*32640292SAndy Fiddaman 
15*32640292SAndy Fiddaman struct vmctx;
16*32640292SAndy Fiddaman 
17*32640292SAndy Fiddaman struct acpi_device;
18*32640292SAndy Fiddaman 
19*32640292SAndy Fiddaman /**
20*32640292SAndy Fiddaman  * Device specific information and emulation.
21*32640292SAndy Fiddaman  *
22*32640292SAndy Fiddaman  * @param name        Used as device name in the DSDT.
23*32640292SAndy Fiddaman  * @param hid         Used as _HID in the DSDT.
24*32640292SAndy Fiddaman  * @param build_table Called to build a device specific ACPI table like the TPM2
25*32640292SAndy Fiddaman  *                    table.
26*32640292SAndy Fiddaman  * @param write_dsdt  Called to append the DSDT with device specific
27*32640292SAndy Fiddaman  *                    information.
28*32640292SAndy Fiddaman  */
29*32640292SAndy Fiddaman struct acpi_device_emul {
30*32640292SAndy Fiddaman 	const char *name;
31*32640292SAndy Fiddaman 	const char *hid;
32*32640292SAndy Fiddaman 
33*32640292SAndy Fiddaman 	int (*build_table)(const struct acpi_device *dev);
34*32640292SAndy Fiddaman 	int (*write_dsdt)(const struct acpi_device *dev);
35*32640292SAndy Fiddaman };
36*32640292SAndy Fiddaman 
37*32640292SAndy Fiddaman /**
38*32640292SAndy Fiddaman  * Creates an ACPI device.
39*32640292SAndy Fiddaman  *
40*32640292SAndy Fiddaman  * @param[out] new_dev Returns the newly create ACPI device.
41*32640292SAndy Fiddaman  * @param[in]  softc   Pointer to the software context of the ACPI device.
42*32640292SAndy Fiddaman  * @param[in]  vm_ctx  VM context the ACPI device is created in.
43*32640292SAndy Fiddaman  * @param[in]  emul    Device emulation struct. It contains some information
44*32640292SAndy Fiddaman  *                     like the name of the ACPI device and some device specific
45*32640292SAndy Fiddaman  *                     functions.
46*32640292SAndy Fiddaman  */
47*32640292SAndy Fiddaman int acpi_device_create(struct acpi_device **new_dev, void *softc,
48*32640292SAndy Fiddaman     struct vmctx *vm_ctx, const struct acpi_device_emul *emul);
49*32640292SAndy Fiddaman void acpi_device_destroy(struct acpi_device *dev);
50*32640292SAndy Fiddaman 
51*32640292SAndy Fiddaman int acpi_device_add_res_fixed_ioport(struct acpi_device *dev, UINT16 port,
52*32640292SAndy Fiddaman     UINT8 length);
53*32640292SAndy Fiddaman int acpi_device_add_res_fixed_memory32(struct acpi_device *dev,
54*32640292SAndy Fiddaman     UINT8 write_protected, UINT32 address, UINT32 length);
55*32640292SAndy Fiddaman 
56*32640292SAndy Fiddaman void *acpi_device_get_softc(const struct acpi_device *dev);
57*32640292SAndy Fiddaman 
58*32640292SAndy Fiddaman int acpi_device_build_table(const struct acpi_device *dev);
59*32640292SAndy Fiddaman int acpi_device_write_dsdt(const struct acpi_device *dev);
60