OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [acpi/] [tables/] [tbxface.c] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/******************************************************************************
2
 *
3
 * Module Name: tbxface - Public interfaces to the ACPI subsystem
4
 *                         ACPI table oriented interfaces
5
 *
6
 *****************************************************************************/
7
 
8
/*
9
 * Copyright (C) 2000 - 2007, R. Byron Moore
10
 * All rights reserved.
11
 *
12
 * Redistribution and use in source and binary forms, with or without
13
 * modification, are permitted provided that the following conditions
14
 * are met:
15
 * 1. Redistributions of source code must retain the above copyright
16
 *    notice, this list of conditions, and the following disclaimer,
17
 *    without modification.
18
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19
 *    substantially similar to the "NO WARRANTY" disclaimer below
20
 *    ("Disclaimer") and any redistribution must be conditioned upon
21
 *    including a substantially similar Disclaimer requirement for further
22
 *    binary redistribution.
23
 * 3. Neither the names of the above-listed copyright holders nor the names
24
 *    of any contributors may be used to endorse or promote products derived
25
 *    from this software without specific prior written permission.
26
 *
27
 * Alternatively, this software may be distributed under the terms of the
28
 * GNU General Public License ("GPL") version 2 as published by the Free
29
 * Software Foundation.
30
 *
31
 * NO WARRANTY
32
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42
 * POSSIBILITY OF SUCH DAMAGES.
43
 */
44
 
45
#include <acpi/acpi.h>
46
#include <acpi/acnamesp.h>
47
#include <acpi/actables.h>
48
 
49
#define _COMPONENT          ACPI_TABLES
50
ACPI_MODULE_NAME("tbxface")
51
 
52
/* Local prototypes */
53
static acpi_status acpi_tb_load_namespace(void);
54
 
55
static int no_auto_ssdt;
56
 
57
/*******************************************************************************
58
 *
59
 * FUNCTION:    acpi_allocate_root_table
60
 *
61
 * PARAMETERS:  initial_table_count - Size of initial_table_array, in number of
62
 *                                    struct acpi_table_desc structures
63
 *
64
 * RETURN:      Status
65
 *
66
 * DESCRIPTION: Allocate a root table array. Used by i_aSL compiler and
67
 *              acpi_initialize_tables.
68
 *
69
 ******************************************************************************/
70
 
71
acpi_status acpi_allocate_root_table(u32 initial_table_count)
72
{
73
 
74
        acpi_gbl_root_table_list.size = initial_table_count;
75
        acpi_gbl_root_table_list.flags = ACPI_ROOT_ALLOW_RESIZE;
76
 
77
        return (acpi_tb_resize_root_table_list());
78
}
79
 
80
/*******************************************************************************
81
 *
82
 * FUNCTION:    acpi_initialize_tables
83
 *
84
 * PARAMETERS:  initial_table_array - Pointer to an array of pre-allocated
85
 *                                    struct acpi_table_desc structures. If NULL, the
86
 *                                    array is dynamically allocated.
87
 *              initial_table_count - Size of initial_table_array, in number of
88
 *                                    struct acpi_table_desc structures
89
 *              allow_realloc       - Flag to tell Table Manager if resize of
90
 *                                    pre-allocated array is allowed. Ignored
91
 *                                    if initial_table_array is NULL.
92
 *
93
 * RETURN:      Status
94
 *
95
 * DESCRIPTION: Initialize the table manager, get the RSDP and RSDT/XSDT.
96
 *
97
 * NOTE:        Allows static allocation of the initial table array in order
98
 *              to avoid the use of dynamic memory in confined environments
99
 *              such as the kernel boot sequence where it may not be available.
100
 *
101
 *              If the host OS memory managers are initialized, use NULL for
102
 *              initial_table_array, and the table will be dynamically allocated.
103
 *
104
 ******************************************************************************/
105
 
106
acpi_status __init
107
acpi_initialize_tables(struct acpi_table_desc * initial_table_array,
108
                       u32 initial_table_count, u8 allow_resize)
