1 /* SPDX-License-Identifier: LGPL-2.1-only */
2 /******************************************************************************
3  * libacpi.h
4  *
5  * libacpi interfaces
6  *
7  * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
8  */
9 
10 
11 #ifndef __LIBACPI_H__
12 #define __LIBACPI_H__
13 
14 #define ACPI_HAS_COM1              (1<<0)
15 #define ACPI_HAS_COM2              (1<<1)
16 #define ACPI_HAS_LPT1              (1<<2)
17 #define ACPI_HAS_HPET              (1<<3)
18 #define ACPI_HAS_SSDT_PM           (1<<4)
19 #define ACPI_HAS_SSDT_S3           (1<<5)
20 #define ACPI_HAS_SSDT_S4           (1<<6)
21 #define ACPI_HAS_TPM               (1<<7)
22 #define ACPI_HAS_IOAPIC            (1<<8)
23 #define ACPI_HAS_WAET              (1<<9)
24 #define ACPI_HAS_PMTIMER           (1<<10)
25 #define ACPI_HAS_BUTTONS           (1<<11)
26 #define ACPI_HAS_VGA               (1<<12)
27 #define ACPI_HAS_8042              (1<<13)
28 #define ACPI_HAS_CMOS_RTC          (1<<14)
29 #define ACPI_HAS_SSDT_LAPTOP_SLATE (1<<15)
30 
31 struct xen_vmemrange;
32 struct acpi_numa {
33     uint32_t nr_vmemranges;
34     uint32_t nr_vnodes;
35     const unsigned int *vcpu_to_vnode;
36     const unsigned int *vdistance;
37     const struct xen_vmemrange *vmemrange;
38 };
39 
40 struct acpi_ctxt {
41     struct acpi_mem_ops {
42         void *(*alloc)(struct acpi_ctxt *ctxt, uint32_t size, uint32_t align);
43         void (*free)(struct acpi_ctxt *ctxt, void *v, uint32_t size);
44         unsigned long (*v2p)(struct acpi_ctxt *ctxt, void *v);
45     } mem_ops;
46 };
47 
48 struct acpi_config {
49     const unsigned char *dsdt_anycpu;
50     unsigned int dsdt_anycpu_len;
51     const unsigned char *dsdt_15cpu;
52     unsigned int dsdt_15cpu_len;
53 
54     /* PCI I/O hole */
55     uint32_t pci_start, pci_len;
56     uint64_t pci_hi_start, pci_hi_len;
57 
58     uint32_t table_flags;
59     uint8_t acpi_revision;
60     uint8_t tpm_version;
61 
62     uint64_t vm_gid[2];
63     unsigned long vm_gid_addr; /* OUT parameter */
64 
65     struct {
66         uint32_t addr;
67         uint32_t length;
68     } pt;
69 
70     struct acpi_numa numa;
71     const struct hvm_info_table *hvminfo;
72 
73     const uint16_t *tis_hdr;
74     const uint16_t *crb_id;
75 
76     /*
77      * Address where acpi_info should be placed.
78      * This must match the OperationRegion(BIOS, SystemMemory, ....)
79      * definition in the DSDT
80      */
81     unsigned long infop;
82 
83     /* RSDP address */
84     unsigned long rsdp;
85 
86     /* x86-specific parameters */
87     uint32_t (*lapic_id)(unsigned cpu);
88     uint32_t lapic_base_address;
89     uint32_t ioapic_base_address;
90     uint16_t pci_isa_irq_mask;
91     uint8_t ioapic_id;
92 };
93 
94 int acpi_build_tables(struct acpi_ctxt *ctxt, struct acpi_config *config);
95 
96 #endif /* __LIBACPI_H__ */
97 
98 /*
99  * Local variables:
100  * mode: C
101  * c-file-style: "BSD"
102  * c-basic-offset: 4
103  * tab-width: 4
104  * indent-tabs-mode: nil
105  * End:
106  */
107