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