109
{
110
        acpi_physical_address rsdp_address;
111
        acpi_status status;
112
 
113
        ACPI_FUNCTION_TRACE(acpi_initialize_tables);
114
 
115
        /*
116
         * Set up the Root Table Array
117
         * Allocate the table array if requested
118
         */
119
        if (!initial_table_array) {
120
                status = acpi_allocate_root_table(initial_table_count);
121
                if (ACPI_FAILURE(status)) {
122
                        return_ACPI_STATUS(status);
123
                }
124
        } else {
125
                /* Root Table Array has been statically allocated by the host */
126
 
127
                ACPI_MEMSET(initial_table_array, 0,
128
                            initial_table_count *
129
                            sizeof(struct acpi_table_desc));
130
 
131
                acpi_gbl_root_table_list.tables = initial_table_array;
132
                acpi_gbl_root_table_list.size = initial_table_count;
133
                acpi_gbl_root_table_list.flags = ACPI_ROOT_ORIGIN_UNKNOWN;
134
                if (allow_resize) {
135
                        acpi_gbl_root_table_list.flags |=
136
                            ACPI_ROOT_ALLOW_RESIZE;
137
                }
138
        }
139
 
140
        /* Get the address of the RSDP */
141
 
142
        rsdp_address = acpi_os_get_root_pointer();
143
        if (!rsdp_address) {
144
                return_ACPI_STATUS(AE_NOT_FOUND);
145
        }
146
 
147
        /*
148
         * Get the root table (RSDT or XSDT) and extract all entries to the local
149
         * Root Table Array. This array contains the information of the RSDT/XSDT
150
         * in a common, more useable format.
151
         */
152
        status =
153
            acpi_tb_parse_root_table(rsdp_address, ACPI_TABLE_ORIGIN_MAPPED);
154
        return_ACPI_STATUS(status);
155
}
156
 
157
/*******************************************************************************
158
 *
159
 * FUNCTION:    acpi_reallocate_root_table
160
 *
161
 * PARAMETERS:  None
162
 *
163
 * RETURN:      Status
164
 *
165
 * DESCRIPTION: Reallocate Root Table List into dynamic memory. Copies the
166
 *              root list from the previously provided scratch area. Should
167
 *              be called once dynamic memory allocation is available in the
168
 *              kernel
169
 *
170
 ******************************************************************************/
171
acpi_status acpi_reallocate_root_table(void)
172
{
173
        struct acpi_table_desc *tables;
174
        acpi_size new_size;
175
 
176
        ACPI_FUNCTION_TRACE(acpi_reallocate_root_table);
177
 
178
        /*
179
         * Only reallocate the root table if the host provided a static buffer
180
         * for the table array in the call to acpi_initialize_tables.
181
         */
182
        if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
183
                return_ACPI_STATUS(AE_SUPPORT);
184
        }
185
 
186
        new_size =
187
            (acpi_gbl_root_table_list.count +
188
             ACPI_ROOT_TABLE_SIZE_INCREMENT) * sizeof(struct acpi_table_desc);
189
 
190
        /* Create new array and copy the old array */
191
 
192
        tables = ACPI_ALLOCATE_ZEROED(new_size);
193
        if (!tables) {
194
                return_ACPI_STATUS(AE_NO_MEMORY);
195
        }
196
 
197
        ACPI_MEMCPY(tables, acpi_gbl_root_table_list.tables, new_size);
198
 
199
        acpi_gbl_root_table_list.size = acpi_gbl_root_table_list.count;
200
        acpi_gbl_root_table_list.tables = tables;
201
        acpi_gbl_root_table_list.flags =
202
            ACPI_ROOT_ORIGIN_ALLOCATED | ACPI_ROOT_ALLOW_RESIZE;
203
 
204
        return_ACPI_STATUS(AE_OK);
205
}
206
 
