1
2
3
4
5
6
7
8
9
10
11
12#ifndef _ASM_ACPI_H
13#define _ASM_ACPI_H
14
15#include <linux/memblock.h>
16#include <linux/psci.h>
17
18#include <asm/cputype.h>
19#include <asm/smp_plat.h>
20#include <asm/tlbflush.h>
21
22
23#define ACPI_MADT_GICC_LENGTH \
24 (acpi_gbl_FADT.header.revision < 6 ? 76 : 80)
25
26#define BAD_MADT_GICC_ENTRY(entry, end) \
27 (!(entry) || (entry)->header.length != ACPI_MADT_GICC_LENGTH || \
28 (unsigned long)(entry) + ACPI_MADT_GICC_LENGTH > (end))
29
30
31#ifdef CONFIG_ACPI
32
33static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys,
34 acpi_size size)
35{
36
37
38
39
40 if (!memblock_is_memory(phys))
41 return ioremap(phys, size);
42
43 return ioremap_cache(phys, size);
44}
45#define acpi_os_ioremap acpi_os_ioremap
46
47typedef u64 phys_cpuid_t;
48#define PHYS_CPUID_INVALID INVALID_HWID
49
50#define acpi_strict 1
51extern int acpi_disabled;
52extern int acpi_noirq;
53extern int acpi_pci_disabled;
54
55static inline void disable_acpi(void)
56{
57 acpi_disabled = 1;
58 acpi_pci_disabled = 1;
59 acpi_noirq = 1;
60}
61
62static inline void enable_acpi(void)
63{
64 acpi_disabled = 0;
65 acpi_pci_disabled = 0;
66 acpi_noirq = 0;
67}
68
69
70
71
72
73
74#define cpu_physical_id(cpu) cpu_logical_map(cpu)
75
76
77
78
79
80
81
82
83static inline bool acpi_has_cpu_in_madt(void)
84{
85 return true;
86}
87
88struct acpi_madt_generic_interrupt *acpi_cpu_get_madt_gicc(int cpu);
89
90static inline void arch_fix_phys_package_id(int num, u32 slot) { }
91void __init acpi_init_cpus(void);
92
93#else
94static inline void acpi_init_cpus(void) { }
95#endif
96
97#ifdef CONFIG_ARM64_ACPI_PARKING_PROTOCOL
98bool acpi_parking_protocol_valid(int cpu);
99void __init
100acpi_set_mailbox_entry(int cpu, struct acpi_madt_generic_interrupt *processor);
101#else
102static inline bool acpi_parking_protocol_valid(int cpu) { return false; }
103static inline void
104acpi_set_mailbox_entry(int cpu, struct acpi_madt_generic_interrupt *processor)
105{}
106#endif
107
108static inline const char *acpi_get_enable_method(int cpu)
109{
110 if (acpi_psci_present())
111 return "psci";
112
113 if (acpi_parking_protocol_valid(cpu))
114 return "parking-protocol";
115
116 return NULL;
117}
118
119#ifdef CONFIG_ACPI_APEI
120
121
122
123
124
125
126
127#define acpi_disable_cmcff 1
128pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr);
129
130
131
132
133
134
135
136
137static inline void arch_apei_flush_tlb_one(unsigned long addr)
138{
139 flush_tlb_kernel_range(addr, addr + PAGE_SIZE);
140}
141#endif
142
143#ifdef CONFIG_ACPI_NUMA
144int arm64_acpi_numa_init(void);
145int acpi_numa_get_nid(unsigned int cpu, u64 hwid);
146#else
147static inline int arm64_acpi_numa_init(void) { return -ENOSYS; }
148static inline int acpi_numa_get_nid(unsigned int cpu, u64 hwid) { return NUMA_NO_NODE; }
149#endif
150
151#define ACPI_TABLE_UPGRADE_MAX_PHYS MEMBLOCK_ALLOC_ACCESSIBLE
152
153#endif
154