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