207
/*******************************************************************************
208
 *
209
 * FUNCTION:    acpi_load_table
210
 *
211
 * PARAMETERS:  table_ptr       - pointer to a buffer containing the entire
212
 *                                table to be loaded
213
 *
214
 * RETURN:      Status
215
 *
216
 * DESCRIPTION: This function is called to load a table from the caller's
217
 *              buffer. The buffer must contain an entire ACPI Table including
218
 *              a valid header. The header fields will be verified, and if it
219
 *              is determined that the table is invalid, the call will fail.
220
 *
221
 ******************************************************************************/
222
acpi_status acpi_load_table(struct acpi_table_header *table_ptr)
223
{
224
        acpi_status status;
225
        acpi_native_uint table_index;
226
        struct acpi_table_desc table_desc;
227
 
228
        if (!table_ptr)
229
                return AE_BAD_PARAMETER;
230
 
231
        ACPI_MEMSET(&table_desc, 0, sizeof(struct acpi_table_desc));
232
        table_desc.pointer = table_ptr;
233
        table_desc.length = table_ptr->length;
234
        table_desc.flags = ACPI_TABLE_ORIGIN_UNKNOWN;
235
 
236
        /*
237
         * Install the new table into the local data structures
238
         */
239
        status = acpi_tb_add_table(&table_desc, &table_index);
240
        if (ACPI_FAILURE(status)) {
241
                return status;
242
        }
243
        status = acpi_ns_load_table(table_index, acpi_gbl_root_node);
244
        return status;
245
}
246
 
247
ACPI_EXPORT_SYMBOL(acpi_load_table)
248
 
249
/******************************************************************************
250
 *
251
 * FUNCTION:    acpi_get_table_header
252
 *
253
 * PARAMETERS:  Signature           - ACPI signature of needed table
254
 *              Instance            - Which instance (for SSDTs)
255
 *              out_table_header    - The pointer to the table header to fill
256
 *
257
 * RETURN:      Status and pointer to mapped table header
258
 *
259
 * DESCRIPTION: Finds an ACPI table header.
260
 *
261
 * NOTE:        Caller is responsible in unmapping the header with
262
 *              acpi_os_unmap_memory
263
 *
264
 *****************************************************************************/
265
acpi_status
266
acpi_get_table_header(char *signature,
267
                      acpi_native_uint instance,
268
                      struct acpi_table_header * out_table_header)
269
{
270
        acpi_native_uint i;
271
        acpi_native_uint j;
272
        struct acpi_table_header *header;
273
 
274
        /* Parameter validation */
275
 
276
        if (!signature || !out_table_header) {
277
                return (AE_BAD_PARAMETER);
278
        }
279
 
280
        /*
281
         * Walk the root table list
282
         */
283
        for (i = 0, j = 0; i < acpi_gbl_root_table_list.count; i++) {
284
                if (!ACPI_COMPARE_NAME
285
                    (&(acpi_gbl_root_table_list.tables[i].signature),
286
                     signature)) {
287
                        continue;
288
                }
289
 
290
                if (++j < instance) {
291
                        continue;
292
                }
293
 
294
                if (!acpi_gbl_root_table_list.tables[i].pointer) {
295
                        if ((acpi_gbl_root_table_list.tables[i].
296
                             flags & ACPI_TABLE_ORIGIN_MASK) ==
297
                            ACPI_TABLE_ORIGIN_MAPPED) {
298
                                header =
299
                                    acpi_os_map_memory(acpi_gbl_root_table_list.
300
                                                       tables[i].address,
301
                                                       sizeof(struct
302
                                                              acpi_table_header));
303
                                if (!header) {
304
                                        return AE_NO_MEMORY;
305
                                }
306
                                ACPI_MEMCPY(out_table_header, header,
307
                                            sizeof(struct acpi_table_header));
308
                                acpi_os_unmap_memory(header,
309
                                                     sizeof(struct
310
                                                            acpi_table_header));
311
                        } else {
312
                                return AE_NOT_FOUND;
313
                        }
314
                } else {
315
                        ACPI_MEMCPY(out_table_header,
316
                                    acpi_gbl_root_table_list.tables[i].pointer,
317
                                    sizeof(struct acpi_table_header));
318
                }
319
                return (AE_OK);
320
        }
321
 
322
        return (AE_NOT_FOUND);
323
}
324
 
