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