Merge branch 'acpi-trace'
[linux-2.6-microblaze.git] / drivers / acpi / osl.c
1 /*
2  *  acpi_osl.c - OS-dependent functions ($Revision: 83 $)
3  *
4  *  Copyright (C) 2000       Andrew Henroid
5  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
6  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
7  *  Copyright (c) 2008 Intel Corporation
8  *   Author: Matthew Wilcox <willy@linux.intel.com>
9  *
10  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11  *
12  *  This program is free software; you can redistribute it and/or modify
13  *  it under the terms of the GNU General Public License as published by
14  *  the Free Software Foundation; either version 2 of the License, or
15  *  (at your option) any later version.
16  *
17  *  This program is distributed in the hope that it will be useful,
18  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  *  GNU General Public License for more details.
21  *
22  *  You should have received a copy of the GNU General Public License
23  *  along with this program; if not, write to the Free Software
24  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25  *
26  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27  *
28  */
29
30 #include <linux/module.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/mm.h>
34 #include <linux/highmem.h>
35 #include <linux/pci.h>
36 #include <linux/interrupt.h>
37 #include <linux/kmod.h>
38 #include <linux/delay.h>
39 #include <linux/workqueue.h>
40 #include <linux/nmi.h>
41 #include <linux/acpi.h>
42 #include <linux/efi.h>
43 #include <linux/ioport.h>
44 #include <linux/list.h>
45 #include <linux/jiffies.h>
46 #include <linux/semaphore.h>
47
48 #include <asm/io.h>
49 #include <asm/uaccess.h>
50
51 #include "internal.h"
52
53 #define _COMPONENT              ACPI_OS_SERVICES
54 ACPI_MODULE_NAME("osl");
55
56 struct acpi_os_dpc {
57         acpi_osd_exec_callback function;
58         void *context;
59         struct work_struct work;
60 };
61
62 #ifdef CONFIG_ACPI_CUSTOM_DSDT
63 #include CONFIG_ACPI_CUSTOM_DSDT_FILE
64 #endif
65
66 #ifdef ENABLE_DEBUGGER
67 #include <linux/kdb.h>
68
69 /* stuff for debugger support */
70 int acpi_in_debugger;
71 EXPORT_SYMBOL(acpi_in_debugger);
72
73 extern char line_buf[80];
74 #endif                          /*ENABLE_DEBUGGER */
75
76 static int (*__acpi_os_prepare_sleep)(u8 sleep_state, u32 pm1a_ctrl,
77                                       u32 pm1b_ctrl);
78 static int (*__acpi_os_prepare_extended_sleep)(u8 sleep_state, u32 val_a,
79                                       u32 val_b);
80
81 static acpi_osd_handler acpi_irq_handler;
82 static void *acpi_irq_context;
83 static struct workqueue_struct *kacpid_wq;
84 static struct workqueue_struct *kacpi_notify_wq;
85 static struct workqueue_struct *kacpi_hotplug_wq;
86 static bool acpi_os_initialized;
87
88 /*
89  * This list of permanent mappings is for memory that may be accessed from
90  * interrupt context, where we can't do the ioremap().
91  */
92 struct acpi_ioremap {
93         struct list_head list;
94         void __iomem *virt;
95         acpi_physical_address phys;
96         acpi_size size;
97         unsigned long refcount;
98 };
99
100 static LIST_HEAD(acpi_ioremaps);
101 static DEFINE_MUTEX(acpi_ioremap_lock);
102
103 static void __init acpi_osi_setup_late(void);
104
105 /*
106  * The story of _OSI(Linux)
107  *
108  * From pre-history through Linux-2.6.22,
109  * Linux responded TRUE upon a BIOS OSI(Linux) query.
110  *
111  * Unfortunately, reference BIOS writers got wind of this
112  * and put OSI(Linux) in their example code, quickly exposing
113  * this string as ill-conceived and opening the door to
114  * an un-bounded number of BIOS incompatibilities.
115  *
116  * For example, OSI(Linux) was used on resume to re-POST a
117  * video card on one system, because Linux at that time
118  * could not do a speedy restore in its native driver.
119  * But then upon gaining quick native restore capability,
120  * Linux has no way to tell the BIOS to skip the time-consuming
121  * POST -- putting Linux at a permanent performance disadvantage.
122  * On another system, the BIOS writer used OSI(Linux)
123  * to infer native OS support for IPMI!  On other systems,
124  * OSI(Linux) simply got in the way of Linux claiming to
125  * be compatible with other operating systems, exposing
126  * BIOS issues such as skipped device initialization.
127  *
128  * So "Linux" turned out to be a really poor chose of
129  * OSI string, and from Linux-2.6.23 onward we respond FALSE.
130  *
131  * BIOS writers should NOT query _OSI(Linux) on future systems.
132  * Linux will complain on the console when it sees it, and return FALSE.
133  * To get Linux to return TRUE for your system  will require
134  * a kernel source update to add a DMI entry,
135  * or boot with "acpi_osi=Linux"
136  */
137
138 static struct osi_linux {
139         unsigned int    enable:1;
140         unsigned int    dmi:1;
141         unsigned int    cmdline:1;
142         unsigned int    default_disabling:1;
143 } osi_linux = {0, 0, 0, 0};
144
145 static u32 acpi_osi_handler(acpi_string interface, u32 supported)
146 {
147         if (!strcmp("Linux", interface)) {
148
149                 printk_once(KERN_NOTICE FW_BUG PREFIX
150                         "BIOS _OSI(Linux) query %s%s\n",
151                         osi_linux.enable ? "honored" : "ignored",
152                         osi_linux.cmdline ? " via cmdline" :
153                         osi_linux.dmi ? " via DMI" : "");
154         }
155
156         if (!strcmp("Darwin", interface)) {
157                 /*
158                  * Apple firmware will behave poorly if it receives positive
159                  * answers to "Darwin" and any other OS. Respond positively
160                  * to Darwin and then disable all other vendor strings.
161                  */
162                 acpi_update_interfaces(ACPI_DISABLE_ALL_VENDOR_STRINGS);
163                 supported = ACPI_UINT32_MAX;
164         }
165
166         return supported;
167 }
168
169 static void __init acpi_request_region (struct acpi_generic_address *gas,
170         unsigned int length, char *desc)
171 {
172         u64 addr;
173
174         /* Handle possible alignment issues */
175         memcpy(&addr, &gas->address, sizeof(addr));
176         if (!addr || !length)
177                 return;
178
179         /* Resources are never freed */
180         if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_IO)
181                 request_region(addr, length, desc);
182         else if (gas->space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
183                 request_mem_region(addr, length, desc);
184 }
185
186 static int __init acpi_reserve_resources(void)
187 {
188         acpi_request_region(&acpi_gbl_FADT.xpm1a_event_block, acpi_gbl_FADT.pm1_event_length,
189                 "ACPI PM1a_EVT_BLK");
190
191         acpi_request_region(&acpi_gbl_FADT.xpm1b_event_block, acpi_gbl_FADT.pm1_event_length,
192                 "ACPI PM1b_EVT_BLK");
193
194         acpi_request_region(&acpi_gbl_FADT.xpm1a_control_block, acpi_gbl_FADT.pm1_control_length,
195                 "ACPI PM1a_CNT_BLK");
196
197         acpi_request_region(&acpi_gbl_FADT.xpm1b_control_block, acpi_gbl_FADT.pm1_control_length,
198                 "ACPI PM1b_CNT_BLK");
199
200         if (acpi_gbl_FADT.pm_timer_length == 4)
201                 acpi_request_region(&acpi_gbl_FADT.xpm_timer_block, 4, "ACPI PM_TMR");
202
203         acpi_request_region(&acpi_gbl_FADT.xpm2_control_block, acpi_gbl_FADT.pm2_control_length,
204                 "ACPI PM2_CNT_BLK");
205
206         /* Length of GPE blocks must be a non-negative multiple of 2 */
207
208         if (!(acpi_gbl_FADT.gpe0_block_length & 0x1))
209                 acpi_request_region(&acpi_gbl_FADT.xgpe0_block,
210                                acpi_gbl_FADT.gpe0_block_length, "ACPI GPE0_BLK");
211
212         if (!(acpi_gbl_FADT.gpe1_block_length & 0x1))
213                 acpi_request_region(&acpi_gbl_FADT.xgpe1_block,
214                                acpi_gbl_FADT.gpe1_block_length, "ACPI GPE1_BLK");
215
216         return 0;
217 }
218 fs_initcall_sync(acpi_reserve_resources);
219
220 void acpi_os_printf(const char *fmt, ...)
221 {
222         va_list args;
223         va_start(args, fmt);
224         acpi_os_vprintf(fmt, args);
225         va_end(args);
226 }
227
228 void acpi_os_vprintf(const char *fmt, va_list args)
229 {
230         static char buffer[512];
231
232         vsprintf(buffer, fmt, args);
233
234 #ifdef ENABLE_DEBUGGER
235         if (acpi_in_debugger) {
236                 kdb_printf("%s", buffer);
237         } else {
238                 printk(KERN_CONT "%s", buffer);
239         }
240 #else
241         printk(KERN_CONT "%s", buffer);
242 #endif
243 }
244
245 #ifdef CONFIG_KEXEC
246 static unsigned long acpi_rsdp;
247 static int __init setup_acpi_rsdp(char *arg)
248 {
249         if (kstrtoul(arg, 16, &acpi_rsdp))
250                 return -EINVAL;
251         return 0;
252 }
253 early_param("acpi_rsdp", setup_acpi_rsdp);
254 #endif
255
256 acpi_physical_address __init acpi_os_get_root_pointer(void)
257 {
258 #ifdef CONFIG_KEXEC
259         if (acpi_rsdp)
260                 return acpi_rsdp;
261 #endif
262
263         if (efi_enabled(EFI_CONFIG_TABLES)) {
264                 if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
265                         return efi.acpi20;
266                 else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
267                         return efi.acpi;
268                 else {
269                         printk(KERN_ERR PREFIX
270                                "System description tables not found\n");
271                         return 0;
272                 }
273         } else if (IS_ENABLED(CONFIG_ACPI_LEGACY_TABLES_LOOKUP)) {
274                 acpi_physical_address pa = 0;
275
276                 acpi_find_root_pointer(&pa);
277                 return pa;
278         }
279
280         return 0;
281 }
282
283 /* Must be called with 'acpi_ioremap_lock' or RCU read lock held. */
284 static struct acpi_ioremap *
285 acpi_map_lookup(acpi_physical_address phys, acpi_size size)
286 {
287         struct acpi_ioremap *map;
288
289         list_for_each_entry_rcu(map, &acpi_ioremaps, list)
290                 if (map->phys <= phys &&
291                     phys + size <= map->phys + map->size)
292                         return map;
293
294         return NULL;
295 }
296
297 /* Must be called with 'acpi_ioremap_lock' or RCU read lock held. */
298 static void __iomem *
299 acpi_map_vaddr_lookup(acpi_physical_address phys, unsigned int size)
300 {
301         struct acpi_ioremap *map;
302
303         map = acpi_map_lookup(phys, size);
304         if (map)
305                 return map->virt + (phys - map->phys);
306
307         return NULL;
308 }
309
310 void __iomem *acpi_os_get_iomem(acpi_physical_address phys, unsigned int size)
311 {
312         struct acpi_ioremap *map;
313         void __iomem *virt = NULL;
314
315         mutex_lock(&acpi_ioremap_lock);
316         map = acpi_map_lookup(phys, size);
317         if (map) {
318                 virt = map->virt + (phys - map->phys);
319                 map->refcount++;
320         }
321         mutex_unlock(&acpi_ioremap_lock);
322         return virt;
323 }
324 EXPORT_SYMBOL_GPL(acpi_os_get_iomem);
325
326 /* Must be called with 'acpi_ioremap_lock' or RCU read lock held. */
327 static struct acpi_ioremap *
328 acpi_map_lookup_virt(void __iomem *virt, acpi_size size)
329 {
330         struct acpi_ioremap *map;
331
332         list_for_each_entry_rcu(map, &acpi_ioremaps, list)
333                 if (map->virt <= virt &&
334                     virt + size <= map->virt + map->size)
335                         return map;
336
337         return NULL;
338 }
339
340 #if defined(CONFIG_IA64) || defined(CONFIG_ARM64)
341 /* ioremap will take care of cache attributes */
342 #define should_use_kmap(pfn)   0
343 #else
344 #define should_use_kmap(pfn)   page_is_ram(pfn)
345 #endif
346
347 static void __iomem *acpi_map(acpi_physical_address pg_off, unsigned long pg_sz)
348 {
349         unsigned long pfn;
350
351         pfn = pg_off >> PAGE_SHIFT;
352         if (should_use_kmap(pfn)) {
353                 if (pg_sz > PAGE_SIZE)
354                         return NULL;
355                 return (void __iomem __force *)kmap(pfn_to_page(pfn));
356         } else
357                 return acpi_os_ioremap(pg_off, pg_sz);
358 }
359
360 static void acpi_unmap(acpi_physical_address pg_off, void __iomem *vaddr)
361 {
362         unsigned long pfn;
363
364         pfn = pg_off >> PAGE_SHIFT;
365         if (should_use_kmap(pfn))
366                 kunmap(pfn_to_page(pfn));
367         else
368                 iounmap(vaddr);
369 }
370
371 void __iomem *__init_refok
372 acpi_os_map_iomem(acpi_physical_address phys, acpi_size size)
373 {
374         struct acpi_ioremap *map;
375         void __iomem *virt;
376         acpi_physical_address pg_off;
377         acpi_size pg_sz;
378
379         if (phys > ULONG_MAX) {
380                 printk(KERN_ERR PREFIX "Cannot map memory that high\n");
381                 return NULL;
382         }
383
384         if (!acpi_gbl_permanent_mmap)
385                 return __acpi_map_table((unsigned long)phys, size);
386
387         mutex_lock(&acpi_ioremap_lock);
388         /* Check if there's a suitable mapping already. */
389         map = acpi_map_lookup(phys, size);
390         if (map) {
391                 map->refcount++;
392                 goto out;
393         }
394
395         map = kzalloc(sizeof(*map), GFP_KERNEL);
396         if (!map) {
397                 mutex_unlock(&acpi_ioremap_lock);
398                 return NULL;
399         }
400
401         pg_off = round_down(phys, PAGE_SIZE);
402         pg_sz = round_up(phys + size, PAGE_SIZE) - pg_off;
403         virt = acpi_map(pg_off, pg_sz);
404         if (!virt) {
405                 mutex_unlock(&acpi_ioremap_lock);
406                 kfree(map);
407                 return NULL;
408         }
409
410         INIT_LIST_HEAD(&map->list);
411         map->virt = virt;
412         map->phys = pg_off;
413         map->size = pg_sz;
414         map->refcount = 1;
415
416         list_add_tail_rcu(&map->list, &acpi_ioremaps);
417
418 out:
419         mutex_unlock(&acpi_ioremap_lock);
420         return map->virt + (phys - map->phys);
421 }
422 EXPORT_SYMBOL_GPL(acpi_os_map_iomem);
423
424 void *__init_refok
425 acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
426 {
427         return (void *)acpi_os_map_iomem(phys, size);
428 }
429 EXPORT_SYMBOL_GPL(acpi_os_map_memory);
430
431 static void acpi_os_drop_map_ref(struct acpi_ioremap *map)
432 {
433         if (!--map->refcount)
434                 list_del_rcu(&map->list);
435 }
436
437 static void acpi_os_map_cleanup(struct acpi_ioremap *map)
438 {
439         if (!map->refcount) {
440                 synchronize_rcu_expedited();
441                 acpi_unmap(map->phys, map->virt);
442                 kfree(map);
443         }
444 }
445
446 void __ref acpi_os_unmap_iomem(void __iomem *virt, acpi_size size)
447 {
448         struct acpi_ioremap *map;
449
450         if (!acpi_gbl_permanent_mmap) {
451                 __acpi_unmap_table(virt, size);
452                 return;
453         }
454
455         mutex_lock(&acpi_ioremap_lock);
456         map = acpi_map_lookup_virt(virt, size);
457         if (!map) {
458                 mutex_unlock(&acpi_ioremap_lock);
459                 WARN(true, PREFIX "%s: bad address %p\n", __func__, virt);
460                 return;
461         }
462         acpi_os_drop_map_ref(map);
463         mutex_unlock(&acpi_ioremap_lock);
464
465         acpi_os_map_cleanup(map);
466 }
467 EXPORT_SYMBOL_GPL(acpi_os_unmap_iomem);
468
469 void __ref acpi_os_unmap_memory(void *virt, acpi_size size)
470 {
471         return acpi_os_unmap_iomem((void __iomem *)virt, size);
472 }
473 EXPORT_SYMBOL_GPL(acpi_os_unmap_memory);
474
475 void __init early_acpi_os_unmap_memory(void __iomem *virt, acpi_size size)
476 {
477         if (!acpi_gbl_permanent_mmap)
478                 __acpi_unmap_table(virt, size);
479 }
480
481 int acpi_os_map_generic_address(struct acpi_generic_address *gas)
482 {
483         u64 addr;
484         void __iomem *virt;
485
486         if (gas->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY)
487                 return 0;
488
489         /* Handle possible alignment issues */
490         memcpy(&addr, &gas->address, sizeof(addr));
491         if (!addr || !gas->bit_width)
492                 return -EINVAL;
493
494         virt = acpi_os_map_iomem(addr, gas->bit_width / 8);
495         if (!virt)
496                 return -EIO;
497
498         return 0;
499 }
500 EXPORT_SYMBOL(acpi_os_map_generic_address);
501
502 void acpi_os_unmap_generic_address(struct acpi_generic_address *gas)
503 {
504         u64 addr;
505         struct acpi_ioremap *map;
506
507         if (gas->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY)
508                 return;
509
510         /* Handle possible alignment issues */
511         memcpy(&addr, &gas->address, sizeof(addr));
512         if (!addr || !gas->bit_width)
513                 return;
514
515         mutex_lock(&acpi_ioremap_lock);
516         map = acpi_map_lookup(addr, gas->bit_width / 8);
517         if (!map) {
518                 mutex_unlock(&acpi_ioremap_lock);
519                 return;
520         }
521         acpi_os_drop_map_ref(map);
522         mutex_unlock(&acpi_ioremap_lock);
523
524         acpi_os_map_cleanup(map);
525 }
526 EXPORT_SYMBOL(acpi_os_unmap_generic_address);
527
528 #ifdef ACPI_FUTURE_USAGE
529 acpi_status
530 acpi_os_get_physical_address(void *virt, acpi_physical_address * phys)
531 {
532         if (!phys || !virt)
533                 return AE_BAD_PARAMETER;
534
535         *phys = virt_to_phys(virt);
536
537         return AE_OK;
538 }
539 #endif
540
541 #ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
542 static bool acpi_rev_override;
543
544 int __init acpi_rev_override_setup(char *str)
545 {
546         acpi_rev_override = true;
547         return 1;
548 }
549 __setup("acpi_rev_override", acpi_rev_override_setup);
550 #else
551 #define acpi_rev_override       false
552 #endif
553
554 #define ACPI_MAX_OVERRIDE_LEN 100
555
556 static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN];
557
558 acpi_status
559 acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
560                             char **new_val)
561 {
562         if (!init_val || !new_val)
563                 return AE_BAD_PARAMETER;
564
565         *new_val = NULL;
566         if (!memcmp(init_val->name, "_OS_", 4) && strlen(acpi_os_name)) {
567                 printk(KERN_INFO PREFIX "Overriding _OS definition to '%s'\n",
568                        acpi_os_name);
569                 *new_val = acpi_os_name;
570         }
571
572         if (!memcmp(init_val->name, "_REV", 4) && acpi_rev_override) {
573                 printk(KERN_INFO PREFIX "Overriding _REV return value to 5\n");
574                 *new_val = (char *)5;
575         }
576
577         return AE_OK;
578 }
579
580 #ifdef CONFIG_ACPI_INITRD_TABLE_OVERRIDE
581 #include <linux/earlycpio.h>
582 #include <linux/memblock.h>
583
584 static u64 acpi_tables_addr;
585 static int all_tables_size;
586
587 /* Copied from acpica/tbutils.c:acpi_tb_checksum() */
588 static u8 __init acpi_table_checksum(u8 *buffer, u32 length)
589 {
590         u8 sum = 0;
591         u8 *end = buffer + length;
592
593         while (buffer < end)
594                 sum = (u8) (sum + *(buffer++));
595         return sum;
596 }
597
598 /* All but ACPI_SIG_RSDP and ACPI_SIG_FACS: */
599 static const char * const table_sigs[] = {
600         ACPI_SIG_BERT, ACPI_SIG_CPEP, ACPI_SIG_ECDT, ACPI_SIG_EINJ,
601         ACPI_SIG_ERST, ACPI_SIG_HEST, ACPI_SIG_MADT, ACPI_SIG_MSCT,
602         ACPI_SIG_SBST, ACPI_SIG_SLIT, ACPI_SIG_SRAT, ACPI_SIG_ASF,
603         ACPI_SIG_BOOT, ACPI_SIG_DBGP, ACPI_SIG_DMAR, ACPI_SIG_HPET,
604         ACPI_SIG_IBFT, ACPI_SIG_IVRS, ACPI_SIG_MCFG, ACPI_SIG_MCHI,
605         ACPI_SIG_SLIC, ACPI_SIG_SPCR, ACPI_SIG_SPMI, ACPI_SIG_TCPA,
606         ACPI_SIG_UEFI, ACPI_SIG_WAET, ACPI_SIG_WDAT, ACPI_SIG_WDDT,
607         ACPI_SIG_WDRT, ACPI_SIG_DSDT, ACPI_SIG_FADT, ACPI_SIG_PSDT,
608         ACPI_SIG_RSDT, ACPI_SIG_XSDT, ACPI_SIG_SSDT, NULL };
609
610 #define ACPI_HEADER_SIZE sizeof(struct acpi_table_header)
611
612 #define ACPI_OVERRIDE_TABLES 64
613 static struct cpio_data __initdata acpi_initrd_files[ACPI_OVERRIDE_TABLES];
614
615 #define MAP_CHUNK_SIZE   (NR_FIX_BTMAPS << PAGE_SHIFT)
616
617 void __init acpi_initrd_override(void *data, size_t size)
618 {
619         int sig, no, table_nr = 0, total_offset = 0;
620         long offset = 0;
621         struct acpi_table_header *table;
622         char cpio_path[32] = "kernel/firmware/acpi/";
623         struct cpio_data file;
624
625         if (data == NULL || size == 0)
626                 return;
627
628         for (no = 0; no < ACPI_OVERRIDE_TABLES; no++) {
629                 file = find_cpio_data(cpio_path, data, size, &offset);
630                 if (!file.data)
631                         break;
632
633                 data += offset;
634                 size -= offset;
635
636                 if (file.size < sizeof(struct acpi_table_header)) {
637                         pr_err("ACPI OVERRIDE: Table smaller than ACPI header [%s%s]\n",
638                                 cpio_path, file.name);
639                         continue;
640                 }
641
642                 table = file.data;
643
644                 for (sig = 0; table_sigs[sig]; sig++)
645                         if (!memcmp(table->signature, table_sigs[sig], 4))
646                                 break;
647
648                 if (!table_sigs[sig]) {
649                         pr_err("ACPI OVERRIDE: Unknown signature [%s%s]\n",
650                                 cpio_path, file.name);
651                         continue;
652                 }
653                 if (file.size != table->length) {
654                         pr_err("ACPI OVERRIDE: File length does not match table length [%s%s]\n",
655                                 cpio_path, file.name);
656                         continue;
657                 }
658                 if (acpi_table_checksum(file.data, table->length)) {
659                         pr_err("ACPI OVERRIDE: Bad table checksum [%s%s]\n",
660                                 cpio_path, file.name);
661                         continue;
662                 }
663
664                 pr_info("%4.4s ACPI table found in initrd [%s%s][0x%x]\n",
665                         table->signature, cpio_path, file.name, table->length);
666
667                 all_tables_size += table->length;
668                 acpi_initrd_files[table_nr].data = file.data;
669                 acpi_initrd_files[table_nr].size = file.size;
670                 table_nr++;
671         }
672         if (table_nr == 0)
673                 return;
674
675         acpi_tables_addr =
676                 memblock_find_in_range(0, max_low_pfn_mapped << PAGE_SHIFT,
677                                        all_tables_size, PAGE_SIZE);
678         if (!acpi_tables_addr) {
679                 WARN_ON(1);
680                 return;
681         }
682         /*
683          * Only calling e820_add_reserve does not work and the
684          * tables are invalid (memory got used) later.
685          * memblock_reserve works as expected and the tables won't get modified.
686          * But it's not enough on X86 because ioremap will
687          * complain later (used by acpi_os_map_memory) that the pages
688          * that should get mapped are not marked "reserved".
689          * Both memblock_reserve and e820_add_region (via arch_reserve_mem_area)
690          * works fine.
691          */
692         memblock_reserve(acpi_tables_addr, all_tables_size);
693         arch_reserve_mem_area(acpi_tables_addr, all_tables_size);
694
695         /*
696          * early_ioremap only can remap 256k one time. If we map all
697          * tables one time, we will hit the limit. Need to map chunks
698          * one by one during copying the same as that in relocate_initrd().
699          */
700         for (no = 0; no < table_nr; no++) {
701                 unsigned char *src_p = acpi_initrd_files[no].data;
702                 phys_addr_t size = acpi_initrd_files[no].size;
703                 phys_addr_t dest_addr = acpi_tables_addr + total_offset;
704                 phys_addr_t slop, clen;
705                 char *dest_p;
706
707                 total_offset += size;
708
709                 while (size) {
710                         slop = dest_addr & ~PAGE_MASK;
711                         clen = size;
712                         if (clen > MAP_CHUNK_SIZE - slop)
713                                 clen = MAP_CHUNK_SIZE - slop;
714                         dest_p = early_ioremap(dest_addr & PAGE_MASK,
715                                                  clen + slop);
716                         memcpy(dest_p + slop, src_p, clen);
717                         early_iounmap(dest_p, clen + slop);
718                         src_p += clen;
719                         dest_addr += clen;
720                         size -= clen;
721                 }
722         }
723 }
724 #endif /* CONFIG_ACPI_INITRD_TABLE_OVERRIDE */
725
726 static void acpi_table_taint(struct acpi_table_header *table)
727 {
728         pr_warn(PREFIX
729                 "Override [%4.4s-%8.8s], this is unsafe: tainting kernel\n",
730                 table->signature, table->oem_table_id);
731         add_taint(TAINT_OVERRIDDEN_ACPI_TABLE, LOCKDEP_NOW_UNRELIABLE);
732 }
733
734
735 acpi_status
736 acpi_os_table_override(struct acpi_table_header * existing_table,
737                        struct acpi_table_header ** new_table)
738 {
739         if (!existing_table || !new_table)
740                 return AE_BAD_PARAMETER;
741
742         *new_table = NULL;
743
744 #ifdef CONFIG_ACPI_CUSTOM_DSDT
745         if (strncmp(existing_table->signature, "DSDT", 4) == 0)
746                 *new_table = (struct acpi_table_header *)AmlCode;
747 #endif
748         if (*new_table != NULL)
749                 acpi_table_taint(existing_table);
750         return AE_OK;
751 }
752
753 acpi_status
754 acpi_os_physical_table_override(struct acpi_table_header *existing_table,
755                                 acpi_physical_address *address,
756                                 u32 *table_length)
757 {
758 #ifndef CONFIG_ACPI_INITRD_TABLE_OVERRIDE
759         *table_length = 0;
760         *address = 0;
761         return AE_OK;
762 #else
763         int table_offset = 0;
764         struct acpi_table_header *table;
765
766         *table_length = 0;
767         *address = 0;
768
769         if (!acpi_tables_addr)
770                 return AE_OK;
771
772         do {
773                 if (table_offset + ACPI_HEADER_SIZE > all_tables_size) {
774                         WARN_ON(1);
775                         return AE_OK;
776                 }
777
778                 table = acpi_os_map_memory(acpi_tables_addr + table_offset,
779                                            ACPI_HEADER_SIZE);
780
781                 if (table_offset + table->length > all_tables_size) {
782                         acpi_os_unmap_memory(table, ACPI_HEADER_SIZE);
783                         WARN_ON(1);
784                         return AE_OK;
785                 }
786
787                 table_offset += table->length;
788
789                 if (memcmp(existing_table->signature, table->signature, 4)) {
790                         acpi_os_unmap_memory(table,
791                                      ACPI_HEADER_SIZE);
792                         continue;
793                 }
794
795                 /* Only override tables with matching oem id */
796                 if (memcmp(table->oem_table_id, existing_table->oem_table_id,
797                            ACPI_OEM_TABLE_ID_SIZE)) {
798                         acpi_os_unmap_memory(table,
799                                      ACPI_HEADER_SIZE);
800                         continue;
801                 }
802
803                 table_offset -= table->length;
804                 *table_length = table->length;
805                 acpi_os_unmap_memory(table, ACPI_HEADER_SIZE);
806                 *address = acpi_tables_addr + table_offset;
807                 break;
808         } while (table_offset + ACPI_HEADER_SIZE < all_tables_size);
809
810         if (*address != 0)
811                 acpi_table_taint(existing_table);
812         return AE_OK;
813 #endif
814 }
815
816 static irqreturn_t acpi_irq(int irq, void *dev_id)
817 {
818         u32 handled;
819
820         handled = (*acpi_irq_handler) (acpi_irq_context);
821
822         if (handled) {
823                 acpi_irq_handled++;
824                 return IRQ_HANDLED;
825         } else {
826                 acpi_irq_not_handled++;
827                 return IRQ_NONE;
828         }
829 }
830
831 acpi_status
832 acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
833                                   void *context)
834 {
835         unsigned int irq;
836
837         acpi_irq_stats_init();
838
839         /*
840          * ACPI interrupts different from the SCI in our copy of the FADT are
841          * not supported.
842          */
843         if (gsi != acpi_gbl_FADT.sci_interrupt)
844                 return AE_BAD_PARAMETER;
845
846         if (acpi_irq_handler)
847                 return AE_ALREADY_ACQUIRED;
848
849         if (acpi_gsi_to_irq(gsi, &irq) < 0) {
850                 printk(KERN_ERR PREFIX "SCI (ACPI GSI %d) not registered\n",
851                        gsi);
852                 return AE_OK;
853         }
854
855         acpi_irq_handler = handler;
856         acpi_irq_context = context;
857         if (request_irq(irq, acpi_irq, IRQF_SHARED, "acpi", acpi_irq)) {
858                 printk(KERN_ERR PREFIX "SCI (IRQ%d) allocation failed\n", irq);
859                 acpi_irq_handler = NULL;
860                 return AE_NOT_ACQUIRED;
861         }
862
863         return AE_OK;
864 }
865
866 acpi_status acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
867 {
868         if (irq != acpi_gbl_FADT.sci_interrupt)
869                 return AE_BAD_PARAMETER;
870
871         free_irq(irq, acpi_irq);
872         acpi_irq_handler = NULL;
873
874         return AE_OK;
875 }
876
877 /*
878  * Running in interpreter thread context, safe to sleep
879  */
880
881 void acpi_os_sleep(u64 ms)
882 {
883         msleep(ms);
884 }
885
886 void acpi_os_stall(u32 us)
887 {
888         while (us) {
889                 u32 delay = 1000;
890
891                 if (delay > us)
892                         delay = us;
893                 udelay(delay);
894                 touch_nmi_watchdog();
895                 us -= delay;
896         }
897 }
898
899 /*
900  * Support ACPI 3.0 AML Timer operand
901  * Returns 64-bit free-running, monotonically increasing timer
902  * with 100ns granularity
903  */
904 u64 acpi_os_get_timer(void)
905 {
906         u64 time_ns = ktime_to_ns(ktime_get());
907         do_div(time_ns, 100);
908         return time_ns;
909 }
910
911 acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
912 {
913         u32 dummy;
914
915         if (!value)
916                 value = &dummy;
917
918         *value = 0;
919         if (width <= 8) {
920                 *(u8 *) value = inb(port);
921         } else if (width <= 16) {
922                 *(u16 *) value = inw(port);
923         } else if (width <= 32) {
924                 *(u32 *) value = inl(port);
925         } else {
926                 BUG();
927         }
928
929         return AE_OK;
930 }
931
932 EXPORT_SYMBOL(acpi_os_read_port);
933
934 acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
935 {
936         if (width <= 8) {
937                 outb(value, port);
938         } else if (width <= 16) {
939                 outw(value, port);
940         } else if (width <= 32) {
941                 outl(value, port);
942         } else {
943                 BUG();
944         }
945
946         return AE_OK;
947 }
948
949 EXPORT_SYMBOL(acpi_os_write_port);
950
951 #ifdef readq
952 static inline u64 read64(const volatile void __iomem *addr)
953 {
954         return readq(addr);
955 }
956 #else
957 static inline u64 read64(const volatile void __iomem *addr)
958 {
959         u64 l, h;
960         l = readl(addr);
961         h = readl(addr+4);
962         return l | (h << 32);
963 }
964 #endif
965
966 acpi_status
967 acpi_os_read_memory(acpi_physical_address phys_addr, u64 *value, u32 width)
968 {
969         void __iomem *virt_addr;
970         unsigned int size = width / 8;
971         bool unmap = false;
972         u64 dummy;
973
974         rcu_read_lock();
975         virt_addr = acpi_map_vaddr_lookup(phys_addr, size);
976         if (!virt_addr) {
977                 rcu_read_unlock();
978                 virt_addr = acpi_os_ioremap(phys_addr, size);
979                 if (!virt_addr)
980                         return AE_BAD_ADDRESS;
981                 unmap = true;
982         }
983
984         if (!value)
985                 value = &dummy;
986
987         switch (width) {
988         case 8:
989                 *(u8 *) value = readb(virt_addr);
990                 break;
991         case 16:
992                 *(u16 *) value = readw(virt_addr);
993                 break;
994         case 32:
995                 *(u32 *) value = readl(virt_addr);
996                 break;
997         case 64:
998                 *(u64 *) value = read64(virt_addr);
999                 break;
1000         default:
1001                 BUG();
1002         }
1003
1004         if (unmap)
1005                 iounmap(virt_addr);
1006         else
1007                 rcu_read_unlock();
1008
1009         return AE_OK;
1010 }
1011
1012 #ifdef writeq
1013 static inline void write64(u64 val, volatile void __iomem *addr)
1014 {
1015         writeq(val, addr);
1016 }
1017 #else
1018 static inline void write64(u64 val, volatile void __iomem *addr)
1019 {
1020         writel(val, addr);
1021         writel(val>>32, addr+4);
1022 }
1023 #endif
1024
1025 acpi_status
1026 acpi_os_write_memory(acpi_physical_address phys_addr, u64 value, u32 width)
1027 {
1028         void __iomem *virt_addr;
1029         unsigned int size = width / 8;
1030         bool unmap = false;
1031
1032         rcu_read_lock();
1033         virt_addr = acpi_map_vaddr_lookup(phys_addr, size);
1034         if (!virt_addr) {
1035                 rcu_read_unlock();
1036                 virt_addr = acpi_os_ioremap(phys_addr, size);
1037                 if (!virt_addr)
1038                         return AE_BAD_ADDRESS;
1039                 unmap = true;
1040         }
1041
1042         switch (width) {
1043         case 8:
1044                 writeb(value, virt_addr);
1045                 break;
1046         case 16:
1047                 writew(value, virt_addr);
1048                 break;
1049         case 32:
1050                 writel(value, virt_addr);
1051                 break;
1052         case 64:
1053                 write64(value, virt_addr);
1054                 break;
1055         default:
1056                 BUG();
1057         }
1058
1059         if (unmap)
1060                 iounmap(virt_addr);
1061         else
1062                 rcu_read_unlock();
1063
1064         return AE_OK;
1065 }
1066
1067 acpi_status
1068 acpi_os_read_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
1069                                u64 *value, u32 width)
1070 {
1071         int result, size;
1072         u32 value32;
1073
1074         if (!value)
1075                 return AE_BAD_PARAMETER;
1076
1077         switch (width) {
1078         case 8:
1079                 size = 1;
1080                 break;
1081         case 16:
1082                 size = 2;
1083                 break;
1084         case 32:
1085                 size = 4;
1086                 break;
1087         default:
1088                 return AE_ERROR;
1089         }
1090
1091         result = raw_pci_read(pci_id->segment, pci_id->bus,
1092                                 PCI_DEVFN(pci_id->device, pci_id->function),
1093                                 reg, size, &value32);
1094         *value = value32;
1095
1096         return (result ? AE_ERROR : AE_OK);
1097 }
1098
1099 acpi_status
1100 acpi_os_write_pci_configuration(struct acpi_pci_id * pci_id, u32 reg,
1101                                 u64 value, u32 width)
1102 {
1103         int result, size;
1104
1105         switch (width) {
1106         case 8:
1107                 size = 1;
1108                 break;
1109         case 16:
1110                 size = 2;
1111                 break;
1112         case 32:
1113                 size = 4;
1114                 break;
1115         default:
1116                 return AE_ERROR;
1117         }
1118
1119         result = raw_pci_write(pci_id->segment, pci_id->bus,
1120                                 PCI_DEVFN(pci_id->device, pci_id->function),
1121                                 reg, size, value);
1122
1123         return (result ? AE_ERROR : AE_OK);
1124 }
1125
1126 static void acpi_os_execute_deferred(struct work_struct *work)
1127 {
1128         struct acpi_os_dpc *dpc = container_of(work, struct acpi_os_dpc, work);
1129
1130         dpc->function(dpc->context);
1131         kfree(dpc);
1132 }
1133
1134 /*******************************************************************************
1135  *
1136  * FUNCTION:    acpi_os_execute
1137  *
1138  * PARAMETERS:  Type               - Type of the callback
1139  *              Function           - Function to be executed
1140  *              Context            - Function parameters
1141  *
1142  * RETURN:      Status
1143  *
1144  * DESCRIPTION: Depending on type, either queues function for deferred execution or
1145  *              immediately executes function on a separate thread.
1146  *
1147  ******************************************************************************/
1148
1149 acpi_status acpi_os_execute(acpi_execute_type type,
1150                             acpi_osd_exec_callback function, void *context)
1151 {
1152         acpi_status status = AE_OK;
1153         struct acpi_os_dpc *dpc;
1154         struct workqueue_struct *queue;
1155         int ret;
1156         ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
1157                           "Scheduling function [%p(%p)] for deferred execution.\n",
1158                           function, context));
1159
1160         /*
1161          * Allocate/initialize DPC structure.  Note that this memory will be
1162          * freed by the callee.  The kernel handles the work_struct list  in a
1163          * way that allows us to also free its memory inside the callee.
1164          * Because we may want to schedule several tasks with different
1165          * parameters we can't use the approach some kernel code uses of
1166          * having a static work_struct.
1167          */
1168
1169         dpc = kzalloc(sizeof(struct acpi_os_dpc), GFP_ATOMIC);
1170         if (!dpc)
1171                 return AE_NO_MEMORY;
1172
1173         dpc->function = function;
1174         dpc->context = context;
1175
1176         /*
1177          * To prevent lockdep from complaining unnecessarily, make sure that
1178          * there is a different static lockdep key for each workqueue by using
1179          * INIT_WORK() for each of them separately.
1180          */
1181         if (type == OSL_NOTIFY_HANDLER) {
1182                 queue = kacpi_notify_wq;
1183                 INIT_WORK(&dpc->work, acpi_os_execute_deferred);
1184         } else {
1185                 queue = kacpid_wq;
1186                 INIT_WORK(&dpc->work, acpi_os_execute_deferred);
1187         }
1188
1189         /*
1190          * On some machines, a software-initiated SMI causes corruption unless
1191          * the SMI runs on CPU 0.  An SMI can be initiated by any AML, but
1192          * typically it's done in GPE-related methods that are run via
1193          * workqueues, so we can avoid the known corruption cases by always
1194          * queueing on CPU 0.
1195          */
1196         ret = queue_work_on(0, queue, &dpc->work);
1197
1198         if (!ret) {
1199                 printk(KERN_ERR PREFIX
1200                           "Call to queue_work() failed.\n");
1201                 status = AE_ERROR;
1202                 kfree(dpc);
1203         }
1204         return status;
1205 }
1206 EXPORT_SYMBOL(acpi_os_execute);
1207
1208 void acpi_os_wait_events_complete(void)
1209 {
1210         /*
1211          * Make sure the GPE handler or the fixed event handler is not used
1212          * on another CPU after removal.
1213          */
1214         if (acpi_irq_handler)
1215                 synchronize_hardirq(acpi_gbl_FADT.sci_interrupt);
1216         flush_workqueue(kacpid_wq);
1217         flush_workqueue(kacpi_notify_wq);
1218 }
1219
1220 struct acpi_hp_work {
1221         struct work_struct work;
1222         struct acpi_device *adev;
1223         u32 src;
1224 };
1225
1226 static void acpi_hotplug_work_fn(struct work_struct *work)
1227 {
1228         struct acpi_hp_work *hpw = container_of(work, struct acpi_hp_work, work);
1229
1230         acpi_os_wait_events_complete();
1231         acpi_device_hotplug(hpw->adev, hpw->src);
1232         kfree(hpw);
1233 }
1234
1235 acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src)
1236 {
1237         struct acpi_hp_work *hpw;
1238
1239         ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
1240                   "Scheduling hotplug event (%p, %u) for deferred execution.\n",
1241                   adev, src));
1242
1243         hpw = kmalloc(sizeof(*hpw), GFP_KERNEL);
1244         if (!hpw)
1245                 return AE_NO_MEMORY;
1246
1247         INIT_WORK(&hpw->work, acpi_hotplug_work_fn);
1248         hpw->adev = adev;
1249         hpw->src = src;
1250         /*
1251          * We can't run hotplug code in kacpid_wq/kacpid_notify_wq etc., because
1252          * the hotplug code may call driver .remove() functions, which may
1253          * invoke flush_scheduled_work()/acpi_os_wait_events_complete() to flush
1254          * these workqueues.
1255          */
1256         if (!queue_work(kacpi_hotplug_wq, &hpw->work)) {
1257                 kfree(hpw);
1258                 return AE_ERROR;
1259         }
1260         return AE_OK;
1261 }
1262
1263 bool acpi_queue_hotplug_work(struct work_struct *work)
1264 {
1265         return queue_work(kacpi_hotplug_wq, work);
1266 }
1267
1268 acpi_status
1269 acpi_os_create_semaphore(u32 max_units, u32 initial_units, acpi_handle * handle)
1270 {
1271         struct semaphore *sem = NULL;
1272
1273         sem = acpi_os_allocate_zeroed(sizeof(struct semaphore));
1274         if (!sem)
1275                 return AE_NO_MEMORY;
1276
1277         sema_init(sem, initial_units);
1278
1279         *handle = (acpi_handle *) sem;
1280
1281         ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Creating semaphore[%p|%d].\n",
1282                           *handle, initial_units));
1283
1284         return AE_OK;
1285 }
1286
1287 /*
1288  * TODO: A better way to delete semaphores?  Linux doesn't have a
1289  * 'delete_semaphore()' function -- may result in an invalid
1290  * pointer dereference for non-synchronized consumers.  Should
1291  * we at least check for blocked threads and signal/cancel them?
1292  */
1293
1294 acpi_status acpi_os_delete_semaphore(acpi_handle handle)
1295 {
1296         struct semaphore *sem = (struct semaphore *)handle;
1297
1298         if (!sem)
1299                 return AE_BAD_PARAMETER;
1300
1301         ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Deleting semaphore[%p].\n", handle));
1302
1303         BUG_ON(!list_empty(&sem->wait_list));
1304         kfree(sem);
1305         sem = NULL;
1306
1307         return AE_OK;
1308 }
1309
1310 /*
1311  * TODO: Support for units > 1?
1312  */
1313 acpi_status acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 timeout)
1314 {
1315         acpi_status status = AE_OK;
1316         struct semaphore *sem = (struct semaphore *)handle;
1317         long jiffies;
1318         int ret = 0;
1319
1320         if (!acpi_os_initialized)
1321                 return AE_OK;
1322
1323         if (!sem || (units < 1))
1324                 return AE_BAD_PARAMETER;
1325
1326         if (units > 1)
1327                 return AE_SUPPORT;
1328
1329         ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Waiting for semaphore[%p|%d|%d]\n",
1330                           handle, units, timeout));
1331
1332         if (timeout == ACPI_WAIT_FOREVER)
1333                 jiffies = MAX_SCHEDULE_TIMEOUT;
1334         else
1335                 jiffies = msecs_to_jiffies(timeout);
1336
1337         ret = down_timeout(sem, jiffies);
1338         if (ret)
1339                 status = AE_TIME;
1340
1341         if (ACPI_FAILURE(status)) {
1342                 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
1343                                   "Failed to acquire semaphore[%p|%d|%d], %s",
1344                                   handle, units, timeout,
1345                                   acpi_format_exception(status)));
1346         } else {
1347                 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX,
1348                                   "Acquired semaphore[%p|%d|%d]", handle,
1349                                   units, timeout));
1350         }
1351
1352         return status;
1353 }
1354
1355 /*
1356  * TODO: Support for units > 1?
1357  */
1358 acpi_status acpi_os_signal_semaphore(acpi_handle handle, u32 units)
1359 {
1360         struct semaphore *sem = (struct semaphore *)handle;
1361
1362         if (!acpi_os_initialized)
1363                 return AE_OK;
1364
1365         if (!sem || (units < 1))
1366                 return AE_BAD_PARAMETER;
1367
1368         if (units > 1)
1369                 return AE_SUPPORT;
1370
1371         ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Signaling semaphore[%p|%d]\n", handle,
1372                           units));
1373
1374         up(sem);
1375
1376         return AE_OK;
1377 }
1378
1379 #ifdef ACPI_FUTURE_USAGE
1380 u32 acpi_os_get_line(char *buffer)
1381 {
1382
1383 #ifdef ENABLE_DEBUGGER
1384         if (acpi_in_debugger) {
1385                 u32 chars;
1386
1387                 kdb_read(buffer, sizeof(line_buf));
1388
1389                 /* remove the CR kdb includes */
1390                 chars = strlen(buffer) - 1;
1391                 buffer[chars] = '\0';
1392         }
1393 #endif
1394
1395         return 0;
1396 }
1397 #endif                          /*  ACPI_FUTURE_USAGE  */
1398
1399 acpi_status acpi_os_signal(u32 function, void *info)
1400 {
1401         switch (function) {
1402         case ACPI_SIGNAL_FATAL:
1403                 printk(KERN_ERR PREFIX "Fatal opcode executed\n");
1404                 break;
1405         case ACPI_SIGNAL_BREAKPOINT:
1406                 /*
1407                  * AML Breakpoint
1408                  * ACPI spec. says to treat it as a NOP unless
1409                  * you are debugging.  So if/when we integrate
1410                  * AML debugger into the kernel debugger its
1411                  * hook will go here.  But until then it is
1412                  * not useful to print anything on breakpoints.
1413                  */
1414                 break;
1415         default:
1416                 break;
1417         }
1418
1419         return AE_OK;
1420 }
1421
1422 static int __init acpi_os_name_setup(char *str)
1423 {
1424         char *p = acpi_os_name;
1425         int count = ACPI_MAX_OVERRIDE_LEN - 1;
1426
1427         if (!str || !*str)
1428                 return 0;
1429
1430         for (; count-- && *str; str++) {
1431                 if (isalnum(*str) || *str == ' ' || *str == ':')
1432                         *p++ = *str;
1433                 else if (*str == '\'' || *str == '"')
1434                         continue;
1435                 else
1436                         break;
1437         }
1438         *p = 0;
1439
1440         return 1;
1441
1442 }
1443
1444 __setup("acpi_os_name=", acpi_os_name_setup);
1445
1446 #define OSI_STRING_LENGTH_MAX 64        /* arbitrary */
1447 #define OSI_STRING_ENTRIES_MAX 16       /* arbitrary */
1448
1449 struct osi_setup_entry {
1450         char string[OSI_STRING_LENGTH_MAX];
1451         bool enable;
1452 };
1453
1454 static struct osi_setup_entry
1455                 osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = {
1456         {"Module Device", true},
1457         {"Processor Device", true},
1458         {"3.0 _SCP Extensions", true},
1459         {"Processor Aggregator Device", true},
1460 };
1461
1462 void __init acpi_osi_setup(char *str)
1463 {
1464         struct osi_setup_entry *osi;
1465         bool enable = true;
1466         int i;
1467
1468         if (!acpi_gbl_create_osi_method)
1469                 return;
1470
1471         if (str == NULL || *str == '\0') {
1472                 printk(KERN_INFO PREFIX "_OSI method disabled\n");
1473                 acpi_gbl_create_osi_method = FALSE;
1474                 return;
1475         }
1476
1477         if (*str == '!') {
1478                 str++;
1479                 if (*str == '\0') {
1480                         osi_linux.default_disabling = 1;
1481                         return;
1482                 } else if (*str == '*') {
1483                         acpi_update_interfaces(ACPI_DISABLE_ALL_STRINGS);
1484                         for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
1485                                 osi = &osi_setup_entries[i];
1486                                 osi->enable = false;
1487                         }
1488                         return;
1489                 }
1490                 enable = false;
1491         }
1492
1493         for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
1494                 osi = &osi_setup_entries[i];
1495                 if (!strcmp(osi->string, str)) {
1496                         osi->enable = enable;
1497                         break;
1498                 } else if (osi->string[0] == '\0') {
1499                         osi->enable = enable;
1500                         strncpy(osi->string, str, OSI_STRING_LENGTH_MAX);
1501                         break;
1502                 }
1503         }
1504 }
1505
1506 static void __init set_osi_linux(unsigned int enable)
1507 {
1508         if (osi_linux.enable != enable)
1509                 osi_linux.enable = enable;
1510
1511         if (osi_linux.enable)
1512                 acpi_osi_setup("Linux");
1513         else
1514                 acpi_osi_setup("!Linux");
1515
1516         return;
1517 }
1518
1519 static void __init acpi_cmdline_osi_linux(unsigned int enable)
1520 {
1521         osi_linux.cmdline = 1;  /* cmdline set the default and override DMI */
1522         osi_linux.dmi = 0;
1523         set_osi_linux(enable);
1524
1525         return;
1526 }
1527
1528 void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
1529 {
1530         printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
1531
1532         if (enable == -1)
1533                 return;
1534
1535         osi_linux.dmi = 1;      /* DMI knows that this box asks OSI(Linux) */
1536         set_osi_linux(enable);
1537
1538         return;
1539 }
1540
1541 /*
1542  * Modify the list of "OS Interfaces" reported to BIOS via _OSI
1543  *
1544  * empty string disables _OSI
1545  * string starting with '!' disables that string
1546  * otherwise string is added to list, augmenting built-in strings
1547  */
1548 static void __init acpi_osi_setup_late(void)
1549 {
1550         struct osi_setup_entry *osi;
1551         char *str;
1552         int i;
1553         acpi_status status;
1554
1555         if (osi_linux.default_disabling) {
1556                 status = acpi_update_interfaces(ACPI_DISABLE_ALL_VENDOR_STRINGS);
1557
1558                 if (ACPI_SUCCESS(status))
1559                         printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors\n");
1560         }
1561
1562         for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
1563                 osi = &osi_setup_entries[i];
1564                 str = osi->string;
1565
1566                 if (*str == '\0')
1567                         break;
1568                 if (osi->enable) {
1569                         status = acpi_install_interface(str);
1570
1571                         if (ACPI_SUCCESS(status))
1572                                 printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
1573                 } else {
1574                         status = acpi_remove_interface(str);
1575
1576                         if (ACPI_SUCCESS(status))
1577                                 printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
1578                 }
1579         }
1580 }
1581
1582 static int __init osi_setup(char *str)
1583 {
1584         if (str && !strcmp("Linux", str))
1585                 acpi_cmdline_osi_linux(1);
1586         else if (str && !strcmp("!Linux", str))
1587                 acpi_cmdline_osi_linux(0);
1588         else
1589                 acpi_osi_setup(str);
1590
1591         return 1;
1592 }
1593
1594 __setup("acpi_osi=", osi_setup);
1595
1596 /*
1597  * Disable the auto-serialization of named objects creation methods.
1598  *
1599  * This feature is enabled by default.  It marks the AML control methods
1600  * that contain the opcodes to create named objects as "Serialized".
1601  */
1602 static int __init acpi_no_auto_serialize_setup(char *str)
1603 {
1604         acpi_gbl_auto_serialize_methods = FALSE;
1605         pr_info("ACPI: auto-serialization disabled\n");
1606
1607         return 1;
1608 }
1609
1610 __setup("acpi_no_auto_serialize", acpi_no_auto_serialize_setup);
1611
1612 /* Check of resource interference between native drivers and ACPI
1613  * OperationRegions (SystemIO and System Memory only).
1614  * IO ports and memory declared in ACPI might be used by the ACPI subsystem
1615  * in arbitrary AML code and can interfere with legacy drivers.
1616  * acpi_enforce_resources= can be set to:
1617  *
1618  *   - strict (default) (2)
1619  *     -> further driver trying to access the resources will not load
1620  *   - lax              (1)
1621  *     -> further driver trying to access the resources will load, but you
1622  *     get a system message that something might go wrong...
1623  *
1624  *   - no               (0)
1625  *     -> ACPI Operation Region resources will not be registered
1626  *
1627  */
1628 #define ENFORCE_RESOURCES_STRICT 2
1629 #define ENFORCE_RESOURCES_LAX    1
1630 #define ENFORCE_RESOURCES_NO     0
1631
1632 static unsigned int acpi_enforce_resources = ENFORCE_RESOURCES_STRICT;
1633
1634 static int __init acpi_enforce_resources_setup(char *str)
1635 {
1636         if (str == NULL || *str == '\0')
1637                 return 0;
1638
1639         if (!strcmp("strict", str))
1640                 acpi_enforce_resources = ENFORCE_RESOURCES_STRICT;
1641         else if (!strcmp("lax", str))
1642                 acpi_enforce_resources = ENFORCE_RESOURCES_LAX;
1643         else if (!strcmp("no", str))
1644                 acpi_enforce_resources = ENFORCE_RESOURCES_NO;
1645
1646         return 1;
1647 }
1648
1649 __setup("acpi_enforce_resources=", acpi_enforce_resources_setup);
1650
1651 /* Check for resource conflicts between ACPI OperationRegions and native
1652  * drivers */
1653 int acpi_check_resource_conflict(const struct resource *res)
1654 {
1655         acpi_adr_space_type space_id;
1656         acpi_size length;
1657         u8 warn = 0;
1658         int clash = 0;
1659
1660         if (acpi_enforce_resources == ENFORCE_RESOURCES_NO)
1661                 return 0;
1662         if (!(res->flags & IORESOURCE_IO) && !(res->flags & IORESOURCE_MEM))
1663                 return 0;
1664
1665         if (res->flags & IORESOURCE_IO)
1666                 space_id = ACPI_ADR_SPACE_SYSTEM_IO;
1667         else
1668                 space_id = ACPI_ADR_SPACE_SYSTEM_MEMORY;
1669
1670         length = resource_size(res);
1671         if (acpi_enforce_resources != ENFORCE_RESOURCES_NO)
1672                 warn = 1;
1673         clash = acpi_check_address_range(space_id, res->start, length, warn);
1674
1675         if (clash) {
1676                 if (acpi_enforce_resources != ENFORCE_RESOURCES_NO) {
1677                         if (acpi_enforce_resources == ENFORCE_RESOURCES_LAX)
1678                                 printk(KERN_NOTICE "ACPI: This conflict may"
1679                                        " cause random problems and system"
1680                                        " instability\n");
1681                         printk(KERN_INFO "ACPI: If an ACPI driver is available"
1682                                " for this device, you should use it instead of"
1683                                " the native driver\n");
1684                 }
1685                 if (acpi_enforce_resources == ENFORCE_RESOURCES_STRICT)
1686                         return -EBUSY;
1687         }
1688         return 0;
1689 }
1690 EXPORT_SYMBOL(acpi_check_resource_conflict);
1691
1692 int acpi_check_region(resource_size_t start, resource_size_t n,
1693                       const char *name)
1694 {
1695         struct resource res = {
1696                 .start = start,
1697                 .end   = start + n - 1,
1698                 .name  = name,
1699                 .flags = IORESOURCE_IO,
1700         };
1701
1702         return acpi_check_resource_conflict(&res);
1703 }
1704 EXPORT_SYMBOL(acpi_check_region);
1705
1706 /*
1707  * Let drivers know whether the resource checks are effective
1708  */
1709 int acpi_resources_are_enforced(void)
1710 {
1711         return acpi_enforce_resources == ENFORCE_RESOURCES_STRICT;
1712 }
1713 EXPORT_SYMBOL(acpi_resources_are_enforced);
1714
1715 bool acpi_osi_is_win8(void)
1716 {
1717         return acpi_gbl_osi_data >= ACPI_OSI_WIN_8;
1718 }
1719 EXPORT_SYMBOL(acpi_osi_is_win8);
1720
1721 /*
1722  * Deallocate the memory for a spinlock.
1723  */
1724 void acpi_os_delete_lock(acpi_spinlock handle)
1725 {
1726         ACPI_FREE(handle);
1727 }
1728
1729 /*
1730  * Acquire a spinlock.
1731  *
1732  * handle is a pointer to the spinlock_t.
1733  */
1734
1735 acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock lockp)
1736 {
1737         acpi_cpu_flags flags;
1738         spin_lock_irqsave(lockp, flags);
1739         return flags;
1740 }
1741
1742 /*
1743  * Release a spinlock. See above.
1744  */
1745
1746 void acpi_os_release_lock(acpi_spinlock lockp, acpi_cpu_flags flags)
1747 {
1748         spin_unlock_irqrestore(lockp, flags);
1749 }
1750
1751 #ifndef ACPI_USE_LOCAL_CACHE
1752
1753 /*******************************************************************************
1754  *
1755  * FUNCTION:    acpi_os_create_cache
1756  *
1757  * PARAMETERS:  name      - Ascii name for the cache
1758  *              size      - Size of each cached object
1759  *              depth     - Maximum depth of the cache (in objects) <ignored>
1760  *              cache     - Where the new cache object is returned
1761  *
1762  * RETURN:      status
1763  *
1764  * DESCRIPTION: Create a cache object
1765  *
1766  ******************************************************************************/
1767
1768 acpi_status
1769 acpi_os_create_cache(char *name, u16 size, u16 depth, acpi_cache_t ** cache)
1770 {
1771         *cache = kmem_cache_create(name, size, 0, 0, NULL);
1772         if (*cache == NULL)
1773                 return AE_ERROR;
1774         else
1775                 return AE_OK;
1776 }
1777
1778 /*******************************************************************************
1779  *
1780  * FUNCTION:    acpi_os_purge_cache
1781  *
1782  * PARAMETERS:  Cache           - Handle to cache object
1783  *
1784  * RETURN:      Status
1785  *
1786  * DESCRIPTION: Free all objects within the requested cache.
1787  *
1788  ******************************************************************************/
1789
1790 acpi_status acpi_os_purge_cache(acpi_cache_t * cache)
1791 {
1792         kmem_cache_shrink(cache);
1793         return (AE_OK);
1794 }
1795
1796 /*******************************************************************************
1797  *
1798  * FUNCTION:    acpi_os_delete_cache
1799  *
1800  * PARAMETERS:  Cache           - Handle to cache object
1801  *
1802  * RETURN:      Status
1803  *
1804  * DESCRIPTION: Free all objects within the requested cache and delete the
1805  *              cache object.
1806  *
1807  ******************************************************************************/
1808
1809 acpi_status acpi_os_delete_cache(acpi_cache_t * cache)
1810 {
1811         kmem_cache_destroy(cache);
1812         return (AE_OK);
1813 }
1814
1815 /*******************************************************************************
1816  *
1817  * FUNCTION:    acpi_os_release_object
1818  *
1819  * PARAMETERS:  Cache       - Handle to cache object
1820  *              Object      - The object to be released
1821  *
1822  * RETURN:      None
1823  *
1824  * DESCRIPTION: Release an object to the specified cache.  If cache is full,
1825  *              the object is deleted.
1826  *
1827  ******************************************************************************/
1828
1829 acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object)
1830 {
1831         kmem_cache_free(cache, object);
1832         return (AE_OK);
1833 }
1834 #endif
1835
1836 static int __init acpi_no_static_ssdt_setup(char *s)
1837 {
1838         acpi_gbl_disable_ssdt_table_install = TRUE;
1839         pr_info("ACPI: static SSDT installation disabled\n");
1840
1841         return 0;
1842 }
1843
1844 early_param("acpi_no_static_ssdt", acpi_no_static_ssdt_setup);
1845
1846 static int __init acpi_disable_return_repair(char *s)
1847 {
1848         printk(KERN_NOTICE PREFIX
1849                "ACPI: Predefined validation mechanism disabled\n");
1850         acpi_gbl_disable_auto_repair = TRUE;
1851
1852         return 1;
1853 }
1854
1855 __setup("acpica_no_return_repair", acpi_disable_return_repair);
1856
1857 acpi_status __init acpi_os_initialize(void)
1858 {
1859         acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
1860         acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
1861         acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block);
1862         acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block);
1863         if (acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER) {
1864                 /*
1865                  * Use acpi_os_map_generic_address to pre-map the reset
1866                  * register if it's in system memory.
1867                  */
1868                 int rv;
1869
1870                 rv = acpi_os_map_generic_address(&acpi_gbl_FADT.reset_register);
1871                 pr_debug(PREFIX "%s: map reset_reg status %d\n", __func__, rv);
1872         }
1873         acpi_os_initialized = true;
1874
1875         return AE_OK;
1876 }
1877
1878 acpi_status __init acpi_os_initialize1(void)
1879 {
1880         kacpid_wq = alloc_workqueue("kacpid", 0, 1);
1881         kacpi_notify_wq = alloc_workqueue("kacpi_notify", 0, 1);
1882         kacpi_hotplug_wq = alloc_ordered_workqueue("kacpi_hotplug", 0);
1883         BUG_ON(!kacpid_wq);
1884         BUG_ON(!kacpi_notify_wq);
1885         BUG_ON(!kacpi_hotplug_wq);
1886         acpi_install_interface_handler(acpi_osi_handler);
1887         acpi_osi_setup_late();
1888         return AE_OK;
1889 }
1890
1891 acpi_status acpi_os_terminate(void)
1892 {
1893         if (acpi_irq_handler) {
1894                 acpi_os_remove_interrupt_handler(acpi_gbl_FADT.sci_interrupt,
1895                                                  acpi_irq_handler);
1896         }
1897
1898         acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe1_block);
1899         acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe0_block);
1900         acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1b_event_block);
1901         acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1a_event_block);
1902         if (acpi_gbl_FADT.flags & ACPI_FADT_RESET_REGISTER)
1903                 acpi_os_unmap_generic_address(&acpi_gbl_FADT.reset_register);
1904
1905         destroy_workqueue(kacpid_wq);
1906         destroy_workqueue(kacpi_notify_wq);
1907         destroy_workqueue(kacpi_hotplug_wq);
1908
1909         return AE_OK;
1910 }
1911
1912 acpi_status acpi_os_prepare_sleep(u8 sleep_state, u32 pm1a_control,
1913                                   u32 pm1b_control)
1914 {
1915         int rc = 0;
1916         if (__acpi_os_prepare_sleep)
1917                 rc = __acpi_os_prepare_sleep(sleep_state,
1918                                              pm1a_control, pm1b_control);
1919         if (rc < 0)
1920                 return AE_ERROR;
1921         else if (rc > 0)
1922                 return AE_CTRL_SKIP;
1923
1924         return AE_OK;
1925 }
1926
1927 void acpi_os_set_prepare_sleep(int (*func)(u8 sleep_state,
1928                                u32 pm1a_ctrl, u32 pm1b_ctrl))
1929 {
1930         __acpi_os_prepare_sleep = func;
1931 }
1932
1933 acpi_status acpi_os_prepare_extended_sleep(u8 sleep_state, u32 val_a,
1934                                   u32 val_b)
1935 {
1936         int rc = 0;
1937         if (__acpi_os_prepare_extended_sleep)
1938                 rc = __acpi_os_prepare_extended_sleep(sleep_state,
1939                                              val_a, val_b);
1940         if (rc < 0)
1941                 return AE_ERROR;
1942         else if (rc > 0)
1943                 return AE_CTRL_SKIP;
1944
1945         return AE_OK;
1946 }
1947
1948 void acpi_os_set_prepare_extended_sleep(int (*func)(u8 sleep_state,
1949                                u32 val_a, u32 val_b))
1950 {
1951         __acpi_os_prepare_extended_sleep = func;
1952 }