325
ACPI_EXPORT_SYMBOL(acpi_get_table_header)
326
 
327
/******************************************************************************
328
 *
329
 * FUNCTION:    acpi_unload_table_id
330
 *
331
 * PARAMETERS:  id            - Owner ID of the table to be removed.
332
 *
333
 * RETURN:      Status
334
 *
335
 * DESCRIPTION: This routine is used to force the unload of a table (by id)
336
 *
337
 ******************************************************************************/
338
acpi_status acpi_unload_table_id(acpi_owner_id id)
339
{
340
        int i;
341
        acpi_status status = AE_NOT_EXIST;
342
 
343
        ACPI_FUNCTION_TRACE(acpi_unload_table_id);
344
 
345
        /* Find table in the global table list */
346
        for (i = 0; i < acpi_gbl_root_table_list.count; ++i) {
347
                if (id != acpi_gbl_root_table_list.tables[i].owner_id) {
348
                        continue;
349
                }
350
                /*
351
                 * Delete all namespace objects owned by this table. Note that these
352
                 * objects can appear anywhere in the namespace by virtue of the AML
353
                 * "Scope" operator. Thus, we need to track ownership by an ID, not
354
                 * simply a position within the hierarchy
355
                 */
356
                acpi_tb_delete_namespace_by_owner(i);
357
                status = acpi_tb_release_owner_id(i);
358
                acpi_tb_set_table_loaded_flag(i, FALSE);
359
                break;
360
        }
361
        return_ACPI_STATUS(status);
362
}
363
 
364
ACPI_EXPORT_SYMBOL(acpi_unload_table_id)
365
 
366
/*******************************************************************************
367
 *
368
 * FUNCTION:    acpi_get_table
369
 *
370
 * PARAMETERS:  Signature           - ACPI signature of needed table
371
 *              Instance            - Which instance (for SSDTs)
372
 *              out_table           - Where the pointer to the table is returned
373
 *
374
 * RETURN:      Status and pointer to table
375
 *
376
 * DESCRIPTION: Finds and verifies an ACPI table.
377
 *
378
 *****************************************************************************/
379
acpi_status
380
acpi_get_table(char *signature,
381
               acpi_native_uint instance, struct acpi_table_header **out_table)
382
{
383
        acpi_native_uint i;
384
        acpi_native_uint j;
385
        acpi_status status;
386
 
387
        /* Parameter validation */
388
 
389
        if (!signature || !out_table) {
390
                return (AE_BAD_PARAMETER);
391
        }
392
 
393
        /*
394
         * Walk the root table list
395
         */
396
        for (i = 0, j = 0; i < acpi_gbl_root_table_list.count; i++) {
397
                if (!ACPI_COMPARE_NAME
398
                    (&(acpi_gbl_root_table_list.tables[i].signature),
399
                     signature)) {
400
                        continue;
401
                }
402
 
403
                if (++j < instance) {
404
                        continue;
405
                }
406
 
407
                status =
408
                    acpi_tb_verify_table(&acpi_gbl_root_table_list.tables[i]);
409
                if (ACPI_SUCCESS(status)) {
410
                        *out_table = acpi_gbl_root_table_list.tables[i].pointer;
411
                }
412
 
413
                if (!acpi_gbl_permanent_mmap) {
414
                        acpi_gbl_root_table_list.tables[i].pointer = NULL;
415
                }
416
 
417
                return (status);
418
        }
419
 
420
        return (AE_NOT_FOUND);
421
}
422
 
423
ACPI_EXPORT_SYMBOL(acpi_get_table)
424
 
