1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef _LINUX_ACPI_H
26#define _LINUX_ACPI_H
27
28
29#ifdef CONFIG_ACPI
30
31#ifndef _LINUX
32#define _LINUX
33#endif
34
35#include <linux/list.h>
36#include <linux/mod_devicetable.h>
37
38#include <acpi/acpi.h>
39#include <acpi/acpi_bus.h>
40#include <acpi/acpi_drivers.h>
41#include <acpi/acpi_numa.h>
42#include <asm/acpi.h>
43#include <linux/dmi.h>
44
45
46#ifdef CONFIG_ACPI
47
48enum acpi_irq_model_id {
49 ACPI_IRQ_MODEL_PIC = 0,
50 ACPI_IRQ_MODEL_IOAPIC,
51 ACPI_IRQ_MODEL_IOSAPIC,
52 ACPI_IRQ_MODEL_PLATFORM,
53 ACPI_IRQ_MODEL_COUNT
54};
55
56extern enum acpi_irq_model_id acpi_irq_model;
57
58enum acpi_interrupt_id {
59 ACPI_INTERRUPT_PMI = 1,
60 ACPI_INTERRUPT_INIT,
61 ACPI_INTERRUPT_CPEI,
62 ACPI_INTERRUPT_COUNT
63};
64
65#define ACPI_SPACE_MEM 0
66
67enum acpi_address_range_id {
68 ACPI_ADDRESS_RANGE_MEMORY = 1,
69 ACPI_ADDRESS_RANGE_RESERVED = 2,
70 ACPI_ADDRESS_RANGE_ACPI = 3,
71 ACPI_ADDRESS_RANGE_NVS = 4,
72 ACPI_ADDRESS_RANGE_COUNT
73};
74
75
76
77
78typedef int (*acpi_table_handler) (struct acpi_table_header *table);
79
80typedef int (*acpi_table_entry_handler) (struct acpi_subtable_header *header, const unsigned long end);
81
82char * __acpi_map_table (unsigned long phys_addr, unsigned long size);
83unsigned long acpi_find_rsdp (void);
84int acpi_boot_init (void);
85int acpi_boot_table_init (void);
86int acpi_numa_init (void);
87
88int acpi_table_init (void);
89int acpi_table_parse (char *id, acpi_table_handler handler);
90int __init acpi_table_parse_entries(char *id, unsigned long table_size,
91 int entry_id, acpi_table_entry_handler handler, unsigned int max_entries);
92int acpi_table_parse_madt (enum acpi_madt_type id, acpi_table_entry_handler handler, unsigned int max_entries);
93int acpi_parse_mcfg (struct acpi_table_header *header);
94void acpi_table_print_madt_entry (struct acpi_subtable_header *madt);
95
96
97#ifdef CONFIG_HAVE_ARCH_PARSE_SRAT
98#define NR_NODE_MEMBLKS MAX_NUMNODES
99#define acpi_numa_slit_init(slit) do {} while (0)
100#define acpi_numa_processor_affinity_init(pa) do {} while (0)
101#define acpi_numa_memory_affinity_init(ma) do {} while (0)
102#define acpi_numa_arch_fixup() do {} while (0)
103#else
104void acpi_numa_slit_init (struct acpi_table_slit *slit);
105void acpi_numa_processor_affinity_init (struct acpi_srat_cpu_affinity *pa);
106void acpi_numa_memory_affinity_init (struct acpi_srat_mem_affinity *ma);
107void acpi_numa_arch_fixup(void);
108#endif
109
110#ifdef CONFIG_ACPI_HOTPLUG_CPU
111
112int acpi_map_lsapic(acpi_handle handle, int *pcpu);
113int acpi_unmap_lsapic(int cpu);
114#endif
115
116int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base);
117int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base);
118
119extern int acpi_mp_config;
120
121extern struct acpi_mcfg_allocation *pci_mmcfg_config;
122extern int pci_mmcfg_config_num;
123
124extern int sbf_port;
125extern unsigned long acpi_realmode_flags;
126
127#else
128
129#define acpi_mp_config 0
130
131#endif
132
133int acpi_register_gsi (u32 gsi, int triggering, int polarity);
134int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
135
136#ifdef CONFIG_X86_IO_APIC
137extern int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity);
138#else
139#define acpi_get_override_irq(bus, trigger, polarity) (-1)
140#endif
141
142
143
144
145
146void acpi_unregister_gsi (u32 gsi);
147
148#ifdef CONFIG_ACPI
149
150struct acpi_prt_entry {
151 struct list_head node;
152 struct acpi_pci_id id;
153 u8 pin;
154 struct {
155 acpi_handle handle;
156 u32 index;
157 } link;
158 u32 irq;
159};
160
161struct acpi_prt_list {
162 int count;
163 struct list_head entries;
164};
165
166struct pci_dev;
167
168int acpi_pci_irq_enable (struct pci_dev *dev);
169void acpi_penalize_isa_irq(int irq, int active);
170
171void acpi_pci_irq_disable (struct pci_dev *dev);
172
173struct acpi_pci_driver {
174 struct acpi_pci_driver *next;
175 int (*add)(acpi_handle handle);
176 void (*remove)(acpi_handle handle);
177};
178
179int acpi_pci_register_driver(struct acpi_pci_driver *driver);
180void acpi_pci_unregister_driver(struct acpi_pci_driver *driver);
181
182#endif
183
184#ifdef CONFIG_ACPI_EC
185
186extern int ec_read(u8 addr, u8 *val);
187extern int ec_write(u8 addr, u8 val);
188extern int ec_transaction(u8 command,
189 const u8 *wdata, unsigned wdata_len,
190 u8 *rdata, unsigned rdata_len,
191 int force_poll);
192
193#endif
194
195extern int acpi_blacklisted(void);
196#ifdef CONFIG_DMI
197extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d);
198#endif
199
200#ifdef CONFIG_ACPI_NUMA
201int acpi_get_pxm(acpi_handle handle);
202int acpi_get_node(acpi_handle *handle);
203#else
204static inline int acpi_get_pxm(acpi_handle handle)
205{
206 return 0;
207}
208static inline int acpi_get_node(acpi_handle *handle)
209{
210 return 0;
211}
212#endif
213extern int acpi_paddr_to_node(u64 start_addr, u64 size);
214
215extern int pnpacpi_disabled;
216
217#define PXM_INVAL (-1)
218#define NID_INVAL (-1)
219
220#else
221
222static inline int acpi_boot_init(void)
223{
224 return 0;
225}
226
227static inline int acpi_boot_table_init(void)
228{
229 return 0;
230}
231
232#endif
233#endif
234