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