425
/*******************************************************************************
426
 *
427
 * FUNCTION:    acpi_get_table_by_index
428
 *
429
 * PARAMETERS:  table_index         - Table index
430
 *              Table               - Where the pointer to the table is returned
431
 *
432
 * RETURN:      Status and pointer to the table
433
 *
434
 * DESCRIPTION: Obtain a table by an index into the global table list.
435
 *
436
 ******************************************************************************/
437
acpi_status
438
acpi_get_table_by_index(acpi_native_uint table_index,
439
                        struct acpi_table_header ** table)
440
{
441
        acpi_status status;
442
 
443
        ACPI_FUNCTION_TRACE(acpi_get_table_by_index);
444
 
445
        /* Parameter validation */
446
 
447
        if (!table) {
448
                return_ACPI_STATUS(AE_BAD_PARAMETER);
449
        }
450
 
451
        (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
452
 
453
        /* Validate index */
454
 
455
        if (table_index >= acpi_gbl_root_table_list.count) {
456
                (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
457
                return_ACPI_STATUS(AE_BAD_PARAMETER);
458
        }
459
 
460
        if (!acpi_gbl_root_table_list.tables[table_index].pointer) {
461
 
462
                /* Table is not mapped, map it */
463
 
464
                status =
465
                    acpi_tb_verify_table(&acpi_gbl_root_table_list.
466
                                         tables[table_index]);
467
                if (ACPI_FAILURE(status)) {
468
                        (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
469
                        return_ACPI_STATUS(status);
470
                }
471
        }
472
 
473
        *table = acpi_gbl_root_table_list.tables[table_index].pointer;
474
        (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
475
        return_ACPI_STATUS(AE_OK);
476
}
477
 
478
ACPI_EXPORT_SYMBOL(acpi_get_table_by_index)
479
 
480
/*******************************************************************************
481
 *
482
 * FUNCTION:    acpi_tb_load_namespace
483
 *
484
 * PARAMETERS:  None
485
 *
486
 * RETURN:      Status
487
 *
488
 * DESCRIPTION: Load the namespace from the DSDT and all SSDTs/PSDTs found in
489
 *              the RSDT/XSDT.
490
 *
491
 ******************************************************************************/
492
static acpi_status acpi_tb_load_namespace(void)
493
{
494
        acpi_status status;
495
        struct acpi_table_header *table;
496
        acpi_native_uint i;
497
 
498
        ACPI_FUNCTION_TRACE(tb_load_namespace);
499
 
500
        (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
501
 
502
        /*
503
         * Load the namespace. The DSDT is required, but any SSDT and PSDT tables
504
         * are optional.
505
         */
506
        if (!acpi_gbl_root_table_list.count ||
507
            !ACPI_COMPARE_NAME(&
508
                               (acpi_gbl_root_table_list.
509
                                tables[ACPI_TABLE_INDEX_DSDT].signature),
510
                               ACPI_SIG_DSDT)
511
            ||
512
            ACPI_FAILURE(acpi_tb_verify_table
513
                         (&acpi_gbl_root_table_list.
514
                          tables[ACPI_TABLE_INDEX_DSDT]))) {
515
                status = AE_NO_ACPI_TABLES;
516
                goto unlock_and_exit;
517
        }
518
 
519
        /*
520
         * Find DSDT table
521
         */
522
        status =
523
            acpi_os_table_override(acpi_gbl_root_table_list.
524
                                   tables[ACPI_TABLE_INDEX_DSDT].pointer,
525
                                   &table);
526
        if (ACPI_SUCCESS(status) && table) {
527
                /*
528
                 * DSDT table has been found
529
                 */
530
                acpi_tb_delete_table(&acpi_gbl_root_table_list.
531
                                     tables[ACPI_TABLE_INDEX_DSDT]);
532
                acpi_gbl_root_table_list.tables[ACPI_TABLE_INDEX_DSDT].pointer =
533
                    table;
534
                acpi_gbl_root_table_list.tables[ACPI_TABLE_INDEX_DSDT].length =
535
                    table->length;
536
                acpi_gbl_root_table_list.tables[ACPI_TABLE_INDEX_DSDT].flags =
537
                    ACPI_TABLE_ORIGIN_UNKNOWN;
538
 
539
                ACPI_INFO((AE_INFO, "Table DSDT replaced by host OS"));
540
                acpi_tb_print_table_header(0, table);
541
 
542
                if (no_auto_ssdt == 0) {
543
                        printk(KERN_WARNING "ACPI: DSDT override uses original SSDTs unless \"acpi_no_auto_ssdt\"");
544
                }
545
        }
546
 
547
        status =
548
            acpi_tb_verify_table(&acpi_gbl_root_table_list.
549
                                 tables[ACPI_TABLE_INDEX_DSDT]);
550
        if (ACPI_FAILURE(status)) {
551
 
552
                /* A valid DSDT is required */
553
 
554
                status = AE_NO_ACPI_TABLES;
555
                goto unlock_and_exit;
556
        }
557
 
558
        (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
559
 
560
        /*
561
         * Load and parse tables.
562
         */
563
        status = acpi_ns_load_table(ACPI_TABLE_INDEX_DSDT, acpi_gbl_root_node);
564
        if (ACPI_FAILURE(status)) {
565
                return_ACPI_STATUS(status);
566
        }
567
 
568
        /*
569
         * Load any SSDT or PSDT tables. Note: Loop leaves tables locked
570
         */
571
        (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
572
        for (i = 0; i < acpi_gbl_root_table_list.count; ++i) {
573
                if ((!ACPI_COMPARE_NAME
574
                     (&(acpi_gbl_root_table_list.tables[i].signature),
575
                      ACPI_SIG_SSDT)
576
                     &&
577
                     !ACPI_COMPARE_NAME(&
578
                                        (acpi_gbl_root_table_list.tables[i].
579
                                         signature), ACPI_SIG_PSDT))
580
                    ||
581
                    ACPI_FAILURE(acpi_tb_verify_table
582
                                 (&acpi_gbl_root_table_list.tables[i]))) {
583
                        continue;
584
                }
585
 
586
                if (no_auto_ssdt) {
587
                        printk(KERN_WARNING "ACPI: SSDT ignored due to \"acpi_no_auto_ssdt\"\n");
588
                        continue;
589
                }
590
 
591
                /* Ignore errors while loading tables, get as many as possible */
592
 
593
                (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
594
                (void)acpi_ns_load_table(i, acpi_gbl_root_node);
595
                (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
596
        }
597
 
598
        ACPI_DEBUG_PRINT((ACPI_DB_INIT, "ACPI Tables successfully acquired\n"));
599
 
600
      unlock_and_exit:
601
        (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
602
        return_ACPI_STATUS(status);
603
}
604
 
605
/*******************************************************************************
606
 *
607
 * FUNCTION:    acpi_load_tables
608
 *
609
 * PARAMETERS:  None
610
 *
611
 * RETURN:      Status
612
 *
613
 * DESCRIPTION: Load the ACPI tables from the RSDT/XSDT
614
 *
615
 ******************************************************************************/
616
 
617
acpi_status acpi_load_tables(void)
618
{
619
        acpi_status status;
620
 
621
        ACPI_FUNCTION_TRACE(acpi_load_tables);
622
 
623
        /*
624
         * Load the namespace from the tables
625
         */
626
        status = acpi_tb_load_namespace();
627
        if (ACPI_FAILURE(status)) {
628
                ACPI_EXCEPTION((AE_INFO, status,
629
                                "While loading namespace from ACPI tables"));
630
        }
631
 
632
        return_ACPI_STATUS(status);
633
}
634
 
635
ACPI_EXPORT_SYMBOL(acpi_load_tables)
636
 
637
 
638
static int __init acpi_no_auto_ssdt_setup(char *s) {
639
 
640
        printk(KERN_NOTICE "ACPI: SSDT auto-load disabled\n");
641
 
642
        no_auto_ssdt = 1;
643
 
644
        return 1;
645
}
646
 
647
__setup("acpi_no_auto_ssdt", acpi_no_auto_ssdt_setup);

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.