Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6588 | serge | 1 | #ifndef _ASM_X86_ACPI_H |
2 | #define _ASM_X86_ACPI_H |
||
3 | |||
4 | /* |
||
5 | * Copyright (C) 2001 Paul Diefenbaugh |
||
6 | * Copyright (C) 2001 Patrick Mochel |
||
7 | * |
||
8 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
9 | * |
||
10 | * This program is free software; you can redistribute it and/or modify |
||
11 | * it under the terms of the GNU General Public License as published by |
||
12 | * the Free Software Foundation; either version 2 of the License, or |
||
13 | * (at your option) any later version. |
||
14 | * |
||
15 | * This program is distributed in the hope that it will be useful, |
||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
18 | * GNU General Public License for more details. |
||
19 | * |
||
20 | * You should have received a copy of the GNU General Public License |
||
21 | * along with this program; if not, write to the Free Software |
||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||
23 | * |
||
24 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
25 | */ |
||
26 | #include |
||
27 | |||
28 | #include |
||
29 | #include |
||
30 | #include |
||
31 | |||
32 | #ifdef CONFIG_ACPI_APEI |
||
33 | # include |
||
34 | #endif |
||
35 | |||
36 | #ifdef CONFIG_ACPI |
||
37 | extern int acpi_lapic; |
||
38 | extern int acpi_ioapic; |
||
39 | extern int acpi_noirq; |
||
40 | extern int acpi_strict; |
||
41 | extern int acpi_disabled; |
||
42 | extern int acpi_pci_disabled; |
||
43 | extern int acpi_skip_timer_override; |
||
44 | extern int acpi_use_timer_override; |
||
45 | extern int acpi_fix_pin2_polarity; |
||
46 | extern int acpi_disable_cmcff; |
||
47 | |||
48 | extern u8 acpi_sci_flags; |
||
49 | extern int acpi_sci_override_gsi; |
||
50 | void acpi_pic_sci_set_trigger(unsigned int, u16); |
||
51 | |||
52 | extern int (*__acpi_register_gsi)(struct device *dev, u32 gsi, |
||
53 | int trigger, int polarity); |
||
54 | extern void (*__acpi_unregister_gsi)(u32 gsi); |
||
55 | |||
56 | static inline void disable_acpi(void) |
||
57 | { |
||
58 | acpi_disabled = 1; |
||
59 | acpi_pci_disabled = 1; |
||
60 | acpi_noirq = 1; |
||
61 | } |
||
62 | |||
63 | extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq); |
||
64 | |||
65 | static inline void acpi_noirq_set(void) { acpi_noirq = 1; } |
||
66 | static inline void acpi_disable_pci(void) |
||
67 | { |
||
68 | acpi_pci_disabled = 1; |
||
69 | acpi_noirq_set(); |
||
70 | } |
||
71 | |||
72 | /* Low-level suspend routine. */ |
||
73 | extern int (*acpi_suspend_lowlevel)(void); |
||
74 | |||
75 | /* Physical address to resume after wakeup */ |
||
76 | #define acpi_wakeup_address ((unsigned long)(real_mode_header->wakeup_start)) |
||
77 | |||
78 | /* |
||
79 | * Check if the CPU can handle C2 and deeper |
||
80 | */ |
||
81 | static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate) |
||
82 | { |
||
83 | /* |
||
84 | * Early models (<=5) of AMD Opterons are not supposed to go into |
||
85 | * C2 state. |
||
86 | * |
||
87 | * Steppings 0x0A and later are good |
||
88 | */ |
||
89 | if (boot_cpu_data.x86 == 0x0F && |
||
90 | boot_cpu_data.x86_vendor == X86_VENDOR_AMD && |
||
91 | boot_cpu_data.x86_model <= 0x05 && |
||
92 | boot_cpu_data.x86_mask < 0x0A) |
||
93 | return 1; |
||
94 | else if (amd_e400_c1e_detected) |
||
95 | return 1; |
||
96 | else |
||
97 | return max_cstate; |
||
98 | } |
||
99 | |||
100 | static inline bool arch_has_acpi_pdc(void) |
||
101 | { |
||
102 | struct cpuinfo_x86 *c = &cpu_data(0); |
||
103 | return (c->x86_vendor == X86_VENDOR_INTEL || |
||
104 | c->x86_vendor == X86_VENDOR_CENTAUR); |
||
105 | } |
||
106 | |||
107 | static inline void arch_acpi_set_pdc_bits(u32 *buf) |
||
108 | { |
||
109 | struct cpuinfo_x86 *c = &cpu_data(0); |
||
110 | |||
111 | buf[2] |= ACPI_PDC_C_CAPABILITY_SMP; |
||
112 | |||
113 | if (cpu_has(c, X86_FEATURE_EST)) |
||
114 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP; |
||
115 | |||
116 | if (cpu_has(c, X86_FEATURE_ACPI)) |
||
117 | buf[2] |= ACPI_PDC_T_FFH; |
||
118 | |||
119 | /* |
||
120 | * If mwait/monitor is unsupported, C2/C3_FFH will be disabled |
||
121 | */ |
||
122 | if (!cpu_has(c, X86_FEATURE_MWAIT)) |
||
123 | buf[2] &= ~(ACPI_PDC_C_C2C3_FFH); |
||
124 | } |
||
125 | |||
126 | static inline bool acpi_has_cpu_in_madt(void) |
||
127 | { |
||
128 | return !!acpi_lapic; |
||
129 | } |
||
130 | |||
131 | #else /* !CONFIG_ACPI */ |
||
132 | |||
133 | #define acpi_lapic 0 |
||
134 | #define acpi_ioapic 0 |
||
135 | #define acpi_disable_cmcff 0 |
||
136 | static inline void acpi_noirq_set(void) { } |
||
137 | static inline void acpi_disable_pci(void) { } |
||
138 | static inline void disable_acpi(void) { } |
||
139 | |||
140 | #endif /* !CONFIG_ACPI */ |
||
141 | |||
142 | #define ARCH_HAS_POWER_INIT 1 |
||
143 | |||
144 | #ifdef CONFIG_ACPI_NUMA |
||
145 | extern int acpi_numa; |
||
146 | extern int x86_acpi_numa_init(void); |
||
147 | #endif /* CONFIG_ACPI_NUMA */ |
||
148 | |||
149 | #define acpi_unlazy_tlb(x) leave_mm(x) |
||
150 | |||
151 | #ifdef CONFIG_ACPI_APEI |
||
152 | static inline pgprot_t arch_apei_get_mem_attribute(phys_addr_t addr) |
||
153 | { |
||
154 | /* |
||
155 | * We currently have no way to look up the EFI memory map |
||
156 | * attributes for a region in a consistent way, because the |
||
157 | * memmap is discarded after efi_free_boot_services(). So if |
||
158 | * you call efi_mem_attributes() during boot and at runtime, |
||
159 | * you could theoretically see different attributes. |
||
160 | * |
||
161 | * Since we are yet to see any x86 platforms that require |
||
162 | * anything other than PAGE_KERNEL (some arm64 platforms |
||
163 | * require the equivalent of PAGE_KERNEL_NOCACHE), return that |
||
164 | * until we know differently. |
||
165 | */ |
||
166 | return PAGE_KERNEL; |
||
167 | } |
||
168 | #endif |
||
169 | |||
170 | #endif /* _ASM_X86_ACPI_H */>=>=5)> |