Merge tag 'acpica-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Jul 2015 00:11:28 +0000 (17:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Jul 2015 00:11:28 +0000 (17:11 -0700)
Pull ACPICA updates from Rafael Wysocki:
 "Additional ACPICA material for v4.2-rc1

  This will update the ACPICA code in the kernel to upstream revision
  20150619 (a bug-fix release mostly including stable-candidate fixes)
  and restore an earlier ACPICA commit that had to be reverted due to a
  regression introduced by it (the regression is addressed by
  blacklisting the only known system affected by it to date).

  The only new feature added by this update is the support for
  overriding objects in the ACPI namespace and a new ACPI table that can
  be used for that called the Override System Definition Table (OSDT).
  That should allow us to "patch" the ACPI namespace built from
  incomplete or incorrect ACPI System Definition tables (DSDT, SSDT)
  during system startup without the need to provide replacements for all
  of those tables in the future.

  Specifics:

   - Fix system resume problems related to 32-bit and 64-bit versions of
     the Firmware ACPI Control Structure (FACS) in the firmare (Lv
     Zheng)

   - Fix double initialization of the FACS (Lv Zheng)

   - Add _CLS object processing code to ACPICA (Suravee Suthikulpanit)

   - Add support for the (currently missing) new GIC version field in
     the Multiple APIC Description Table (MADT) (Hanjun Guo)

   - Add support for overriding objects in the ACPI namespace to ACPICA
     and OSDT support (Lv Zheng, Bob Moore, Zhang Rui)

   - Updates related to the TCPA and TPM2 ACPI tables (Bob Moore)

   - Restore the commit modifying _REV to always return "2" (as required
     by ACPI 6) and add a blacklisting mechanism for systems that may be
     affected by that change (Rafael J Wysocki)

   - Assorted fixes and cleanups (Bob Moore, Lv Zheng, Sascha Wildner)"

* tag 'acpica-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (28 commits)
  Revert 'Revert "ACPICA: Permanently set _REV to the value '2'."'
  ACPI / init: Make it possible to override _REV
  ACPICA: Update version to 20150619
  ACPICA: Comment update, no functional change
  ACPICA: Update TPM2 ACPI table
  ACPICA: Update definitions for the TCPA and TPM2 ACPI tables
  ACPICA: Split C library prototypes to new header
  ACPICA: De-macroize calls to standard C library functions
  ACPI / acpidump: Update acpidump manual
  ACPICA: acpidump: Convert the default behavior to dump from /sys/firmware/acpi/tables
  ACPICA: acpidump: Allow customized tables to be dumped without accessing /dev/mem
  ACPICA: Cleanup output for the ASL Debug object
  ACPICA: Update for acpi_install_table memory types
  ACPICA: Namespace: Change namespace override to avoid node deletion
  ACPICA: Namespace: Add support of OSDT table
  ACPICA: Namespace: Add support to allow overriding objects
  ACPICA: ACPI 6.0: Add values for MADT GIC version field
  ACPICA: Utilities: Add _CLS processing
  ACPICA: Add dragon_fly support to unix file mapping file
  ACPICA: EFI: Add EFI interface definitions to eliminate dependency of GNU EFI
  ...

91 files changed:
Documentation/kernel-parameters.txt
drivers/acpi/Kconfig
drivers/acpi/acpica/accommon.h
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/acinterp.h
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/acnamesp.h
drivers/acpi/acpica/acobject.h
drivers/acpi/acpica/acstruct.h
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/dsfield.c
drivers/acpi/acpica/dsinit.c
drivers/acpi/acpica/dsobject.c
drivers/acpi/acpica/dsutils.c
drivers/acpi/acpica/dswload.c
drivers/acpi/acpica/evgpeinit.c
drivers/acpi/acpica/exconfig.c
drivers/acpi/acpica/exconvrt.c
drivers/acpi/acpica/exdebug.c
drivers/acpi/acpica/exdump.c
drivers/acpi/acpica/exfield.c
drivers/acpi/acpica/exfldio.c
drivers/acpi/acpica/exmisc.c
drivers/acpi/acpica/exnames.c
drivers/acpi/acpica/exoparg2.c
drivers/acpi/acpica/exoparg3.c
drivers/acpi/acpica/exregion.c
drivers/acpi/acpica/exstorob.c
drivers/acpi/acpica/exutils.c
drivers/acpi/acpica/hwxfsleep.c
drivers/acpi/acpica/nsaccess.c
drivers/acpi/acpica/nsconvert.c
drivers/acpi/acpica/nsdump.c
drivers/acpi/acpica/nseval.c
drivers/acpi/acpica/nsinit.c
drivers/acpi/acpica/nsparse.c
drivers/acpi/acpica/nsrepair2.c
drivers/acpi/acpica/nssearch.c
drivers/acpi/acpica/nsutils.c
drivers/acpi/acpica/nsxfeval.c
drivers/acpi/acpica/nsxfname.c
drivers/acpi/acpica/psutils.c
drivers/acpi/acpica/rscreate.c
drivers/acpi/acpica/rsmisc.c
drivers/acpi/acpica/rsutils.c
drivers/acpi/acpica/rsxface.c
drivers/acpi/acpica/tbdata.c
drivers/acpi/acpica/tbfadt.c
drivers/acpi/acpica/tbfind.c
drivers/acpi/acpica/tbinstal.c
drivers/acpi/acpica/tbprint.c
drivers/acpi/acpica/tbutils.c
drivers/acpi/acpica/tbxface.c
drivers/acpi/acpica/tbxfload.c
drivers/acpi/acpica/utalloc.c
drivers/acpi/acpica/utbuffer.c
drivers/acpi/acpica/utcache.c
drivers/acpi/acpica/utcopy.c
drivers/acpi/acpica/utdebug.c
drivers/acpi/acpica/utglobal.c
drivers/acpi/acpica/utids.c
drivers/acpi/acpica/utmisc.c
drivers/acpi/acpica/utosi.c
drivers/acpi/acpica/utpredef.c
drivers/acpi/acpica/utprint.c
drivers/acpi/acpica/utstring.c
drivers/acpi/acpica/uttrack.c
drivers/acpi/acpica/utxface.c
drivers/acpi/acpica/utxfinit.c
drivers/acpi/blacklist.c
drivers/acpi/internal.h
drivers/acpi/osl.c
include/acpi/acnames.h
include/acpi/acoutput.h
include/acpi/acpixf.h
include/acpi/actbl.h
include/acpi/actbl1.h
include/acpi/actbl2.h
include/acpi/actbl3.h
include/acpi/actypes.h
include/acpi/platform/acenv.h
include/acpi/platform/acenvex.h
include/acpi/platform/acgcc.h
tools/power/acpi/common/getopt.c
tools/power/acpi/man/acpidump.8
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c
tools/power/acpi/os_specific/service_layers/osunixmap.c
tools/power/acpi/tools/acpidump/acpidump.h
tools/power/acpi/tools/acpidump/apdump.c
tools/power/acpi/tools/acpidump/apfiles.c
tools/power/acpi/tools/acpidump/apmain.c

index afe7e2bbbc23cbc01eef6224824f1c4d199833c7..1d6f0459cd7bbe531b7acc2d85722ff62185729e 100644 (file)
@@ -293,6 +293,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
        acpi_os_name=   [HW,ACPI] Tell ACPI BIOS the name of the OS
                        Format: To spoof as Windows 98: ="Microsoft Windows"
 
+       acpi_rev_override [ACPI] Override the _REV object to return 5 (instead
+                       of 2 which is mandated by ACPI 6) as the supported ACPI
+                       specification revision (when using this switch, it may
+                       be necessary to carry out a cold reboot _twice_ in a
+                       row to make it take effect on the platform firmware).
+
        acpi_osi=       [HW,ACPI] Modify list of supported OS interface strings
                        acpi_osi="string1"      # add string1
                        acpi_osi="!string2"     # remove string2
index f15db002be8ec238dabac8114e862b8ec140255a..114cf48085abd34eacb341fae1f246e2fdfb4b41 100644 (file)
@@ -80,6 +80,26 @@ config ACPI_PROCFS_POWER
 
          Say N to delete power /proc/acpi/ directories that have moved to /sys/
 
+config ACPI_REV_OVERRIDE_POSSIBLE
+       bool "Allow supported ACPI revision to be overriden"
+       depends on X86
+       default y
+       help
+         The platform firmware on some systems expects Linux to return "5" as
+         the supported ACPI revision which makes it expose system configuration
+         information in a special way.
+
+         For example, based on what ACPI exports as the supported revision,
+         Dell XPS 13 (2015) configures its audio device to either work in HDA
+         mode or in I2S mode, where the former is supposed to be used on Linux
+         until the latter is fully supported (in the kernel as well as in user
+         space).
+
+         This option enables a DMI-based quirk for the above Dell machine (so
+         that HDA audio is exposed by the platform firmware to the kernel) and
+         makes it possible to force the kernel to return "5" as the supported
+         ACPI revision via the "acpi_rev_override" command line switch.
+
 config ACPI_EC_DEBUGFS
        tristate "EC read/write access through /sys/kernel/debug/ec"
        default n
index 853aa2dbdb61d203d7d01090895620c1929f1421..a8d8092ee39152920caf04f8e862b414ba43d417 100644 (file)
@@ -59,5 +59,8 @@
 #include "acglobal.h"          /* All global variables */
 #include "achware.h"           /* Hardware defines and interfaces */
 #include "acutils.h"           /* Utility interfaces */
+#ifndef ACPI_USE_SYSTEM_CLIBRARY
+#include "acclib.h"            /* C library interfaces */
+#endif                         /* !ACPI_USE_SYSTEM_CLIBRARY */
 
 #endif                         /* __ACCOMMON_H__ */
index a0c47878431422be01acae9e41c7a5d3a7c8c33e..53f96a3707624416d8ae6773027a1e693a51d623 100644 (file)
@@ -61,6 +61,8 @@ ACPI_GLOBAL(struct acpi_table_header, acpi_gbl_original_dsdt_header);
 
 #if (!ACPI_REDUCED_HARDWARE)
 ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_FACS);
+ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_facs32);
+ACPI_GLOBAL(struct acpi_table_facs *, acpi_gbl_facs64);
 
 #endif                         /* !ACPI_REDUCED_HARDWARE */
 
index 1886bde54b5d323e0d9543dbac41245d7b8e1075..7ac98000b46b61dd417fe260315000092b2be861 100644 (file)
@@ -468,6 +468,8 @@ void acpi_ex_eisa_id_to_string(char *dest, u64 compressed_id);
 
 void acpi_ex_integer_to_string(char *dest, u64 value);
 
+void acpi_ex_pci_cls_to_string(char *dest, u8 class_code[3]);
+
 u8 acpi_is_valid_space_id(u8 space_id);
 
 /*
index ffdb956391f614786ba2580fede7a7ce529b0897..bc600969c6a1551f81bf4a1a40c522124dd5a39a 100644 (file)
@@ -213,6 +213,7 @@ struct acpi_table_list {
 
 #define ACPI_TABLE_INDEX_DSDT           (0)
 #define ACPI_TABLE_INDEX_FACS           (1)
+#define ACPI_TABLE_INDEX_X_FACS         (2)
 
 struct acpi_find_context {
        char *search_for;
index 952fbe0b7231a79c62f463bd36e8bce596c8c478..0dd088290d80588fa1e4f7545c70d712e8b7c86c 100644 (file)
@@ -66,6 +66,7 @@
 #define ACPI_NS_PREFIX_IS_SCOPE     0x10
 #define ACPI_NS_EXTERNAL            0x20
 #define ACPI_NS_TEMPORARY           0x40
+#define ACPI_NS_OVERRIDE_IF_FOUND   0x80
 
 /* Flags for acpi_ns_walk_namespace */
 
index 3e9720e1f34f79464abbeb0fe7cb6ca7977a7fe0..c81d98d09cace4e747531511f3d95971372713a9 100644 (file)
@@ -335,6 +335,7 @@ struct acpi_object_reference {
        void *object;           /* name_op=>HANDLE to obj, index_op=>union acpi_operand_object */
        struct acpi_namespace_node *node;       /* ref_of or Namepath */
        union acpi_operand_object **where;      /* Target of Index */
+       u8 *index_pointer;      /* Used for Buffers and Strings */
        u32 value;              /* Used for Local/Arg/Index/ddb_handle */
 };
 
index 87c7860b3394b483dd3c0fe6c039e1d589682d65..44997ca02ae26a59f4e2efe0992d6c80dbcc32b7 100644 (file)
@@ -82,6 +82,7 @@ struct acpi_walk_state {
        u8 return_used;
        u8 scope_depth;
        u8 pass_number;         /* Parse pass during table load */
+       u8 namespace_override;  /* Override existing objects */
        u8 result_size;         /* Total elements for the result stack */
        u8 result_count;        /* Current number of occupied elements of result stack */
        u32 aml_offset;
index d49f5c7a20d90197ece8b625dd2fcd22fca4c4b1..6de0d3573037a99651037628d69e02d8bceb7498 100644 (file)
@@ -205,66 +205,6 @@ acpi_status acpi_ut_hardware_initialize(void);
 
 void acpi_ut_subsystem_shutdown(void);
 
-/*
- * utclib - Local implementations of C library functions
- */
-#ifndef ACPI_USE_SYSTEM_CLIBRARY
-
-acpi_size acpi_ut_strlen(const char *string);
-
-char *acpi_ut_strchr(const char *string, int ch);
-
-char *acpi_ut_strcpy(char *dst_string, const char *src_string);
-
-char *acpi_ut_strncpy(char *dst_string,
-                     const char *src_string, acpi_size count);
-
-int acpi_ut_memcmp(const char *buffer1, const char *buffer2, acpi_size count);
-
-int acpi_ut_strncmp(const char *string1, const char *string2, acpi_size count);
-
-int acpi_ut_strcmp(const char *string1, const char *string2);
-
-char *acpi_ut_strcat(char *dst_string, const char *src_string);
-
-char *acpi_ut_strncat(char *dst_string,
-                     const char *src_string, acpi_size count);
-
-u32 acpi_ut_strtoul(const char *string, char **terminator, u32 base);
-
-char *acpi_ut_strstr(char *string1, char *string2);
-
-void *acpi_ut_memcpy(void *dest, const void *src, acpi_size count);
-
-void *acpi_ut_memset(void *dest, u8 value, acpi_size count);
-
-int acpi_ut_to_upper(int c);
-
-int acpi_ut_to_lower(int c);
-
-extern const u8 _acpi_ctype[];
-
-#define _ACPI_XA     0x00      /* extra alphabetic - not supported */
-#define _ACPI_XS     0x40      /* extra space */
-#define _ACPI_BB     0x00      /* BEL, BS, etc. - not supported */
-#define _ACPI_CN     0x20      /* CR, FF, HT, NL, VT */
-#define _ACPI_DI     0x04      /* '0'-'9' */
-#define _ACPI_LO     0x02      /* 'a'-'z' */
-#define _ACPI_PU     0x10      /* punctuation */
-#define _ACPI_SP     0x08      /* space, tab, CR, LF, VT, FF */
-#define _ACPI_UP     0x01      /* 'A'-'Z' */
-#define _ACPI_XD     0x80      /* '0'-'9', 'A'-'F', 'a'-'f' */
-
-#define ACPI_IS_DIGIT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_DI))
-#define ACPI_IS_SPACE(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_SP))
-#define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
-#define ACPI_IS_UPPER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
-#define ACPI_IS_LOWER(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
-#define ACPI_IS_PRINT(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_XS | _ACPI_PU))
-#define ACPI_IS_ALPHA(c)  (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
-
-#endif                         /* !ACPI_USE_SYSTEM_CLIBRARY */
-
 #define ACPI_IS_ASCII(c)  ((c) < 0x80)
 
 /*
@@ -430,6 +370,10 @@ acpi_status
 acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
                    struct acpi_pnp_device_id_list ** return_cid_list);
 
+acpi_status
+acpi_ut_execute_CLS(struct acpi_namespace_node *device_node,
+                   struct acpi_pnp_device_id **return_id);
+
 /*
  * utlock - reader/writer locks
  */
index 43b40de90484cbb9f44338bb2d74dbb4bf4af291..20de148594fdc0459e1ddd589abe999f71c0003f 100644 (file)
@@ -502,7 +502,7 @@ acpi_ds_create_field(union acpi_parse_object *op,
                }
        }
 
-       ACPI_MEMSET(&info, 0, sizeof(struct acpi_create_field_info));
+       memset(&info, 0, sizeof(struct acpi_create_field_info));
 
        /* Second arg is the field flags */
 
index bbe74bcebbae882f2bb1da3211b4f4aad347534c..95779e8ec3bb2ab16eb69b8d14a729812aef8df4 100644 (file)
@@ -207,7 +207,7 @@ acpi_ds_initialize_objects(u32 table_index,
 
        /* Set all init info to zero */
 
-       ACPI_MEMSET(&info, 0, sizeof(struct acpi_init_walk_info));
+       memset(&info, 0, sizeof(struct acpi_init_walk_info));
 
        info.owner_id = owner_id;
        info.table_index = table_index;
index 8a7b07b6adc81a761cefcb2689c82de187eb82b2..2beb7fd674ae14a20b43031254d874afbd859886 100644 (file)
@@ -339,8 +339,8 @@ acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state,
                /* Initialize buffer from the byte_list (if present) */
 
                if (byte_list) {
-                       ACPI_MEMCPY(obj_desc->buffer.pointer,
-                                   byte_list->named.data, byte_list_length);
+                       memcpy(obj_desc->buffer.pointer, byte_list->named.data,
+                              byte_list_length);
                }
        }
 
@@ -750,8 +750,7 @@ acpi_ds_init_object_from_op(struct acpi_walk_state *walk_state,
        case ACPI_TYPE_STRING:
 
                obj_desc->string.pointer = op->common.value.string;
-               obj_desc->string.length =
-                   (u32) ACPI_STRLEN(op->common.value.string);
+               obj_desc->string.length = (u32)strlen(op->common.value.string);
 
                /*
                 * The string is contained in the ACPI table, don't ever try
index deeddd6d2f0523fbc5aff635acf63c3794a11b23..ebc577baeaf9fb14e29796a9286d22ca107fa6b5 100644 (file)
@@ -572,8 +572,8 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
                                        obj_desc =
                                            acpi_ut_create_string_object((acpi_size) name_length);
 
-                                       ACPI_STRNCPY(obj_desc->string.pointer,
-                                                    name_string, name_length);
+                                       strncpy(obj_desc->string.pointer,
+                                               name_string, name_length);
                                        status = AE_OK;
                                } else {
                                        /*
index 843942fb4be501c8dcc3d15ced1729a152489011..845ff44919c3713f8725f08daff16d9b9679e338 100644 (file)
@@ -315,10 +315,19 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
                flags = ACPI_NS_NO_UPSEARCH;
                if ((walk_state->opcode != AML_SCOPE_OP) &&
                    (!(walk_state->parse_flags & ACPI_PARSE_DEFERRED_OP))) {
-                       flags |= ACPI_NS_ERROR_IF_FOUND;
-                       ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
-                                         "[%s] Cannot already exist\n",
-                                         acpi_ut_get_type_name(object_type)));
+                       if (walk_state->namespace_override) {
+                               flags |= ACPI_NS_OVERRIDE_IF_FOUND;
+                               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                                 "[%s] Override allowed\n",
+                                                 acpi_ut_get_type_name
+                                                 (object_type)));
+                       } else {
+                               flags |= ACPI_NS_ERROR_IF_FOUND;
+                               ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
+                                                 "[%s] Cannot already exist\n",
+                                                 acpi_ut_get_type_name
+                                                 (object_type)));
+                       }
                } else {
                        ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH,
                                          "[%s] Both Find or Create allowed\n",
index 8840296d5b205080045de3fd93a97f046bcb91f5..ea4c0d3fca2d820edfbdb219f33d9718f32cb734 100644 (file)
@@ -377,7 +377,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
 
        /* 4) The last two characters of the name are the hex GPE Number */
 
-       gpe_number = ACPI_STRTOUL(&name[2], NULL, 16);
+       gpe_number = strtoul(&name[2], NULL, 16);
        if (gpe_number == ACPI_UINT32_MAX) {
 
                /* Conversion failed; invalid method, just ignore it */
index 6e0df2b9d5a475f329f2d40bfda2b592a26b764c..24a4c5c2b124825b5616371882ffa0f9666cdc85 100644 (file)
@@ -470,7 +470,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
                        return_ACPI_STATUS(AE_NO_MEMORY);
                }
 
-               ACPI_MEMCPY(table, table_header, length);
+               memcpy(table, table_header, length);
                break;
 
        default:
index 89a976b4ccf2ad9f8d01ed702b2288d5080c64a2..075d654c837f27e767ebed874e68140b97fc12ff 100644 (file)
@@ -227,9 +227,8 @@ acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
                /* Copy the integer to the buffer, LSB first */
 
                new_buf = return_desc->buffer.pointer;
-               ACPI_MEMCPY(new_buf,
-                           &obj_desc->integer.value,
-                           acpi_gbl_integer_byte_width);
+               memcpy(new_buf,
+                      &obj_desc->integer.value, acpi_gbl_integer_byte_width);
                break;
 
        case ACPI_TYPE_STRING:
@@ -252,8 +251,8 @@ acpi_ex_convert_to_buffer(union acpi_operand_object *obj_desc,
                /* Copy the string to the buffer */
 
                new_buf = return_desc->buffer.pointer;
-               ACPI_STRNCPY((char *)new_buf, (char *)obj_desc->string.pointer,
-                            obj_desc->string.length);
+               strncpy((char *)new_buf, (char *)obj_desc->string.pointer,
+                       obj_desc->string.length);
                break;
 
        default:
index e67d0aca3fe68b23a9f84284c1a017736a708b8a..815442bbd0518e6d2ee154971966eff3a760c6d5 100644 (file)
@@ -76,6 +76,8 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
 {
        u32 i;
        u32 timer;
+       union acpi_operand_object *object_desc;
+       u32 value;
 
        ACPI_FUNCTION_TRACE_PTR(ex_do_debug_object, source_desc);
 
@@ -254,8 +256,44 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
                                                         object)->object,
                                                        level + 4, 0);
                        } else {
-                               acpi_ex_do_debug_object(source_desc->reference.
-                                                       object, level + 4, 0);
+                               object_desc = source_desc->reference.object;
+                               value = source_desc->reference.value;
+
+                               switch (object_desc->common.type) {
+                               case ACPI_TYPE_BUFFER:
+
+                                       acpi_os_printf("Buffer[%u] = 0x%2.2X\n",
+                                                      value,
+                                                      *source_desc->reference.
+                                                      index_pointer);
+                                       break;
+
+                               case ACPI_TYPE_STRING:
+
+                                       acpi_os_printf
+                                           ("String[%u] = \"%c\" (0x%2.2X)\n",
+                                            value,
+                                            *source_desc->reference.
+                                            index_pointer,
+                                            *source_desc->reference.
+                                            index_pointer);
+                                       break;
+
+                               case ACPI_TYPE_PACKAGE:
+
+                                       acpi_os_printf("Package[%u] = ", value);
+                                       acpi_ex_do_debug_object(*source_desc->
+                                                               reference.where,
+                                                               level + 4, 0);
+                                       break;
+
+                               default:
+
+                                       acpi_os_printf
+                                           ("Unknown Reference object type %X\n",
+                                            object_desc->common.type);
+                                       break;
+                               }
                        }
                }
                break;
index 1da52bef632e1a6b28f343f78ae6277c083f7792..401e7edcd419371a1d661a7f57cc21adce5eb134 100644 (file)
@@ -224,7 +224,7 @@ static struct acpi_exdump_info acpi_ex_dump_index_field[5] = {
        {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(index_field.data_obj), "Data Object"}
 };
 
-static struct acpi_exdump_info acpi_ex_dump_reference[8] = {
+static struct acpi_exdump_info acpi_ex_dump_reference[9] = {
        {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_reference), NULL},
        {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.class), "Class"},
        {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(reference.target_type), "Target Type"},
@@ -232,6 +232,8 @@ static struct acpi_exdump_info acpi_ex_dump_reference[8] = {
        {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.object), "Object Desc"},
        {ACPI_EXD_NODE, ACPI_EXD_OFFSET(reference.node), "Node"},
        {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.where), "Where"},
+       {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(reference.index_pointer),
+        "Index Pointer"},
        {ACPI_EXD_REFERENCE, 0, NULL}
 };
 
@@ -1005,14 +1007,13 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)
        } else if (obj_desc->reference.object) {
                if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) ==
                    ACPI_DESC_TYPE_OPERAND) {
-                       acpi_os_printf(" Target: %p",
+                       acpi_os_printf("%22s %p", "Target :",
                                       obj_desc->reference.object);
                        if (obj_desc->reference.class == ACPI_REFCLASS_TABLE) {
                                acpi_os_printf(" Table Index: %X\n",
                                               obj_desc->reference.value);
                        } else {
-                               acpi_os_printf(" Target: %p [%s]\n",
-                                              obj_desc->reference.object,
+                               acpi_os_printf(" [%s]\n",
                                               acpi_ut_get_type_name(((union
                                                                       acpi_operand_object
                                                                       *)
index c161dd974f741c1700c501fa6576585034c67e43..61fd9c7b88bc508360ab4d96a034b8ac41bcca65 100644 (file)
@@ -428,7 +428,7 @@ acpi_ex_write_data_to_field(union acpi_operand_object *source_desc,
                }
 
                buffer = buffer_desc->buffer.pointer;
-               ACPI_MEMCPY(buffer, source_desc->buffer.pointer, length);
+               memcpy(buffer, source_desc->buffer.pointer, length);
 
                /* Lock entire transaction if requested */
 
index 725a3746a2df095163e5c10ca35077cf8afbb72c..70b7bbbb860b216aaeeb5e520cb5e253fc9b8f6b 100644 (file)
@@ -416,22 +416,22 @@ acpi_ex_field_datum_io(union acpi_operand_object *obj_desc,
                         * Copy the data from the source buffer.
                         * Length is the field width in bytes.
                         */
-                       ACPI_MEMCPY(value,
-                                   (obj_desc->buffer_field.buffer_obj)->buffer.
-                                   pointer +
-                                   obj_desc->buffer_field.base_byte_offset +
-                                   field_datum_byte_offset,
-                                   obj_desc->common_field.access_byte_width);
+                       memcpy(value,
+                              (obj_desc->buffer_field.buffer_obj)->buffer.
+                              pointer +
+                              obj_desc->buffer_field.base_byte_offset +
+                              field_datum_byte_offset,
+                              obj_desc->common_field.access_byte_width);
                } else {
                        /*
                         * Copy the data to the target buffer.
                         * Length is the field width in bytes.
                         */
-                       ACPI_MEMCPY((obj_desc->buffer_field.buffer_obj)->buffer.
-                                   pointer +
-                                   obj_desc->buffer_field.base_byte_offset +
-                                   field_datum_byte_offset, value,
-                                   obj_desc->common_field.access_byte_width);
+                       memcpy((obj_desc->buffer_field.buffer_obj)->buffer.
+                              pointer +
+                              obj_desc->buffer_field.base_byte_offset +
+                              field_datum_byte_offset, value,
+                              obj_desc->common_field.access_byte_width);
                }
 
                status = AE_OK;
@@ -703,7 +703,7 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
                return_ACPI_STATUS(AE_BUFFER_OVERFLOW);
        }
 
-       ACPI_MEMSET(buffer, 0, buffer_length);
+       memset(buffer, 0, buffer_length);
        access_bit_width = ACPI_MUL_8(obj_desc->common_field.access_byte_width);
 
        /* Handle the simple case here */
@@ -720,7 +720,7 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
                        status =
                            acpi_ex_field_datum_io(obj_desc, 0, &raw_datum,
                                                   ACPI_READ);
-                       ACPI_MEMCPY(buffer, &raw_datum, buffer_length);
+                       memcpy(buffer, &raw_datum, buffer_length);
                }
 
                return_ACPI_STATUS(status);
@@ -793,9 +793,9 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
 
                /* Write merged datum to target buffer */
 
-               ACPI_MEMCPY(((char *)buffer) + buffer_offset, &merged_datum,
-                           ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                    buffer_length - buffer_offset));
+               memcpy(((char *)buffer) + buffer_offset, &merged_datum,
+                      ACPI_MIN(obj_desc->common_field.access_byte_width,
+                               buffer_length - buffer_offset));
 
                buffer_offset += obj_desc->common_field.access_byte_width;
                merged_datum =
@@ -811,9 +811,9 @@ acpi_ex_extract_from_field(union acpi_operand_object *obj_desc,
 
        /* Write the last datum to the buffer */
 
-       ACPI_MEMCPY(((char *)buffer) + buffer_offset, &merged_datum,
-                   ACPI_MIN(obj_desc->common_field.access_byte_width,
-                            buffer_length - buffer_offset));
+       memcpy(((char *)buffer) + buffer_offset, &merged_datum,
+              ACPI_MIN(obj_desc->common_field.access_byte_width,
+                       buffer_length - buffer_offset));
 
        return_ACPI_STATUS(AE_OK);
 }
@@ -878,7 +878,7 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
                 * at Byte zero. All unused (upper) bytes of the
                 * buffer will be 0.
                 */
-               ACPI_MEMCPY((char *)new_buffer, (char *)buffer, buffer_length);
+               memcpy((char *)new_buffer, (char *)buffer, buffer_length);
                buffer = new_buffer;
                buffer_length = required_length;
        }
@@ -918,9 +918,9 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
 
        /* Get initial Datum from the input buffer */
 
-       ACPI_MEMCPY(&raw_datum, buffer,
-                   ACPI_MIN(obj_desc->common_field.access_byte_width,
-                            buffer_length - buffer_offset));
+       memcpy(&raw_datum, buffer,
+              ACPI_MIN(obj_desc->common_field.access_byte_width,
+                       buffer_length - buffer_offset));
 
        merged_datum =
            raw_datum << obj_desc->common_field.start_field_bit_offset;
@@ -970,9 +970,9 @@ acpi_ex_insert_into_field(union acpi_operand_object *obj_desc,
                /* Get the next input datum from the buffer */
 
                buffer_offset += obj_desc->common_field.access_byte_width;
-               ACPI_MEMCPY(&raw_datum, ((char *)buffer) + buffer_offset,
-                           ACPI_MIN(obj_desc->common_field.access_byte_width,
-                                    buffer_length - buffer_offset));
+               memcpy(&raw_datum, ((char *)buffer) + buffer_offset,
+                      ACPI_MIN(obj_desc->common_field.access_byte_width,
+                               buffer_length - buffer_offset));
 
                merged_datum |=
                    raw_datum << obj_desc->common_field.start_field_bit_offset;
index b56fc9d6f48e3a1180fd234d1e9eacf811202454..d02afece0f103ae9034d54657b9ef2a3ca686d9b 100644 (file)
@@ -209,8 +209,8 @@ acpi_ex_concat_template(union acpi_operand_object *operand0,
         * end_tag descriptor is copied from Operand1.
         */
        new_buf = return_desc->buffer.pointer;
-       ACPI_MEMCPY(new_buf, operand0->buffer.pointer, length0);
-       ACPI_MEMCPY(new_buf + length0, operand1->buffer.pointer, length1);
+       memcpy(new_buf, operand0->buffer.pointer, length0);
+       memcpy(new_buf + length0, operand1->buffer.pointer, length1);
 
        /* Insert end_tag and set the checksum to zero, means "ignore checksum" */
 
@@ -318,14 +318,14 @@ acpi_ex_do_concatenate(union acpi_operand_object *operand0,
 
                /* Copy the first integer, LSB first */
 
-               ACPI_MEMCPY(new_buf, &operand0->integer.value,
-                           acpi_gbl_integer_byte_width);
+               memcpy(new_buf, &operand0->integer.value,
+                      acpi_gbl_integer_byte_width);
 
                /* Copy the second integer (LSB first) after the first */
 
-               ACPI_MEMCPY(new_buf + acpi_gbl_integer_byte_width,
-                           &local_operand1->integer.value,
-                           acpi_gbl_integer_byte_width);
+               memcpy(new_buf + acpi_gbl_integer_byte_width,
+                      &local_operand1->integer.value,
+                      acpi_gbl_integer_byte_width);
                break;
 
        case ACPI_TYPE_STRING:
@@ -346,9 +346,9 @@ acpi_ex_do_concatenate(union acpi_operand_object *operand0,
 
                /* Concatenate the strings */
 
-               ACPI_STRCPY(new_buf, operand0->string.pointer);
-               ACPI_STRCPY(new_buf + operand0->string.length,
-                           local_operand1->string.pointer);
+               strcpy(new_buf, operand0->string.pointer);
+               strcpy(new_buf + operand0->string.length,
+                      local_operand1->string.pointer);
                break;
 
        case ACPI_TYPE_BUFFER:
@@ -369,11 +369,11 @@ acpi_ex_do_concatenate(union acpi_operand_object *operand0,
 
                /* Concatenate the buffers */
 
-               ACPI_MEMCPY(new_buf, operand0->buffer.pointer,
-                           operand0->buffer.length);
-               ACPI_MEMCPY(new_buf + operand0->buffer.length,
-                           local_operand1->buffer.pointer,
-                           local_operand1->buffer.length);
+               memcpy(new_buf, operand0->buffer.pointer,
+                      operand0->buffer.length);
+               memcpy(new_buf + operand0->buffer.length,
+                      local_operand1->buffer.pointer,
+                      local_operand1->buffer.length);
                break;
 
        default:
@@ -660,9 +660,9 @@ acpi_ex_do_logical_op(u16 opcode,
 
                /* Lexicographic compare: compare the data bytes */
 
-               compare = ACPI_MEMCMP(operand0->buffer.pointer,
-                                     local_operand1->buffer.pointer,
-                                     (length0 > length1) ? length1 : length0);
+               compare = memcmp(operand0->buffer.pointer,
+                                local_operand1->buffer.pointer,
+                                (length0 > length1) ? length1 : length0);
 
                switch (opcode) {
                case AML_LEQUAL_OP:     /* LEqual (Operand0, Operand1) */
index 453b00c301773fbb9977efc583f5a9163e54462a..20e87813c7d7c6b304c2bc2cbebb6b2ec370eb13 100644 (file)
@@ -192,7 +192,7 @@ static acpi_status acpi_ex_name_segment(u8 ** in_aml_address, char *name_string)
                char_buf[4] = '\0';
 
                if (name_string) {
-                       ACPI_STRCAT(name_string, char_buf);
+                       strcat(name_string, char_buf);
                        ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
                                          "Appended to - %s\n", name_string));
                } else {
index fcc618aa2061496e089c73fb0c8e760e165bd64b..b8944ebb108145aeb817f1b6f62774da4fb1c8ac 100644 (file)
@@ -337,8 +337,8 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
                 * Copy the raw buffer data with no transform.
                 * (NULL terminated already)
                 */
-               ACPI_MEMCPY(return_desc->string.pointer,
-                           operand[0]->buffer.pointer, length);
+               memcpy(return_desc->string.pointer,
+                      operand[0]->buffer.pointer, length);
                break;
 
        case AML_CONCAT_RES_OP:
@@ -380,6 +380,8 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
 
                        return_desc->reference.target_type =
                            ACPI_TYPE_BUFFER_FIELD;
+                       return_desc->reference.index_pointer =
+                           &(operand[0]->buffer.pointer[index]);
                        break;
 
                case ACPI_TYPE_BUFFER:
@@ -391,6 +393,8 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)
 
                        return_desc->reference.target_type =
                            ACPI_TYPE_BUFFER_FIELD;
+                       return_desc->reference.index_pointer =
+                           &(operand[0]->buffer.pointer[index]);
                        break;
 
                case ACPI_TYPE_PACKAGE:
index 1c64a988cbee538634ab5eef9be21d7b7c315145..fa100b3b92ee8a4180c5ce8fe052e274ac26bce7 100644 (file)
@@ -237,8 +237,8 @@ acpi_status acpi_ex_opcode_3A_1T_1R(struct acpi_walk_state *walk_state)
 
                        /* We have a buffer, copy the portion requested */
 
-                       ACPI_MEMCPY(buffer, operand[0]->string.pointer + index,
-                                   length);
+                       memcpy(buffer, operand[0]->string.pointer + index,
+                              length);
                }
 
                /* Set the length of the new String/Buffer */
index f6c2f5499935c7dffc1c53655b7f1f45da0a7073..b4a5e44c00dd05df639b9d56d06ee44f04dcaf1a 100644 (file)
@@ -517,15 +517,14 @@ acpi_ex_data_table_space_handler(u32 function,
        switch (function) {
        case ACPI_READ:
 
-               ACPI_MEMCPY(ACPI_CAST_PTR(char, value),
-                           ACPI_PHYSADDR_TO_PTR(address),
-                           ACPI_DIV_8(bit_width));
+               memcpy(ACPI_CAST_PTR(char, value),
+                      ACPI_PHYSADDR_TO_PTR(address), ACPI_DIV_8(bit_width));
                break;
 
        case ACPI_WRITE:
 
-               ACPI_MEMCPY(ACPI_PHYSADDR_TO_PTR(address),
-                           ACPI_CAST_PTR(char, value), ACPI_DIV_8(bit_width));
+               memcpy(ACPI_PHYSADDR_TO_PTR(address),
+                      ACPI_CAST_PTR(char, value), ACPI_DIV_8(bit_width));
                break;
 
        default:
index 6fa3c8d8fc5f9fd08e8df6f37c781134e7dab842..e1d4f4d51b97a41703546fdd71d6efb5770e3544 100644 (file)
@@ -100,9 +100,9 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
 
                /* Clear existing buffer and copy in the new one */
 
-               ACPI_MEMSET(target_desc->buffer.pointer, 0,
-                           target_desc->buffer.length);
-               ACPI_MEMCPY(target_desc->buffer.pointer, buffer, length);
+               memset(target_desc->buffer.pointer, 0,
+                      target_desc->buffer.length);
+               memcpy(target_desc->buffer.pointer, buffer, length);
 
 #ifdef ACPI_OBSOLETE_BEHAVIOR
                /*
@@ -129,8 +129,8 @@ acpi_ex_store_buffer_to_buffer(union acpi_operand_object *source_desc,
        } else {
                /* Truncate the source, copy only what will fit */
 
-               ACPI_MEMCPY(target_desc->buffer.pointer, buffer,
-                           target_desc->buffer.length);
+               memcpy(target_desc->buffer.pointer, buffer,
+                      target_desc->buffer.length);
 
                ACPI_DEBUG_PRINT((ACPI_DB_INFO,
                                  "Truncating source buffer from %X to %X\n",
@@ -187,9 +187,9 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
                 * String will fit in existing non-static buffer.
                 * Clear old string and copy in the new one
                 */
-               ACPI_MEMSET(target_desc->string.pointer, 0,
-                           (acpi_size) target_desc->string.length + 1);
-               ACPI_MEMCPY(target_desc->string.pointer, buffer, length);
+               memset(target_desc->string.pointer, 0,
+                      (acpi_size) target_desc->string.length + 1);
+               memcpy(target_desc->string.pointer, buffer, length);
        } else {
                /*
                 * Free the current buffer, then allocate a new buffer
@@ -210,7 +210,7 @@ acpi_ex_store_string_to_string(union acpi_operand_object *source_desc,
                }
 
                target_desc->common.flags &= ~AOPOBJ_STATIC_POINTER;
-               ACPI_MEMCPY(target_desc->string.pointer, buffer, length);
+               memcpy(target_desc->string.pointer, buffer, length);
        }
 
        /* Set the new target length */
index 3f4225e95d9311ffe5a915f5081f686b0619ca4f..30c3f464fda5bcae5e98c7dd323fb963acea217d 100644 (file)
@@ -378,6 +378,38 @@ void acpi_ex_integer_to_string(char *out_string, u64 value)
        }
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ex_pci_cls_to_string
+ *
+ * PARAMETERS:  out_string      - Where to put the converted string (7 bytes)
+ * PARAMETERS:  class_code      - PCI class code to be converted (3 bytes)
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Convert 3-bytes PCI class code to string representation.
+ *              Return buffer must be large enough to hold the string. The
+ *              string returned is always exactly of length
+ *              ACPI_PCICLS_STRING_SIZE (includes null terminator).
+ *
+ ******************************************************************************/
+
+void acpi_ex_pci_cls_to_string(char *out_string, u8 class_code[3])
+{
+
+       ACPI_FUNCTION_ENTRY();
+
+       /* All 3 bytes are hexadecimal */
+
+       out_string[0] = acpi_ut_hex_to_ascii_char((u64)class_code[0], 4);
+       out_string[1] = acpi_ut_hex_to_ascii_char((u64)class_code[0], 0);
+       out_string[2] = acpi_ut_hex_to_ascii_char((u64)class_code[1], 4);
+       out_string[3] = acpi_ut_hex_to_ascii_char((u64)class_code[1], 0);
+       out_string[4] = acpi_ut_hex_to_ascii_char((u64)class_code[2], 4);
+       out_string[5] = acpi_ut_hex_to_ascii_char((u64)class_code[2], 0);
+       out_string[6] = 0;
+}
+
 /*******************************************************************************
  *
  * FUNCTION:    acpi_is_valid_space_id
index 3b3767698827f9d2553af49a3bdbdbae9f331613..52dfd0d050fa30b09077446e55cd7b27f054452d 100644 (file)
 ACPI_MODULE_NAME("hwxfsleep")
 
 /* Local prototypes */
+#if (!ACPI_REDUCED_HARDWARE)
+static acpi_status
+acpi_hw_set_firmware_waking_vectors(struct acpi_table_facs *facs,
+                                   acpi_physical_address physical_address,
+                                   acpi_physical_address physical_address64);
+#endif
+
 static acpi_status acpi_hw_sleep_dispatch(u8 sleep_state, u32 function_id);
 
 /*
@@ -72,6 +79,7 @@ static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
 
 /*
  * These functions are removed for the ACPI_REDUCED_HARDWARE case:
+ *      acpi_set_firmware_waking_vectors
  *      acpi_set_firmware_waking_vector
  *      acpi_set_firmware_waking_vector64
  *      acpi_enter_sleep_state_s4bios
@@ -80,20 +88,26 @@ static struct acpi_sleep_functions acpi_sleep_dispatch[] = {
 #if (!ACPI_REDUCED_HARDWARE)
 /*******************************************************************************
  *
- * FUNCTION:    acpi_set_firmware_waking_vector
+ * FUNCTION:    acpi_hw_set_firmware_waking_vectors
  *
- * PARAMETERS:  physical_address    - 32-bit physical address of ACPI real mode
+ * PARAMETERS:  facs                - Pointer to FACS table
+ *              physical_address    - 32-bit physical address of ACPI real mode
  *                                    entry point.
+ *              physical_address64  - 64-bit physical address of ACPI protected
+ *                                    mode entry point.
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Sets the 32-bit firmware_waking_vector field of the FACS
+ * DESCRIPTION: Sets the firmware_waking_vector fields of the FACS
  *
  ******************************************************************************/
 
-acpi_status acpi_set_firmware_waking_vector(u32 physical_address)
+static acpi_status
+acpi_hw_set_firmware_waking_vectors(struct acpi_table_facs *facs,
+                                   acpi_physical_address physical_address,
+                                   acpi_physical_address physical_address64)
 {
-       ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector);
+       ACPI_FUNCTION_TRACE(acpi_hw_set_firmware_waking_vectors);
 
 
        /*
@@ -106,17 +120,92 @@ acpi_status acpi_set_firmware_waking_vector(u32 physical_address)
 
        /* Set the 32-bit vector */
 
-       acpi_gbl_FACS->firmware_waking_vector = physical_address;
+       facs->firmware_waking_vector = (u32)physical_address;
 
-       /* Clear the 64-bit vector if it exists */
+       if (facs->length > 32) {
+               if (facs->version >= 1) {
 
-       if ((acpi_gbl_FACS->length > 32) && (acpi_gbl_FACS->version >= 1)) {
-               acpi_gbl_FACS->xfirmware_waking_vector = 0;
+                       /* Set the 64-bit vector */
+
+                       facs->xfirmware_waking_vector = physical_address64;
+               } else {
+                       /* Clear the 64-bit vector if it exists */
+
+                       facs->xfirmware_waking_vector = 0;
+               }
        }
 
        return_ACPI_STATUS(AE_OK);
 }
 
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_set_firmware_waking_vectors
+ *
+ * PARAMETERS:  physical_address    - 32-bit physical address of ACPI real mode
+ *                                    entry point.
+ *              physical_address64  - 64-bit physical address of ACPI protected
+ *                                    mode entry point.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Sets the firmware_waking_vector fields of the FACS
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_set_firmware_waking_vectors(acpi_physical_address physical_address,
+                                acpi_physical_address physical_address64)
+{
+
+       ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vectors);
+
+       /* If Hardware Reduced flag is set, there is no FACS */
+
+       if (acpi_gbl_reduced_hardware) {
+               return_ACPI_STATUS (AE_OK);
+       }
+
+       if (acpi_gbl_facs32) {
+               (void)acpi_hw_set_firmware_waking_vectors(acpi_gbl_facs32,
+                                                         physical_address,
+                                                         physical_address64);
+       }
+       if (acpi_gbl_facs64) {
+               (void)acpi_hw_set_firmware_waking_vectors(acpi_gbl_facs64,
+                                                         physical_address,
+                                                         physical_address64);
+       }
+
+       return_ACPI_STATUS(AE_OK);
+}
+
+ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vectors)
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_set_firmware_waking_vector
+ *
+ * PARAMETERS:  physical_address    - 32-bit physical address of ACPI real mode
+ *                                    entry point.
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Sets the 32-bit firmware_waking_vector field of the FACS
+ *
+ ******************************************************************************/
+acpi_status acpi_set_firmware_waking_vector(u32 physical_address)
+{
+       acpi_status status;
+
+       ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector);
+
+       status = acpi_set_firmware_waking_vectors((acpi_physical_address)
+                                                 physical_address, 0);
+
+       return_ACPI_STATUS(status);
+}
+
 ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vector)
 
 #if ACPI_MACHINE_WIDTH == 64
@@ -136,25 +225,19 @@ ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vector)
  ******************************************************************************/
 acpi_status acpi_set_firmware_waking_vector64(u64 physical_address)
 {
-       ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector64);
-
-
-       /* Determine if the 64-bit vector actually exists */
+       acpi_status status;
 
-       if ((acpi_gbl_FACS->length <= 32) || (acpi_gbl_FACS->version < 1)) {
-               return_ACPI_STATUS(AE_NOT_EXIST);
-       }
+       ACPI_FUNCTION_TRACE(acpi_set_firmware_waking_vector64);
 
-       /* Clear 32-bit vector, set the 64-bit X_ vector */
+       status = acpi_set_firmware_waking_vectors(0,
+                                                 (acpi_physical_address)
+                                                 physical_address);
 
-       acpi_gbl_FACS->firmware_waking_vector = 0;
-       acpi_gbl_FACS->xfirmware_waking_vector = physical_address;
-       return_ACPI_STATUS(AE_OK);
+       return_ACPI_STATUS(status);
 }
 
 ACPI_EXPORT_SYMBOL(acpi_set_firmware_waking_vector64)
 #endif
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_enter_sleep_state_s4bios
index 24fa19a76d704102b89ada50aa836dbf95d0171e..c687b9979fb2a29930c822e7b9bf5f3acb359d30 100644 (file)
@@ -102,7 +102,7 @@ acpi_status acpi_ns_root_initialize(void)
 
                /* _OSI is optional for now, will be permanent later */
 
-               if (!ACPI_STRCMP(init_val->name, "_OSI")
+               if (!strcmp(init_val->name, "_OSI")
                    && !acpi_gbl_create_osi_method) {
                        continue;
                }
@@ -180,7 +180,7 @@ acpi_status acpi_ns_root_initialize(void)
 
                                /* Build an object around the static string */
 
-                               obj_desc->string.length = (u32)ACPI_STRLEN(val);
+                               obj_desc->string.length = (u32)strlen(val);
                                obj_desc->string.pointer = val;
                                obj_desc->common.flags |= AOPOBJ_STATIC_POINTER;
                                break;
@@ -203,7 +203,7 @@ acpi_status acpi_ns_root_initialize(void)
 
                                /* Special case for ACPI Global Lock */
 
-                               if (ACPI_STRCMP(init_val->name, "_GL_") == 0) {
+                               if (strcmp(init_val->name, "_GL_") == 0) {
                                        acpi_gbl_global_lock_mutex = obj_desc;
 
                                        /* Create additional counting semaphore for global lock */
@@ -304,7 +304,9 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
                return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       local_flags = flags & ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_SEARCH_PARENT);
+       local_flags = flags &
+           ~(ACPI_NS_ERROR_IF_FOUND | ACPI_NS_OVERRIDE_IF_FOUND |
+             ACPI_NS_SEARCH_PARENT);
        *return_node = ACPI_ENTRY_NOT_FOUND;
        acpi_gbl_ns_lookup_count++;
 
@@ -547,6 +549,12 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
                        if (flags & ACPI_NS_ERROR_IF_FOUND) {
                                local_flags |= ACPI_NS_ERROR_IF_FOUND;
                        }
+
+                       /* Set override flag according to caller */
+
+                       if (flags & ACPI_NS_OVERRIDE_IF_FOUND) {
+                               local_flags |= ACPI_NS_OVERRIDE_IF_FOUND;
+                       }
                }
 
                /* Extract one ACPI name from the front of the pathname */
index 1a8b39c8d969d9567654c23cff984285b241f0c1..da55a1c60da180cf4f2aeec66f1dd0f41e22d974 100644 (file)
@@ -187,8 +187,8 @@ acpi_ns_convert_to_string(union acpi_operand_object *original_object,
                 * Copy the raw buffer data with no transform. String is already NULL
                 * terminated at Length+1.
                 */
-               ACPI_MEMCPY(new_object->string.pointer,
-                           original_object->buffer.pointer, length);
+               memcpy(new_object->string.pointer,
+                      original_object->buffer.pointer, length);
                break;
 
        default:
@@ -251,9 +251,9 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
                        return (AE_NO_MEMORY);
                }
 
-               ACPI_MEMCPY(new_object->buffer.pointer,
-                           original_object->string.pointer,
-                           original_object->string.length);
+               memcpy(new_object->buffer.pointer,
+                      original_object->string.pointer,
+                      original_object->string.length);
                break;
 
        case ACPI_TYPE_PACKAGE:
index d259393505fa9bb9230ef51a152a01c317c5350c..0f1daba640e7a5f70c5a6f0196398f65551219d8 100644 (file)
@@ -101,7 +101,7 @@ void acpi_ns_print_pathname(u32 num_segments, char *pathname)
 
        while (num_segments) {
                for (i = 0; i < 4; i++) {
-                       ACPI_IS_PRINT(pathname[i]) ?
+                       isprint((int)pathname[i]) ?
                            acpi_os_printf("%c", pathname[i]) :
                            acpi_os_printf("?");
                }
index 7bcc68f57afa61d24d6d170e04bb9c2db8271900..80670cb32b5a3fe9438e735d26ef1b269be1e3f7 100644 (file)
@@ -59,15 +59,14 @@ acpi_ns_exec_module_code(union acpi_operand_object *method_obj,
  *
  * FUNCTION:    acpi_ns_evaluate
  *
- * PARAMETERS:  info            - Evaluation info block, contains:
+ * PARAMETERS:  info            - Evaluation info block, contains these fields
+ *                                and more:
  *                  prefix_node     - Prefix or Method/Object Node to execute
  *                  relative_path   - Name of method to execute, If NULL, the
  *                                    Node is the object to execute
  *                  parameters      - List of parameters to pass to the method,
  *                                    terminated by NULL. Params itself may be
  *                                    NULL if no parameters are being passed.
- *                  return_object   - Where to put method's return value (if
- *                                    any). If NULL, no value is returned.
  *                  parameter_type  - Type of Parameter list
  *                  return_object   - Where to put method's return value (if
  *                                    any). If NULL, no value is returned.
@@ -440,7 +439,7 @@ acpi_ns_exec_module_code(union acpi_operand_object *method_obj,
 
        /* Initialize the evaluation information block */
 
-       ACPI_MEMSET(info, 0, sizeof(struct acpi_evaluate_info));
+       memset(info, 0, sizeof(struct acpi_evaluate_info));
        info->prefix_node = parent_node;
 
        /*
index 4a85c45179883b14421f324d4fcc2b9f923f0309..b744a53618eb3977663ab75a6a31e808e96b5aeb 100644 (file)
@@ -90,7 +90,7 @@ acpi_status acpi_ns_initialize_objects(void)
 
        /* Set all init info to zero */
 
-       ACPI_MEMSET(&info, 0, sizeof(struct acpi_init_walk_info));
+       memset(&info, 0, sizeof(struct acpi_init_walk_info));
 
        /* Walk entire namespace from the supplied root */
 
@@ -566,7 +566,7 @@ acpi_ns_init_one_device(acpi_handle obj_handle,
        ACPI_DEBUG_EXEC(acpi_ut_display_init_pathname
                        (ACPI_TYPE_METHOD, device_node, METHOD_NAME__INI));
 
-       ACPI_MEMSET(info, 0, sizeof(struct acpi_evaluate_info));
+       memset(info, 0, sizeof(struct acpi_evaluate_info));
        info->prefix_node = device_node;
        info->relative_pathname = METHOD_NAME__INI;
        info->parameters = NULL;
index c95a119767b56fad8569b31d904c42edb643361f..57a4cfe547e4921d09cd41c1a2005cd769b22f83 100644 (file)
@@ -117,6 +117,13 @@ acpi_ns_one_complete_parse(u32 pass_number,
                                               (u8) pass_number);
        }
 
+       /* Found OSDT table, enable the namespace override feature */
+
+       if (ACPI_COMPARE_NAME(table->signature, ACPI_SIG_OSDT) &&
+           pass_number == ACPI_IMODE_LOAD_PASS1) {
+               walk_state->namespace_override = TRUE;
+       }
+
        if (ACPI_FAILURE(status)) {
                acpi_ds_delete_walk_state(walk_state);
                goto cleanup;
index c30672d238789668fdfd70ea7ad512838e3e7f55..0515a70f42a4fb6f27a78466b004d34517c8b51c 100644 (file)
@@ -580,7 +580,7 @@ acpi_ns_repair_HID(struct acpi_evaluate_info *info,
         * # is a hex digit.
         */
        for (dest = new_string->string.pointer; *source; dest++, source++) {
-               *dest = (char)ACPI_TOUPPER(*source);
+               *dest = (char)toupper((int)*source);
        }
 
        acpi_ut_remove_reference(return_object);
index 4a9d4a66016e51eefcb851979489bb871edab2a2..d7390401383043d7af82cf51233cdfea4f825566 100644 (file)
@@ -325,8 +325,41 @@ acpi_ns_search_and_enter(u32 target_name,
                 * If we found it AND the request specifies that a find is an error,
                 * return the error
                 */
-               if ((status == AE_OK) && (flags & ACPI_NS_ERROR_IF_FOUND)) {
-                       status = AE_ALREADY_EXISTS;
+               if (status == AE_OK) {
+
+                       /* The node was found in the namespace */
+
+                       /*
+                        * If the namespace override feature is enabled for this node,
+                        * delete any existing attached sub-object and make the node
+                        * look like a new node that is owned by the override table.
+                        */
+                       if (flags & ACPI_NS_OVERRIDE_IF_FOUND) {
+                               ACPI_DEBUG_PRINT((ACPI_DB_NAMES,
+                                                 "Namespace override: %4.4s pass %u type %X Owner %X\n",
+                                                 ACPI_CAST_PTR(char,
+                                                               &target_name),
+                                                 interpreter_mode,
+                                                 (*return_node)->type,
+                                                 walk_state->owner_id));
+
+                               acpi_ns_delete_children(*return_node);
+                               if (acpi_gbl_runtime_namespace_override) {
+                                       acpi_ut_remove_reference((*return_node)->object);
+                                       (*return_node)->object = NULL;
+                                       (*return_node)->owner_id =
+                                           walk_state->owner_id;
+                               } else {
+                                       acpi_ns_remove_node(*return_node);
+                                       *return_node = ACPI_ENTRY_NOT_FOUND;
+                               }
+                       }
+
+                       /* Return an error if we don't expect to find the object */
+
+                       else if (flags & ACPI_NS_ERROR_IF_FOUND) {
+                               status = AE_ALREADY_EXISTS;
+                       }
                }
 #ifdef ACPI_ASL_COMPILER
                if (*return_node && (*return_node)->type == ACPI_TYPE_ANY) {
index 6ad02008c0c23ae9cb7bbd3f4d8fa86b348f2dc6..8d8104b8bd28affdf70a35c38295116c25ec423c 100644 (file)
@@ -292,8 +292,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
                        } else {
                                /* Convert the character to uppercase and save it */
 
-                               result[i] =
-                                   (char)ACPI_TOUPPER((int)*external_name);
+                               result[i] = (char)toupper((int)*external_name);
                                external_name++;
                        }
                }
index b6030a2deee1248ab9b783bc3d30ce7ac9fbaa75..6ee1e52b903d344d31ed5b140f8385204cb5c94c 100644 (file)
@@ -696,7 +696,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
                        return (AE_CTRL_DEPTH);
                }
 
-               no_match = ACPI_STRCMP(hid->string, info->hid);
+               no_match = strcmp(hid->string, info->hid);
                ACPI_FREE(hid);
 
                if (no_match) {
@@ -715,8 +715,7 @@ acpi_ns_get_device_callback(acpi_handle obj_handle,
 
                        found = FALSE;
                        for (i = 0; i < cid->count; i++) {
-                               if (ACPI_STRCMP(cid->ids[i].string, info->hid)
-                                   == 0) {
+                               if (strcmp(cid->ids[i].string, info->hid) == 0) {
 
                                        /* Found a matching CID */
 
index d66c326485d82e769d5c93d4692ac0b02ca277f1..9ff643b9553fe9a4d97a803b4a0b0e7def2b299f 100644 (file)
@@ -114,7 +114,7 @@ acpi_get_handle(acpi_handle parent,
 
                /* Special case for root-only, since we can't search for it */
 
-               if (!ACPI_STRCMP(pathname, ACPI_NS_ROOT_PATH)) {
+               if (!strcmp(pathname, ACPI_NS_ROOT_PATH)) {
                        *ret_handle =
                            ACPI_CAST_PTR(acpi_handle, acpi_gbl_root_node);
                        return (AE_OK);
@@ -242,7 +242,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
 
        /* Copy actual string and return a pointer to the next string area */
 
-       ACPI_MEMCPY(string_area, source->string, source->length);
+       memcpy(string_area, source->string, source->length);
        return (string_area + source->length);
 }
 
@@ -260,7 +260,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
  *              control methods (Such as in the case of a device.)
  *
  * For Device and Processor objects, run the Device _HID, _UID, _CID, _SUB,
- * _STA, _ADR, _sx_w, and _sx_d methods.
+ * _CLS, _STA, _ADR, _sx_w, and _sx_d methods.
  *
  * Note: Allocates the return buffer, must be freed by the caller.
  *
@@ -276,11 +276,12 @@ acpi_get_object_info(acpi_handle handle,
        struct acpi_pnp_device_id *hid = NULL;
        struct acpi_pnp_device_id *uid = NULL;
        struct acpi_pnp_device_id *sub = NULL;
+       struct acpi_pnp_device_id *cls = NULL;
        char *next_id_string;
        acpi_object_type type;
        acpi_name name;
        u8 param_count = 0;
-       u8 valid = 0;
+       u16 valid = 0;
        u32 info_size;
        u32 i;
        acpi_status status;
@@ -320,7 +321,7 @@ acpi_get_object_info(acpi_handle handle,
        if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) {
                /*
                 * Get extra info for ACPI Device/Processor objects only:
-                * Run the Device _HID, _UID, _SUB, and _CID methods.
+                * Run the Device _HID, _UID, _SUB, _CID, and _CLS methods.
                 *
                 * Note: none of these methods are required, so they may or may
                 * not be present for this device. The Info->Valid bitfield is used
@@ -363,6 +364,14 @@ acpi_get_object_info(acpi_handle handle,
                             sizeof(struct acpi_pnp_device_id_list));
                        valid |= ACPI_VALID_CID;
                }
+
+               /* Execute the Device._CLS method */
+
+               status = acpi_ut_execute_CLS(node, &cls);
+               if (ACPI_SUCCESS(status)) {
+                       info_size += cls->length;
+                       valid |= ACPI_VALID_CLS;
+               }
        }
 
        /*
@@ -486,6 +495,11 @@ acpi_get_object_info(acpi_handle handle,
                }
        }
 
+       if (cls) {
+               next_id_string = acpi_ns_copy_device_id(&info->class_code,
+                                                       cls, next_id_string);
+       }
+
        /* Copy the fixed-length data */
 
        info->info_size = info_size;
@@ -510,6 +524,9 @@ cleanup:
        if (cid_list) {
                ACPI_FREE(cid_list);
        }
+       if (cls) {
+               ACPI_FREE(cls);
+       }
        return (status);
 }
 
@@ -620,7 +637,7 @@ acpi_status acpi_install_method(u8 *buffer)
 
        /* Copy the method AML to the local buffer */
 
-       ACPI_MEMCPY(aml_buffer, aml_start, aml_length);
+       memcpy(aml_buffer, aml_start, aml_length);
 
        /* Initialize the method object with the new method's information */
 
index 960505ab409a8b3958336058bb26837b6c9109c0..32440912023a7d4a8ab65bf84de8df7beb37d633 100644 (file)
@@ -93,10 +93,9 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
        op->common.descriptor_type = ACPI_DESC_TYPE_PARSER;
        op->common.aml_opcode = opcode;
 
-       ACPI_DISASM_ONLY_MEMBERS(ACPI_STRNCPY(op->common.aml_op_name,
-                                             (acpi_ps_get_opcode_info
-                                              (opcode))->name,
-                                             sizeof(op->common.aml_op_name)));
+       ACPI_DISASM_ONLY_MEMBERS(strncpy(op->common.aml_op_name,
+                                        (acpi_ps_get_opcode_info(opcode))->
+                                        name, sizeof(op->common.aml_op_name)));
 }
 
 /*******************************************************************************
index 15434e4c9b344411f6b3c0ec8dbb5193f81b9e41..3fa829e96c2a0de77e079fb8d95a3a7f25240a4f 100644 (file)
@@ -353,13 +353,13 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
                                /* +1 to include null terminator */
 
                                user_prt->length +=
-                                   (u32) ACPI_STRLEN(user_prt->source) + 1;
+                                   (u32)strlen(user_prt->source) + 1;
                                break;
 
                        case ACPI_TYPE_STRING:
 
-                               ACPI_STRCPY(user_prt->source,
-                                           obj_desc->string.pointer);
+                               strcpy(user_prt->source,
+                                      obj_desc->string.pointer);
 
                                /*
                                 * Add to the Length field the length of the string
index 1fe49d22366333b2172e82d622bfe7f6289d8f0d..ac37852e082173869fef4cc872e6734451d0419f 100644 (file)
@@ -119,7 +119,7 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
                        /*
                         * Get the resource type and the initial (minimum) length
                         */
-                       ACPI_MEMSET(resource, 0, INIT_RESOURCE_LENGTH(info));
+                       memset(resource, 0, INIT_RESOURCE_LENGTH(info));
                        resource->type = INIT_RESOURCE_TYPE(info);
                        resource->length = INIT_RESOURCE_LENGTH(info);
                        break;
@@ -324,13 +324,13 @@ acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
 
                case ACPI_RSC_SET8:
 
-                       ACPI_MEMSET(destination, info->aml_offset, info->value);
+                       memset(destination, info->aml_offset, info->value);
                        break;
 
                case ACPI_RSC_DATA8:
 
                        target = ACPI_ADD_PTR(char, resource, info->value);
-                       ACPI_MEMCPY(destination, source, ACPI_GET16(target));
+                       memcpy(destination, source, ACPI_GET16(target));
                        break;
 
                case ACPI_RSC_ADDRESS:
@@ -502,7 +502,7 @@ acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
                switch (info->opcode) {
                case ACPI_RSC_INITSET:
 
-                       ACPI_MEMSET(aml, 0, INIT_RESOURCE_LENGTH(info));
+                       memset(aml, 0, INIT_RESOURCE_LENGTH(info));
                        aml_length = INIT_RESOURCE_LENGTH(info);
                        acpi_rs_set_resource_header(INIT_RESOURCE_TYPE(info),
                                                    aml_length, aml);
index ece3cd60cc6a0664608cbe97b1110845ce26330d..52b024df00524bffae3bb1117cffa0d3dc31eb3b 100644 (file)
@@ -148,7 +148,7 @@ acpi_rs_move_data(void *destination, void *source, u16 item_count, u8 move_type)
                case ACPI_RSC_MOVE_SERIAL_VEN:
                case ACPI_RSC_MOVE_SERIAL_RES:
 
-                       ACPI_MEMCPY(destination, source, item_count);
+                       memcpy(destination, source, item_count);
                        return;
 
                        /*
@@ -364,12 +364,11 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,
                 * Zero the entire area of the buffer.
                 */
                total_length =
-                   (u32)
-                   ACPI_STRLEN(ACPI_CAST_PTR(char, &aml_resource_source[1])) +
+                   (u32)strlen(ACPI_CAST_PTR(char, &aml_resource_source[1])) +
                    1;
-               total_length = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(total_length);
+               total_length = (u32)ACPI_ROUND_UP_TO_NATIVE_WORD(total_length);
 
-               ACPI_MEMSET(resource_source->string_ptr, 0, total_length);
+               memset(resource_source->string_ptr, 0, total_length);
 
                /* Copy the resource_source string to the destination */
 
@@ -432,8 +431,8 @@ acpi_rs_set_resource_source(union aml_resource * aml,
 
                /* Copy the resource_source string */
 
-               ACPI_STRCPY(ACPI_CAST_PTR(char, &aml_resource_source[1]),
-                           resource_source->string_ptr);
+               strcpy(ACPI_CAST_PTR(char, &aml_resource_source[1]),
+                      resource_source->string_ptr);
 
                /*
                 * Add the length of the string (+ 1 for null terminator) to the
index 8e6276df0226ef5ff5e5297afa0d5708e471c738..de51f836ef68e23280897bda0aca300b5341db90 100644 (file)
@@ -398,8 +398,8 @@ acpi_resource_to_address64(struct acpi_resource *resource,
 
                /* Simple copy for 64 bit source */
 
-               ACPI_MEMCPY(out, &resource->data,
-                           sizeof(struct acpi_resource_address64));
+               memcpy(out, &resource->data,
+                      sizeof(struct acpi_resource_address64));
                break;
 
        default:
@@ -499,7 +499,7 @@ acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
         */
        if ((vendor->byte_length < (ACPI_UUID_LENGTH + 1)) ||
            (vendor->uuid_subtype != info->uuid->subtype) ||
-           (ACPI_MEMCMP(vendor->uuid, info->uuid->data, ACPI_UUID_LENGTH))) {
+           (memcmp(vendor->uuid, info->uuid->data, ACPI_UUID_LENGTH))) {
                return (AE_OK);
        }
 
@@ -513,7 +513,7 @@ acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context)
 
        /* Found the correct resource, copy and return it */
 
-       ACPI_MEMCPY(buffer->pointer, resource, resource->length);
+       memcpy(buffer->pointer, resource, resource->length);
        buffer->length = resource->length;
 
        /* Found the desired descriptor, terminate resource walk */
index d7f8386455bdc0e2ce35a36b7f80c188d376b86f..5c9d5abf15887e4e5d42f3e8651eee0876bb1697 100644 (file)
@@ -73,7 +73,7 @@ acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc,
         * Initialize the table descriptor. Set the pointer to NULL, since the
         * table is not fully mapped at this time.
         */
-       ACPI_MEMSET(table_desc, 0, sizeof(struct acpi_table_desc));
+       memset(table_desc, 0, sizeof(struct acpi_table_desc));
        table_desc->address = address;
        table_desc->length = table->length;
        table_desc->flags = flags;
@@ -465,9 +465,9 @@ acpi_status acpi_tb_resize_root_table_list(void)
        /* Copy and free the previous table array */
 
        if (acpi_gbl_root_table_list.tables) {
-               ACPI_MEMCPY(tables, acpi_gbl_root_table_list.tables,
-                           (acpi_size) table_count *
-                           sizeof(struct acpi_table_desc));
+               memcpy(tables, acpi_gbl_root_table_list.tables,
+                      (acpi_size) table_count *
+                      sizeof(struct acpi_table_desc));
 
                if (acpi_gbl_root_table_list.flags & ACPI_ROOT_ORIGIN_ALLOCATED) {
                        ACPI_FREE(acpi_gbl_root_table_list.tables);
index 7d2486005e3f24fe0ca38d61d8dc36d21362066e..6253001b6375d16629b7066f23377460ecbf0fce 100644 (file)
@@ -350,9 +350,18 @@ void acpi_tb_parse_fadt(u32 table_index)
        /* If Hardware Reduced flag is set, there is no FACS */
 
        if (!acpi_gbl_reduced_hardware) {
-               acpi_tb_install_fixed_table((acpi_physical_address)
-                                           acpi_gbl_FADT.Xfacs, ACPI_SIG_FACS,
-                                           ACPI_TABLE_INDEX_FACS);
+               if (acpi_gbl_FADT.facs) {
+                       acpi_tb_install_fixed_table((acpi_physical_address)
+                                                   acpi_gbl_FADT.facs,
+                                                   ACPI_SIG_FACS,
+                                                   ACPI_TABLE_INDEX_FACS);
+               }
+               if (acpi_gbl_FADT.Xfacs) {
+                       acpi_tb_install_fixed_table((acpi_physical_address)
+                                                   acpi_gbl_FADT.Xfacs,
+                                                   ACPI_SIG_FACS,
+                                                   ACPI_TABLE_INDEX_X_FACS);
+               }
        }
 }
 
@@ -389,12 +398,12 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)
 
        /* Clear the entire local FADT */
 
-       ACPI_MEMSET(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt));
+       memset(&acpi_gbl_FADT, 0, sizeof(struct acpi_table_fadt));
 
        /* Copy the original FADT, up to sizeof (struct acpi_table_fadt) */
 
-       ACPI_MEMCPY(&acpi_gbl_FADT, table,
-                   ACPI_MIN(length, sizeof(struct acpi_table_fadt)));
+       memcpy(&acpi_gbl_FADT, table,
+              ACPI_MIN(length, sizeof(struct acpi_table_fadt)));
 
        /* Take a copy of the Hardware Reduced flag */
 
@@ -491,13 +500,9 @@ static void acpi_tb_convert_fadt(void)
        acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt);
 
        /*
-        * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary.
+        * Expand the 32-bit DSDT addresses to 64-bit as necessary.
         * Later ACPICA code will always use the X 64-bit field.
         */
-       acpi_gbl_FADT.Xfacs = acpi_tb_select_address("FACS",
-                                                    acpi_gbl_FADT.facs,
-                                                    acpi_gbl_FADT.Xfacs);
-
        acpi_gbl_FADT.Xdsdt = acpi_tb_select_address("DSDT",
                                                     acpi_gbl_FADT.dsdt,
                                                     acpi_gbl_FADT.Xdsdt);
index 0b879fcfef670c535f30ac57cb403ff87dcbf266..119c84ad98334e2404fb72e585c4ec30ee49c684 100644 (file)
@@ -76,16 +76,16 @@ acpi_tb_find_table(char *signature,
 
        /* Normalize the input strings */
 
-       ACPI_MEMSET(&header, 0, sizeof(struct acpi_table_header));
+       memset(&header, 0, sizeof(struct acpi_table_header));
        ACPI_MOVE_NAME(header.signature, signature);
-       ACPI_STRNCPY(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
-       ACPI_STRNCPY(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
+       strncpy(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
+       strncpy(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
 
        /* Search for the table */
 
        for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
-               if (ACPI_MEMCMP(&(acpi_gbl_root_table_list.tables[i].signature),
-                               header.signature, ACPI_NAME_SIZE)) {
+               if (memcmp(&(acpi_gbl_root_table_list.tables[i].signature),
+                          header.signature, ACPI_NAME_SIZE)) {
 
                        /* Not the requested table */
 
@@ -112,21 +112,20 @@ acpi_tb_find_table(char *signature,
 
                /* Check for table match on all IDs */
 
-               if (!ACPI_MEMCMP
+               if (!memcmp
                    (acpi_gbl_root_table_list.tables[i].pointer->signature,
                     header.signature, ACPI_NAME_SIZE) && (!oem_id[0]
                                                           ||
-                                                          !ACPI_MEMCMP
+                                                          !memcmp
                                                           (acpi_gbl_root_table_list.
                                                            tables[i].pointer->
                                                            oem_id,
                                                            header.oem_id,
                                                            ACPI_OEM_ID_SIZE))
                    && (!oem_table_id[0]
-                       || !ACPI_MEMCMP(acpi_gbl_root_table_list.tables[i].
-                                       pointer->oem_table_id,
-                                       header.oem_table_id,
-                                       ACPI_OEM_TABLE_ID_SIZE))) {
+                       || !memcmp(acpi_gbl_root_table_list.tables[i].pointer->
+                                  oem_table_id, header.oem_table_id,
+                                  ACPI_OEM_TABLE_ID_SIZE))) {
                        *table_index = i;
 
                        ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
index 008a251780f4c955194c7193dd943bf955028b34..15ea98e0068d80971834a5d15bd5c7ef30356f41 100644 (file)
@@ -87,8 +87,8 @@ acpi_tb_compare_tables(struct acpi_table_desc *table_desc, u32 table_index)
         * not just the header.
         */
        is_identical = (u8)((table_desc->length != table_length ||
-                            ACPI_MEMCMP(table_desc->pointer, table,
-                                        table_length)) ? FALSE : TRUE);
+                            memcmp(table_desc->pointer, table, table_length)) ?
+                           FALSE : TRUE);
 
        /* Release the acquired table */
 
@@ -289,8 +289,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,
                if ((new_table_desc.signature.ascii[0] != 0x00) &&
                    (!ACPI_COMPARE_NAME
                     (&new_table_desc.signature, ACPI_SIG_SSDT))
-                   && (ACPI_STRNCMP(new_table_desc.signature.ascii, "OEM", 3)))
-               {
+                   && (strncmp(new_table_desc.signature.ascii, "OEM", 3))) {
                        ACPI_BIOS_ERROR((AE_INFO,
                                         "Table has invalid signature [%4.4s] (0x%8.8X), "
                                         "must be SSDT or OEMx",
index 77ba5c71c6e787e88a7f7923e44e1bc3adfeb7ca..709d5112fc1679db4a6ff28412a27bbe5c334d81 100644 (file)
@@ -73,7 +73,7 @@ static void acpi_tb_fix_string(char *string, acpi_size length)
 {
 
        while (length && *string) {
-               if (!ACPI_IS_PRINT(*string)) {
+               if (!isprint((int)*string)) {
                        *string = '?';
                }
                string++;
@@ -100,7 +100,7 @@ acpi_tb_cleanup_table_header(struct acpi_table_header *out_header,
                             struct acpi_table_header *header)
 {
 
-       ACPI_MEMCPY(out_header, header, sizeof(struct acpi_table_header));
+       memcpy(out_header, header, sizeof(struct acpi_table_header));
 
        acpi_tb_fix_string(out_header->signature, ACPI_NAME_SIZE);
        acpi_tb_fix_string(out_header->oem_id, ACPI_OEM_ID_SIZE);
@@ -138,9 +138,9 @@ acpi_tb_print_table_header(acpi_physical_address address,
 
                /* RSDP has no common fields */
 
-               ACPI_MEMCPY(local_header.oem_id,
-                           ACPI_CAST_PTR(struct acpi_table_rsdp,
-                                         header)->oem_id, ACPI_OEM_ID_SIZE);
+               memcpy(local_header.oem_id,
+                      ACPI_CAST_PTR(struct acpi_table_rsdp, header)->oem_id,
+                      ACPI_OEM_ID_SIZE);
                acpi_tb_fix_string(local_header.oem_id, ACPI_OEM_ID_SIZE);
 
                ACPI_INFO((AE_INFO, "RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)",
index 6559a58439c5dfadb0adbb19ac8c016d4197573b..568ac0e4a3c6a784efe38349213c26146888f6d5 100644 (file)
@@ -68,7 +68,6 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size);
 
 acpi_status acpi_tb_initialize_facs(void)
 {
-       acpi_status status;
 
        /* If Hardware Reduced flag is set, there is no FACS */
 
@@ -77,11 +76,25 @@ acpi_status acpi_tb_initialize_facs(void)
                return (AE_OK);
        }
 
-       status = acpi_get_table_by_index(ACPI_TABLE_INDEX_FACS,
-                                        ACPI_CAST_INDIRECT_PTR(struct
-                                                               acpi_table_header,
-                                                               &acpi_gbl_FACS));
-       return (status);
+       (void)acpi_get_table_by_index(ACPI_TABLE_INDEX_FACS,
+                                     ACPI_CAST_INDIRECT_PTR(struct
+                                                            acpi_table_header,
+                                                            &acpi_gbl_facs32));
+       (void)acpi_get_table_by_index(ACPI_TABLE_INDEX_X_FACS,
+                                     ACPI_CAST_INDIRECT_PTR(struct
+                                                            acpi_table_header,
+                                                            &acpi_gbl_facs64));
+
+       if (acpi_gbl_facs64
+           && (!acpi_gbl_facs32 || !acpi_gbl_use32_bit_facs_addresses)) {
+               acpi_gbl_FACS = acpi_gbl_facs64;
+       } else if (acpi_gbl_facs32) {
+               acpi_gbl_FACS = acpi_gbl_facs32;
+       }
+
+       /* If there is no FACS, just continue. There was already an error msg */
+
+       return (AE_OK);
 }
 #endif                         /* !ACPI_REDUCED_HARDWARE */
 
@@ -101,7 +114,7 @@ acpi_status acpi_tb_initialize_facs(void)
 u8 acpi_tb_tables_loaded(void)
 {
 
-       if (acpi_gbl_root_table_list.current_table_count >= 3) {
+       if (acpi_gbl_root_table_list.current_table_count >= 4) {
                return (TRUE);
        }
 
@@ -175,7 +188,7 @@ struct acpi_table_header *acpi_tb_copy_dsdt(u32 table_index)
                return (NULL);
        }
 
-       ACPI_MEMCPY(new_table, table_desc->pointer, table_desc->length);
+       memcpy(new_table, table_desc->pointer, table_desc->length);
        acpi_tb_uninstall_table(table_desc);
 
        acpi_tb_init_table_descriptor(&acpi_gbl_root_table_list.
@@ -357,11 +370,11 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)
        table_entry = ACPI_ADD_PTR(u8, table, sizeof(struct acpi_table_header));
 
        /*
-        * First two entries in the table array are reserved for the DSDT
-        * and FACS, which are not actually present in the RSDT/XSDT - they
-        * come from the FADT
+        * First three entries in the table array are reserved for the DSDT
+        * and 32bit/64bit FACS, which are not actually present in the
+        * RSDT/XSDT - they come from the FADT
         */
-       acpi_gbl_root_table_list.current_table_count = 2;
+       acpi_gbl_root_table_list.current_table_count = 3;
 
        /* Initialize the root table array from the RSDT/XSDT */
 
index 60e94f87f27aeea917c9705358ea4675666363d9..5559e2c70b15634384fa907b1934d1df4c97bdf3 100644 (file)
@@ -119,9 +119,9 @@ acpi_initialize_tables(struct acpi_table_desc * initial_table_array,
        } else {
                /* Root Table Array has been statically allocated by the host */
 
-               ACPI_MEMSET(initial_table_array, 0,
-                           (acpi_size) initial_table_count *
-                           sizeof(struct acpi_table_desc));
+               memset(initial_table_array, 0,
+                      (acpi_size) initial_table_count *
+                      sizeof(struct acpi_table_desc));
 
                acpi_gbl_root_table_list.tables = initial_table_array;
                acpi_gbl_root_table_list.max_table_count = initial_table_count;
@@ -242,8 +242,9 @@ acpi_get_table_header(char *signature,
                                if (!header) {
                                        return (AE_NO_MEMORY);
                                }
-                               ACPI_MEMCPY(out_table_header, header,
-                                           sizeof(struct acpi_table_header));
+
+                               memcpy(out_table_header, header,
+                                      sizeof(struct acpi_table_header));
                                acpi_os_unmap_memory(header,
                                                     sizeof(struct
                                                            acpi_table_header));
@@ -251,9 +252,9 @@ acpi_get_table_header(char *signature,
                                return (AE_NOT_FOUND);
                        }
                } else {
-                       ACPI_MEMCPY(out_table_header,
-                                   acpi_gbl_root_table_list.tables[i].pointer,
-                                   sizeof(struct acpi_table_header));
+                       memcpy(out_table_header,
+                              acpi_gbl_root_table_list.tables[i].pointer,
+                              sizeof(struct acpi_table_header));
                }
                return (AE_OK);
        }
index aadb3002a2ddd9cfb020d2cbcf49919313c1c589..9682d40ca6ffe70f8c50078fc4f89172b7b37702 100644 (file)
@@ -150,8 +150,8 @@ static acpi_status acpi_tb_load_namespace(void)
         * Save the original DSDT header for detection of table corruption
         * and/or replacement of the DSDT from outside the OS.
         */
-       ACPI_MEMCPY(&acpi_gbl_original_dsdt_header, acpi_gbl_DSDT,
-                   sizeof(struct acpi_table_header));
+       memcpy(&acpi_gbl_original_dsdt_header, acpi_gbl_DSDT,
+              sizeof(struct acpi_table_header));
 
        (void)acpi_ut_release_mutex(ACPI_MTX_TABLES);
 
@@ -166,13 +166,18 @@ static acpi_status acpi_tb_load_namespace(void)
 
        (void)acpi_ut_acquire_mutex(ACPI_MTX_TABLES);
        for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
-               if ((!ACPI_COMPARE_NAME
+               if (!acpi_gbl_root_table_list.tables[i].address ||
+                   (!ACPI_COMPARE_NAME
                     (&(acpi_gbl_root_table_list.tables[i].signature),
                      ACPI_SIG_SSDT)
                     &&
                     !ACPI_COMPARE_NAME(&
                                        (acpi_gbl_root_table_list.tables[i].
-                                        signature), ACPI_SIG_PSDT))
+                                        signature), ACPI_SIG_PSDT)
+                    &&
+                    !ACPI_COMPARE_NAME(&
+                                       (acpi_gbl_root_table_list.tables[i].
+                                        signature), ACPI_SIG_OSDT))
                    ||
                    ACPI_FAILURE(acpi_tb_validate_table
                                 (&acpi_gbl_root_table_list.tables[i]))) {
@@ -219,9 +224,9 @@ acpi_install_table(acpi_physical_address address, u8 physical)
        ACPI_FUNCTION_TRACE(acpi_install_table);
 
        if (physical) {
-               flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
-       } else {
                flags = ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL;
+       } else {
+               flags = ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL;
        }
 
        status = acpi_tb_install_standard_table(address, flags,
index 61d8f6d186d11c15c0f6f6c9489cf2b6d7fdae32..7a4101f0685e90d748fc8910255abf2df517331c 100644 (file)
@@ -73,7 +73,7 @@ void *acpi_os_allocate_zeroed(acpi_size size)
 
                /* Clear the memory block */
 
-               ACPI_MEMSET(allocation, 0, size);
+               memset(allocation, 0, size);
        }
 
        return (allocation);
@@ -181,7 +181,7 @@ acpi_status acpi_ut_delete_caches(void)
        char buffer[7];
 
        if (acpi_gbl_display_final_mem_stats) {
-               ACPI_STRCPY(buffer, "MEMORY");
+               strcpy(buffer, "MEMORY");
                (void)acpi_db_display_statistics(buffer);
        }
 #endif
@@ -337,6 +337,6 @@ acpi_ut_initialize_buffer(struct acpi_buffer * buffer,
 
        /* Have a valid buffer, clear it */
 
-       ACPI_MEMSET(buffer->pointer, 0, required_length);
+       memset(buffer->pointer, 0, required_length);
        return (AE_OK);
 }
index a8c39643e6181fbebff0aa047b1391551720082a..01c8709ca58694a17c4e766fd852a14898ac19d8 100644 (file)
@@ -159,7 +159,7 @@ void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)
                        }
 
                        buf_char = buffer[(acpi_size) i + j];
-                       if (ACPI_IS_PRINT(buf_char)) {
+                       if (isprint(buf_char)) {
                                acpi_os_printf("%c", buf_char);
                        } else {
                                acpi_os_printf(".");
@@ -319,7 +319,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
                        }
 
                        buf_char = buffer[(acpi_size) i + j];
-                       if (ACPI_IS_PRINT(buf_char)) {
+                       if (isprint(buf_char)) {
                                acpi_ut_file_printf(file, "%c", buf_char);
                        } else {
                                acpi_ut_file_printf(file, ".");
index eacc5eee362ebd9e7c5290ff6054ee5009ca633f..0d21fbd993633f774d78ca93f7bef2a33f2ff72f 100644 (file)
@@ -84,7 +84,7 @@ acpi_os_create_cache(char *cache_name,
 
        /* Populate the cache object and return it */
 
-       ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
+       memset(cache, 0, sizeof(struct acpi_memory_list));
        cache->list_name = cache_name;
        cache->object_size = object_size;
        cache->max_depth = max_depth;
@@ -212,7 +212,7 @@ acpi_os_release_object(struct acpi_memory_list * cache, void *object)
 
                /* Mark the object as cached */
 
-               ACPI_MEMSET(object, 0xCA, cache->object_size);
+               memset(object, 0xCA, cache->object_size);
                ACPI_SET_DESCRIPTOR_TYPE(object, ACPI_DESC_TYPE_CACHED);
 
                /* Put the object at the head of the cache list */
@@ -281,7 +281,7 @@ void *acpi_os_acquire_object(struct acpi_memory_list *cache)
 
                /* Clear (zero) the previously used Object */
 
-               ACPI_MEMSET(object, 0, cache->object_size);
+               memset(object, 0, cache->object_size);
        } else {
                /* The cache is empty, create a new object */
 
index c37ec5035f4c5f48e207cbd5082db3f55780550d..257221d452c8839262faf80465969b0ec75d8a54 100644 (file)
@@ -129,7 +129,7 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
 
        /* Always clear the external object */
 
-       ACPI_MEMSET(external_object, 0, sizeof(union acpi_object));
+       memset(external_object, 0, sizeof(union acpi_object));
 
        /*
         * In general, the external object will be the same type as
@@ -149,9 +149,9 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
                                                                  string.
                                                                  length + 1);
 
-               ACPI_MEMCPY((void *)data_space,
-                           (void *)internal_object->string.pointer,
-                           (acpi_size) internal_object->string.length + 1);
+               memcpy((void *)data_space,
+                      (void *)internal_object->string.pointer,
+                      (acpi_size) internal_object->string.length + 1);
                break;
 
        case ACPI_TYPE_BUFFER:
@@ -162,9 +162,9 @@ acpi_ut_copy_isimple_to_esimple(union acpi_operand_object *internal_object,
                    ACPI_ROUND_UP_TO_NATIVE_WORD(internal_object->string.
                                                 length);
 
-               ACPI_MEMCPY((void *)data_space,
-                           (void *)internal_object->buffer.pointer,
-                           internal_object->buffer.length);
+               memcpy((void *)data_space,
+                      (void *)internal_object->buffer.pointer,
+                      internal_object->buffer.length);
                break;
 
        case ACPI_TYPE_INTEGER:
@@ -502,9 +502,9 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
                        goto error_exit;
                }
 
-               ACPI_MEMCPY(internal_object->string.pointer,
-                           external_object->string.pointer,
-                           external_object->string.length);
+               memcpy(internal_object->string.pointer,
+                      external_object->string.pointer,
+                      external_object->string.length);
 
                internal_object->string.length = external_object->string.length;
                break;
@@ -517,9 +517,9 @@ acpi_ut_copy_esimple_to_isimple(union acpi_object *external_object,
                        goto error_exit;
                }
 
-               ACPI_MEMCPY(internal_object->buffer.pointer,
-                           external_object->buffer.pointer,
-                           external_object->buffer.length);
+               memcpy(internal_object->buffer.pointer,
+                      external_object->buffer.pointer,
+                      external_object->buffer.length);
 
                internal_object->buffer.length = external_object->buffer.length;
 
@@ -694,8 +694,8 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
                copy_size = sizeof(struct acpi_namespace_node);
        }
 
-       ACPI_MEMCPY(ACPI_CAST_PTR(char, dest_desc),
-                   ACPI_CAST_PTR(char, source_desc), copy_size);
+       memcpy(ACPI_CAST_PTR(char, dest_desc),
+              ACPI_CAST_PTR(char, source_desc), copy_size);
 
        /* Restore the saved fields */
 
@@ -725,9 +725,9 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
 
                        /* Copy the actual buffer data */
 
-                       ACPI_MEMCPY(dest_desc->buffer.pointer,
-                                   source_desc->buffer.pointer,
-                                   source_desc->buffer.length);
+                       memcpy(dest_desc->buffer.pointer,
+                              source_desc->buffer.pointer,
+                              source_desc->buffer.length);
                }
                break;
 
@@ -747,9 +747,9 @@ acpi_ut_copy_simple_object(union acpi_operand_object *source_desc,
 
                        /* Copy the actual string data */
 
-                       ACPI_MEMCPY(dest_desc->string.pointer,
-                                   source_desc->string.pointer,
-                                   (acpi_size) source_desc->string.length + 1);
+                       memcpy(dest_desc->string.pointer,
+                              source_desc->string.pointer,
+                              (acpi_size) source_desc->string.length + 1);
                }
                break;
 
index 4f3f888d33bb189793adc849a9c3217f981927d0..cd02693841db0bdeaa51dcf747c5f06fbf1d1e2f 100644 (file)
@@ -111,8 +111,8 @@ void acpi_ut_track_stack_ptr(void)
  * RETURN:      Updated pointer to the function name
  *
  * DESCRIPTION: Remove the "Acpi" prefix from the function name, if present.
- *              This allows compiler macros such as __func__ to be used with no
- *              change to the debug output.
+ *              This allows compiler macros such as __func__ to be used
+ *              with no change to the debug output.
  *
  ******************************************************************************/
 
index 5e8df9177da44781ac07942d146e47b97e954cda..a72685c1e819660768933e84abe9d1076c953bff 100644 (file)
@@ -102,12 +102,19 @@ const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = {
        {"_SB_", ACPI_TYPE_DEVICE, NULL},
        {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL},
        {"_TZ_", ACPI_TYPE_DEVICE, NULL},
-       {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL},
+       /*
+        * March, 2015:
+        * The _REV object is in the process of being deprecated, because
+        * other ACPI implementations permanently return 2. Thus, it
+        * has little or no value. Return 2 for compatibility with
+        * other ACPI implementations.
+        */
+       {"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR(char, 2)},
        {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
-       {"_GL_", ACPI_TYPE_MUTEX, (char *)1},
+       {"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR(char, 1)},
 
 #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
-       {"_OSI", ACPI_TYPE_METHOD, (char *)1},
+       {"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR(char, 1)},
 #endif
 
        /* Table terminator */
index 27431cfc1c4476c6128c90f240bb8d090831486c..7956df1e263c1cb1271614cdba965d1592d9a18a 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * Module Name: utids - support for device Ids - HID, UID, CID
+ * Module Name: utids - support for device Ids - HID, UID, CID, SUB, CLS
  *
  *****************************************************************************/
 
@@ -111,7 +111,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
        if (obj_desc->common.type == ACPI_TYPE_INTEGER) {
                acpi_ex_eisa_id_to_string(hid->string, obj_desc->integer.value);
        } else {
-               ACPI_STRCPY(hid->string, obj_desc->string.pointer);
+               strcpy(hid->string, obj_desc->string.pointer);
        }
 
        hid->length = length;
@@ -180,7 +180,7 @@ acpi_ut_execute_SUB(struct acpi_namespace_node *device_node,
 
        /* Simply copy existing string */
 
-       ACPI_STRCPY(sub->string, obj_desc->string.pointer);
+       strcpy(sub->string, obj_desc->string.pointer);
        sub->length = length;
        *return_id = sub;
 
@@ -256,7 +256,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
        if (obj_desc->common.type == ACPI_TYPE_INTEGER) {
                acpi_ex_integer_to_string(uid->string, obj_desc->integer.value);
        } else {
-               ACPI_STRCPY(uid->string, obj_desc->string.pointer);
+               strcpy(uid->string, obj_desc->string.pointer);
        }
 
        uid->length = length;
@@ -393,8 +393,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node *device_node,
 
                        /* Copy the String CID from the returned object */
 
-                       ACPI_STRCPY(next_id_string,
-                                   cid_objects[i]->string.pointer);
+                       strcpy(next_id_string, cid_objects[i]->string.pointer);
                        length = cid_objects[i]->string.length + 1;
                }
 
@@ -416,3 +415,92 @@ cleanup:
        acpi_ut_remove_reference(obj_desc);
        return_ACPI_STATUS(status);
 }
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ut_execute_CLS
+ *
+ * PARAMETERS:  device_node         - Node for the device
+ *              return_id           - Where the _CLS is returned
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Executes the _CLS control method that returns PCI-defined
+ *              class code of the device. The _CLS value is always a package
+ *              containing PCI class information as a list of integers.
+ *              The returned string has format "BBSSPP", where:
+ *                BB = Base-class code
+ *                SS = Sub-class code
+ *                PP = Programming Interface code
+ *
+ ******************************************************************************/
+
+acpi_status
+acpi_ut_execute_CLS(struct acpi_namespace_node *device_node,
+                   struct acpi_pnp_device_id **return_id)
+{
+       union acpi_operand_object *obj_desc;
+       union acpi_operand_object **cls_objects;
+       u32 count;
+       struct acpi_pnp_device_id *cls;
+       u32 length;
+       acpi_status status;
+       u8 class_code[3] = { 0, 0, 0 };
+
+       ACPI_FUNCTION_TRACE(ut_execute_CLS);
+
+       status = acpi_ut_evaluate_object(device_node, METHOD_NAME__CLS,
+                                        ACPI_BTYPE_PACKAGE, &obj_desc);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
+       }
+
+       /* Get the size of the String to be returned, includes null terminator */
+
+       length = ACPI_PCICLS_STRING_SIZE;
+       cls_objects = obj_desc->package.elements;
+       count = obj_desc->package.count;
+
+       if (obj_desc->common.type == ACPI_TYPE_PACKAGE) {
+               if (count > 0
+                   && cls_objects[0]->common.type == ACPI_TYPE_INTEGER) {
+                       class_code[0] = (u8)cls_objects[0]->integer.value;
+               }
+               if (count > 1
+                   && cls_objects[1]->common.type == ACPI_TYPE_INTEGER) {
+                       class_code[1] = (u8)cls_objects[1]->integer.value;
+               }
+               if (count > 2
+                   && cls_objects[2]->common.type == ACPI_TYPE_INTEGER) {
+                       class_code[2] = (u8)cls_objects[2]->integer.value;
+               }
+       }
+
+       /* Allocate a buffer for the CLS */
+
+       cls =
+           ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_pnp_device_id) +
+                                (acpi_size) length);
+       if (!cls) {
+               status = AE_NO_MEMORY;
+               goto cleanup;
+       }
+
+       /* Area for the string starts after PNP_DEVICE_ID struct */
+
+       cls->string =
+           ACPI_ADD_PTR(char, cls, sizeof(struct acpi_pnp_device_id));
+
+       /* Simply copy existing string */
+
+       acpi_ex_pci_cls_to_string(cls->string, class_code);
+       cls->length = length;
+       *return_id = cls;
+
+cleanup:
+
+       /* On exit, we must delete the return object */
+
+       acpi_ut_remove_reference(obj_desc);
+       return_ACPI_STATUS(status);
+}
index cbb7034d28d89d10944096ed8359caa5b6274b94..71b66537f8260daf7e09ceae9747790bcf71bd8c 100644 (file)
@@ -66,9 +66,9 @@ u8 acpi_ut_is_pci_root_bridge(char *id)
         * Check if this is a PCI root bridge.
         * ACPI 3.0+: check for a PCI Express root also.
         */
-       if (!(ACPI_STRCMP(id,
-                         PCI_ROOT_HID_STRING)) ||
-           !(ACPI_STRCMP(id, PCI_EXPRESS_ROOT_HID_STRING))) {
+       if (!(strcmp(id,
+                    PCI_ROOT_HID_STRING)) ||
+           !(strcmp(id, PCI_EXPRESS_ROOT_HID_STRING))) {
                return (TRUE);
        }
 
@@ -97,7 +97,8 @@ u8 acpi_ut_is_aml_table(struct acpi_table_header *table)
 
        if (ACPI_COMPARE_NAME(table->signature, ACPI_SIG_DSDT) ||
            ACPI_COMPARE_NAME(table->signature, ACPI_SIG_PSDT) ||
-           ACPI_COMPARE_NAME(table->signature, ACPI_SIG_SSDT)) {
+           ACPI_COMPARE_NAME(table->signature, ACPI_SIG_SSDT) ||
+           ACPI_COMPARE_NAME(table->signature, ACPI_SIG_OSDT)) {
                return (TRUE);
        }
 
index 44035abdbf2948000ae2ffd3861d07ff08746b6e..8f3d203aed79844ee78859ae954492f09e9fce95 100644 (file)
@@ -232,8 +232,7 @@ acpi_status acpi_ut_install_interface(acpi_string interface_name)
                return (AE_NO_MEMORY);
        }
 
-       interface_info->name =
-           ACPI_ALLOCATE_ZEROED(ACPI_STRLEN(interface_name) + 1);
+       interface_info->name = ACPI_ALLOCATE_ZEROED(strlen(interface_name) + 1);
        if (!interface_info->name) {
                ACPI_FREE(interface_info);
                return (AE_NO_MEMORY);
@@ -241,7 +240,7 @@ acpi_status acpi_ut_install_interface(acpi_string interface_name)
 
        /* Initialize new info and insert at the head of the global list */
 
-       ACPI_STRCPY(interface_info->name, interface_name);
+       strcpy(interface_info->name, interface_name);
        interface_info->flags = ACPI_OSI_DYNAMIC;
        interface_info->next = acpi_gbl_supported_interfaces;
 
@@ -269,7 +268,7 @@ acpi_status acpi_ut_remove_interface(acpi_string interface_name)
 
        previous_interface = next_interface = acpi_gbl_supported_interfaces;
        while (next_interface) {
-               if (!ACPI_STRCMP(interface_name, next_interface->name)) {
+               if (!strcmp(interface_name, next_interface->name)) {
 
                        /* Found: name is in either the static list or was added at runtime */
 
@@ -373,7 +372,7 @@ struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name)
 
        next_interface = acpi_gbl_supported_interfaces;
        while (next_interface) {
-               if (!ACPI_STRCMP(interface_name, next_interface->name)) {
+               if (!strcmp(interface_name, next_interface->name)) {
                        return (next_interface);
                }
 
index 29e449935a82e5f802a96f8e3c09d257a2bb2529..97898ed71b4b3a9a9a9e8d510b83fdbe52546a71 100644 (file)
@@ -148,7 +148,7 @@ void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes)
        u32 j;
 
        if (!expected_btypes) {
-               ACPI_STRCPY(buffer, "NONE");
+               strcpy(buffer, "NONE");
                return;
        }
 
@@ -161,7 +161,7 @@ void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes)
                /* If one of the expected types, concatenate the name of this type */
 
                if (expected_btypes & this_rtype) {
-                       ACPI_STRCAT(buffer, &ut_rtype_names[i][j]);
+                       strcat(buffer, &ut_rtype_names[i][j]);
                        j = 0;  /* Use name separator from now on */
                }
 
index 2be6bd4bdc09d7662c15a9ee3ab733310be3d077..b26297c5de49d528f19e8d0aacba119f94c69a71 100644 (file)
@@ -180,7 +180,7 @@ const char *acpi_ut_scan_number(const char *string, u64 *number_ptr)
 {
        u64 number = 0;
 
-       while (ACPI_IS_DIGIT(*string)) {
+       while (isdigit((int)*string)) {
                number *= 10;
                number += *(string++) - '0';
        }
@@ -405,7 +405,7 @@ acpi_ut_vsnprintf(char *string,
                /* Process width */
 
                width = -1;
-               if (ACPI_IS_DIGIT(*format)) {
+               if (isdigit((int)*format)) {
                        format = acpi_ut_scan_number(format, &number);
                        width = (s32) number;
                } else if (*format == '*') {
@@ -422,7 +422,7 @@ acpi_ut_vsnprintf(char *string,
                precision = -1;
                if (*format == '.') {
                        ++format;
-                       if (ACPI_IS_DIGIT(*format)) {
+                       if (isdigit((int)*format)) {
                                format = acpi_ut_scan_number(format, &number);
                                precision = (s32) number;
                        } else if (*format == '*') {
index 83b6c52490dc06097d945fb0245189543adb3835..8f3c883dfe0ec305aa167bf0db0970d7cc60cf82 100644 (file)
@@ -79,7 +79,7 @@ void acpi_ut_strlwr(char *src_string)
        /* Walk entire string, lowercasing the letters */
 
        for (string = src_string; *string; string++) {
-               *string = (char)ACPI_TOLOWER(*string);
+               *string = (char)tolower((int)*string);
        }
 
        return;
@@ -145,7 +145,7 @@ void acpi_ut_strupr(char *src_string)
        /* Walk entire string, uppercasing the letters */
 
        for (string = src_string; *string; string++) {
-               *string = (char)ACPI_TOUPPER(*string);
+               *string = (char)toupper((int)*string);
        }
 
        return;
@@ -202,7 +202,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
 
        /* Skip over any white space in the buffer */
 
-       while ((*string) && (ACPI_IS_SPACE(*string) || *string == '\t')) {
+       while ((*string) && (isspace((int)*string) || *string == '\t')) {
                string++;
        }
 
@@ -211,7 +211,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
                 * Base equal to ACPI_ANY_BASE means 'ToInteger operation case'.
                 * We need to determine if it is decimal or hexadecimal.
                 */
-               if ((*string == '0') && (ACPI_TOLOWER(*(string + 1)) == 'x')) {
+               if ((*string == '0') && (tolower((int)*(string + 1)) == 'x')) {
                        sign_of0x = 1;
                        base = 16;
 
@@ -224,7 +224,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
 
        /* Any string left? Check that '0x' is not followed by white space. */
 
-       if (!(*string) || ACPI_IS_SPACE(*string) || *string == '\t') {
+       if (!(*string) || isspace((int)*string) || *string == '\t') {
                if (to_integer_op) {
                        goto error_exit;
                } else {
@@ -241,7 +241,7 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
        /* Main loop: convert the string to a 32- or 64-bit integer */
 
        while (*string) {
-               if (ACPI_IS_DIGIT(*string)) {
+               if (isdigit((int)*string)) {
 
                        /* Convert ASCII 0-9 to Decimal value */
 
@@ -252,8 +252,8 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
 
                        term = 1;
                } else {
-                       this_digit = (u8)ACPI_TOUPPER(*string);
-                       if (ACPI_IS_XDIGIT((char)this_digit)) {
+                       this_digit = (u8)toupper((int)*string);
+                       if (isxdigit((int)this_digit)) {
 
                                /* Convert ASCII Hex char to value */
 
@@ -404,7 +404,7 @@ void acpi_ut_print_string(char *string, u16 max_length)
 
                        /* Check for printable character or hex escape */
 
-                       if (ACPI_IS_PRINT(string[i])) {
+                       if (isprint((int)string[i])) {
                                /* This is a normal character */
 
                                acpi_os_printf("%c", (int)string[i]);
@@ -609,22 +609,22 @@ void ut_convert_backslashes(char *pathname)
 u8 acpi_ut_safe_strcpy(char *dest, acpi_size dest_size, char *source)
 {
 
-       if (ACPI_STRLEN(source) >= dest_size) {
+       if (strlen(source) >= dest_size) {
                return (TRUE);
        }
 
-       ACPI_STRCPY(dest, source);
+       strcpy(dest, source);
        return (FALSE);
 }
 
 u8 acpi_ut_safe_strcat(char *dest, acpi_size dest_size, char *source)
 {
 
-       if ((ACPI_STRLEN(dest) + ACPI_STRLEN(source)) >= dest_size) {
+       if ((strlen(dest) + strlen(source)) >= dest_size) {
                return (TRUE);
        }
 
-       ACPI_STRCAT(dest, source);
+       strcat(dest, source);
        return (FALSE);
 }
 
@@ -635,14 +635,13 @@ acpi_ut_safe_strncat(char *dest,
 {
        acpi_size actual_transfer_length;
 
-       actual_transfer_length =
-           ACPI_MIN(max_transfer_length, ACPI_STRLEN(source));
+       actual_transfer_length = ACPI_MIN(max_transfer_length, strlen(source));
 
-       if ((ACPI_STRLEN(dest) + actual_transfer_length) >= dest_size) {
+       if ((strlen(dest) + actual_transfer_length) >= dest_size) {
                return (TRUE);
        }
 
-       ACPI_STRNCAT(dest, source, max_transfer_length);
+       strncat(dest, source, max_transfer_length);
        return (FALSE);
 }
 #endif
index 130dd9f96f0fe72ee03f79f6fa3631d70e608086..9a7dc8196a5da76779f10c855d17fc0e5f4430c8 100644 (file)
@@ -100,7 +100,7 @@ acpi_ut_create_list(char *list_name,
                return (AE_NO_MEMORY);
        }
 
-       ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
+       memset(cache, 0, sizeof(struct acpi_memory_list));
 
        cache->list_name = list_name;
        cache->object_size = object_size;
@@ -402,7 +402,7 @@ acpi_ut_track_allocation(struct acpi_debug_mem_block *allocation,
        allocation->component = component;
        allocation->line = line;
 
-       ACPI_STRNCPY(allocation->module, module, ACPI_MAX_MODULE_NAME);
+       strncpy(allocation->module, module, ACPI_MAX_MODULE_NAME);
        allocation->module[ACPI_MAX_MODULE_NAME - 1] = 0;
 
        if (!element) {
@@ -497,7 +497,7 @@ acpi_ut_remove_allocation(struct acpi_debug_mem_block *allocation,
 
        /* Mark the segment as deleted */
 
-       ACPI_MEMSET(&allocation->user_space, 0xEA, allocation->size);
+       memset(&allocation->user_space, 0xEA, allocation->size);
 
        status = acpi_ut_release_mutex(ACPI_MTX_MEMORY);
        return (status);
@@ -595,7 +595,7 @@ void acpi_ut_dump_allocations(u32 component, const char *module)
        while (element) {
                if ((element->component & component) &&
                    ((module == NULL)
-                    || (0 == ACPI_STRCMP(module, element->module)))) {
+                    || (0 == strcmp(module, element->module)))) {
                        descriptor =
                            ACPI_CAST_PTR(union acpi_descriptor,
                                          &element->user_space);
index 0929187bdce09c74f07e8d1a68f48eed4f2880e6..51cf52d52243c99233728a2d00d73e6171b38a28 100644 (file)
@@ -234,8 +234,8 @@ acpi_status acpi_get_statistics(struct acpi_statistics *stats)
        stats->sci_count = acpi_sci_count;
        stats->gpe_count = acpi_gpe_count;
 
-       ACPI_MEMCPY(stats->fixed_event_count, acpi_fixed_event_count,
-                   sizeof(acpi_fixed_event_count));
+       memcpy(stats->fixed_event_count, acpi_fixed_event_count,
+              sizeof(acpi_fixed_event_count));
 
        /* Other counters */
 
@@ -322,7 +322,7 @@ acpi_status acpi_install_interface(acpi_string interface_name)
 
        /* Parameter validation */
 
-       if (!interface_name || (ACPI_STRLEN(interface_name) == 0)) {
+       if (!interface_name || (strlen(interface_name) == 0)) {
                return (AE_BAD_PARAMETER);
        }
 
@@ -374,7 +374,7 @@ acpi_status acpi_remove_interface(acpi_string interface_name)
 
        /* Parameter validation */
 
-       if (!interface_name || (ACPI_STRLEN(interface_name) == 0)) {
+       if (!interface_name || (strlen(interface_name) == 0)) {
                return (AE_BAD_PARAMETER);
        }
 
index 083a76891889244596453059885ef3007aab8320..42a32a66ef22a9fc87558aa1e8901259146519be 100644 (file)
@@ -179,10 +179,12 @@ acpi_status __init acpi_enable_subsystem(u32 flags)
         * Obtain a permanent mapping for the FACS. This is required for the
         * Global Lock and the Firmware Waking Vector
         */
-       status = acpi_tb_initialize_facs();
-       if (ACPI_FAILURE(status)) {
-               ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
-               return_ACPI_STATUS(status);
+       if (!(flags & ACPI_NO_FACS_INIT)) {
+               status = acpi_tb_initialize_facs();
+               if (ACPI_FAILURE(status)) {
+                       ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
+                       return_ACPI_STATUS(status);
+               }
        }
 #endif                         /* !ACPI_REDUCED_HARDWARE */
 
index 1d1791935c318c71148a5da573effe51f9031a15..278dc4be992a49b7663223a5c6bf2215699f4c20 100644 (file)
@@ -162,6 +162,15 @@ static int __init dmi_disable_osi_win8(const struct dmi_system_id *d)
        acpi_osi_setup("!Windows 2012");
        return 0;
 }
+#ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
+static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
+{
+       printk(KERN_NOTICE PREFIX "DMI detected: %s (force ACPI _REV to 5)\n",
+              d->ident);
+       acpi_rev_override_setup(NULL);
+       return 0;
+}
+#endif
 
 static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
        {
@@ -325,6 +334,23 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
                     DMI_MATCH(DMI_PRODUCT_NAME, "1015PX"),
                },
        },
+
+#ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
+       /*
+        * DELL XPS 13 (2015) switches sound between HDA and I2S
+        * depending on the ACPI _REV callback. If userspace supports
+        * I2S sufficiently (or if you do not care about sound), you
+        * can safely disable this quirk.
+        */
+       {
+        .callback = dmi_enable_rev_override,
+        .ident = "DELL XPS 13 (2015)",
+        .matches = {
+                     DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                     DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9343"),
+               },
+       },
+#endif
        {}
 };
 
index 787c629bc9b41e83ac11496f76bb646437d3b077..4683a96932b917fcc5f3efc04e290eb07012efad 100644 (file)
@@ -58,6 +58,7 @@ void acpi_cmos_rtc_init(void);
 #else
 static inline void acpi_cmos_rtc_init(void) {}
 #endif
+int acpi_rev_override_setup(char *str);
 
 extern bool acpi_force_hot_remove;
 
index a5dc9034efeeda6f06044521600518f70bd322d3..c262e4acd68d827cba1273d79e28515c6ebe95fa 100644 (file)
@@ -530,6 +530,19 @@ acpi_os_get_physical_address(void *virt, acpi_physical_address * phys)
 }
 #endif
 
+#ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
+static bool acpi_rev_override;
+
+int __init acpi_rev_override_setup(char *str)
+{
+       acpi_rev_override = true;
+       return 1;
+}
+__setup("acpi_rev_override", acpi_rev_override_setup);
+#else
+#define acpi_rev_override      false
+#endif
+
 #define ACPI_MAX_OVERRIDE_LEN 100
 
 static char acpi_os_name[ACPI_MAX_OVERRIDE_LEN];
@@ -548,6 +561,11 @@ acpi_os_predefined_override(const struct acpi_predefined_names *init_val,
                *new_val = acpi_os_name;
        }
 
+       if (!memcmp(init_val->name, "_REV", 4) && acpi_rev_override) {
+               printk(KERN_INFO PREFIX "Overriding _REV return value to 5\n");
+               *new_val = (char *)5;
+       }
+
        return AE_OK;
 }
 
index 273de709495c1db522d46dad7f339677fc8df756..b52c0dc4b4925a1d29c6c8b2d55a1ed0c40b2b75 100644 (file)
@@ -51,6 +51,7 @@
 #define METHOD_NAME__BBN        "_BBN"
 #define METHOD_NAME__CBA        "_CBA"
 #define METHOD_NAME__CID        "_CID"
+#define METHOD_NAME__CLS        "_CLS"
 #define METHOD_NAME__CRS        "_CRS"
 #define METHOD_NAME__DDN        "_DDN"
 #define METHOD_NAME__HID        "_HID"
index a8f344363e7737d056bebc7ec7f4d45fa2e170f0..f56de8c5d844de3019d2e8fb8b04f5fedab2d58f 100644 (file)
 
 /* DEBUG_PRINT functions */
 
-#define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist
-#define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist
+#ifndef COMPILER_VA_MACRO
+
+#define ACPI_DEBUG_PRINT(plist)         acpi_debug_print plist
+#define ACPI_DEBUG_PRINT_RAW(plist)     acpi_debug_print_raw plist
+
+#else
 
 /* Helper macros for DEBUG_PRINT */
 
        ACPI_DO_DEBUG_PRINT (acpi_debug_print_raw, level, line, \
                filename, modulename, component, __VA_ARGS__)
 
+#define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist
+#define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist
+
+#endif
+
 /*
  * Function entry tracing
  *
index d68f1cd39c495f732b66c048d64cbe384162cd6d..e8ec18a4a634d8d5679a49757fcb616233ec5a9d 100644 (file)
@@ -46,7 +46,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20150515
+#define ACPI_CA_VERSION                 0x20150619
 
 #include <acpi/acconfig.h>
 #include <acpi/actypes.h>
@@ -195,9 +195,18 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE);
  * address. Although ACPICA adheres to the ACPI specification which
  * requires the use of the corresponding 64-bit address if it is non-zero,
  * some machines have been found to have a corrupted non-zero 64-bit
- * address. Default is TRUE, favor the 32-bit addresses.
+ * address. Default is FALSE, do not favor the 32-bit addresses.
  */
-ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, TRUE);
+ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, FALSE);
+
+/*
+ * Optionally use 32-bit FACS table addresses.
+ * It is reported that some platforms fail to resume from system suspending
+ * if 64-bit FACS table address is selected:
+ * https://bugzilla.kernel.org/show_bug.cgi?id=74021
+ * Default is TRUE, favor the 32-bit addresses.
+ */
+ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_facs_addresses, TRUE);
 
 /*
  * Optionally truncate I/O addresses to 16 bits. Provides compatibility
@@ -219,6 +228,11 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_auto_repair, FALSE);
  */
 ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE);
 
+/*
+ * Optionally enable runtime namespace override.
+ */
+ACPI_INIT_GLOBAL(u8, acpi_gbl_runtime_namespace_override, TRUE);
+
 /*
  * We keep track of the latest version of Windows that has been requested by
  * the BIOS. ACPI 5.0.
@@ -814,8 +828,12 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status
 ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state(u8 sleep_state))
 
 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
-                               acpi_set_firmware_waking_vector(u32
-                                                               physical_address))
+                               acpi_set_firmware_waking_vectors
+                               (acpi_physical_address physical_address,
+                                acpi_physical_address physical_address64))
+ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
+                                acpi_set_firmware_waking_vector(u32
+                                                                physical_address))
 #if ACPI_MACHINE_WIDTH == 64
 ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
                                acpi_set_firmware_waking_vector64(u64
index cb8a6b97cedae07b239fbc5eb671e1ddfe6d38ea..2d5faf508cadfd159a5b1213bc2bc16d66ae5535 100644 (file)
@@ -65,6 +65,7 @@
 #define ACPI_SIG_DSDT           "DSDT" /* Differentiated System Description Table */
 #define ACPI_SIG_FADT           "FACP" /* Fixed ACPI Description Table */
 #define ACPI_SIG_FACS           "FACS" /* Firmware ACPI Control Structure */
+#define ACPI_SIG_OSDT           "OSDT" /* Override System Description Table */
 #define ACPI_SIG_PSDT           "PSDT" /* Persistent System Description Table */
 #define ACPI_SIG_RSDP           "RSD PTR "     /* Root System Description Pointer */
 #define ACPI_SIG_RSDT           "RSDT" /* Root System Description Table */
index 06b61f01ea599177c0cba9b3172c89672d7aa63b..fcd570999f354247c9dbba73163797ff38cbd1a6 100644 (file)
@@ -835,6 +835,17 @@ struct acpi_madt_generic_distributor {
        u8 reserved2[3];        /* reserved - must be zero */
 };
 
+/* Values for Version field above */
+
+enum acpi_madt_gic_version {
+       ACPI_MADT_GIC_VERSION_NONE = 0,
+       ACPI_MADT_GIC_VERSION_V1 = 1,
+       ACPI_MADT_GIC_VERSION_V2 = 2,
+       ACPI_MADT_GIC_VERSION_V3 = 3,
+       ACPI_MADT_GIC_VERSION_V4 = 4,
+       ACPI_MADT_GIC_VERSION_RESERVED = 5      /* 5 and greater are reserved */
+};
+
 /* 13: Generic MSI Frame (ACPI 5.1) */
 
 struct acpi_madt_generic_msi_frame {
index 370d69d871a0d19054c6fd81bf33789670493f08..a948fc586b9b8406d44b5e35f4e50c1ed436830e 100644 (file)
@@ -51,8 +51,8 @@
  * These tables are not consumed directly by the ACPICA subsystem, but are
  * included here to support device drivers and the AML disassembler.
  *
- * The tables in this file are defined by third-party specifications, and are
- * not defined directly by the ACPI specification itself.
+ * Generally, the tables in this file are defined by third-party specifications,
+ * and are not defined directly by the ACPI specification itself.
  *
  ******************************************************************************/
 
@@ -80,6 +80,7 @@
 #define ACPI_SIG_SPCR           "SPCR" /* Serial Port Console Redirection table */
 #define ACPI_SIG_SPMI           "SPMI" /* Server Platform Management Interface table */
 #define ACPI_SIG_TCPA           "TCPA" /* Trusted Computing Platform Alliance table */
+#define ACPI_SIG_TPM2           "TPM2" /* Trusted Platform Module 2.0 H/W interface table */
 #define ACPI_SIG_UEFI           "UEFI" /* Uefi Boot Optimization Table */
 #define ACPI_SIG_VRTC           "VRTC" /* Virtual Real Time Clock Table */
 #define ACPI_SIG_WAET           "WAET" /* Windows ACPI Emulated devices Table */
@@ -1179,20 +1180,85 @@ enum acpi_spmi_interface_types {
 /*******************************************************************************
  *
  * TCPA - Trusted Computing Platform Alliance table
- *        Version 1
+ *        Version 2
+ *
+ * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
+ * December 19, 2014
  *
- * Conforms to "TCG PC Specific Implementation Specification",
- * Version 1.1, August 18, 2003
+ * NOTE: There are two versions of the table with the same signature --
+ * the client version and the server version.
  *
  ******************************************************************************/
 
-struct acpi_table_tcpa {
+struct acpi_table_tcpa_client {
        struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
+       u32 minimum_log_length; /* Minimum length for the event log area */
+       u64 log_address;        /* Address of the event log area */
+};
+
+struct acpi_table_tcpa_server {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
        u16 reserved;
-       u32 max_log_length;     /* Maximum length for the event log area */
+       u64 minimum_log_length; /* Minimum length for the event log area */
        u64 log_address;        /* Address of the event log area */
+       u16 spec_revision;
+       u8 device_flags;
+       u8 interrupt_flags;
+       u8 gpe_number;
+       u8 reserved2[3];
+       u32 global_interrupt;
+       struct acpi_generic_address address;
+       u32 reserved3;
+       struct acpi_generic_address config_address;
+       u8 group;
+       u8 bus;                 /* PCI Bus/Segment/Function numbers */
+       u8 device;
+       u8 function;
+};
+
+/* Values for device_flags above */
+
+#define ACPI_TCPA_PCI_DEVICE            (1)
+#define ACPI_TCPA_BUS_PNP               (1<<1)
+#define ACPI_TCPA_ADDRESS_VALID         (1<<2)
+
+/* Values for interrupt_flags above */
+
+#define ACPI_TCPA_INTERRUPT_MODE        (1)
+#define ACPI_TCPA_INTERRUPT_POLARITY    (1<<1)
+#define ACPI_TCPA_SCI_VIA_GPE           (1<<2)
+#define ACPI_TCPA_GLOBAL_INTERRUPT      (1<<3)
+
+/*******************************************************************************
+ *
+ * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
+ *        Version 4
+ *
+ * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
+ * December 19, 2014
+ *
+ ******************************************************************************/
+
+struct acpi_table_tpm2 {
+       struct acpi_table_header header;        /* Common ACPI table header */
+       u16 platform_class;
+       u16 reserved;
+       u64 control_address;
+       u32 start_method;
+
+       /* Platform-specific data follows */
 };
 
+/* Values for start_method above */
+
+#define ACPI_TPM2_NOT_ALLOWED                       0
+#define ACPI_TPM2_START_METHOD                      2
+#define ACPI_TPM2_MEMORY_MAPPED                     6
+#define ACPI_TPM2_COMMAND_BUFFER                    7
+#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD  8
+
 /*******************************************************************************
  *
  * UEFI - UEFI Boot optimization Table
index 4018986d2a2e2b96f5bf2f493078561666b59e41..1df891660f4394e5f805e57455cbb662b9fac920 100644 (file)
@@ -51,7 +51,8 @@
  * These tables are not consumed directly by the ACPICA subsystem, but are
  * included here to support device drivers and the AML disassembler.
  *
- * The tables in this file are fully defined within the ACPI specification.
+ * In general, the tables in this file are fully defined within the ACPI
+ * specification.
  *
  ******************************************************************************/
 
@@ -69,7 +70,6 @@
 #define ACPI_SIG_PMTT           "PMTT" /* Platform Memory Topology Table */
 #define ACPI_SIG_RASF           "RASF" /* RAS Feature table */
 #define ACPI_SIG_STAO           "STAO" /* Status Override table */
-#define ACPI_SIG_TPM2           "TPM2" /* Trusted Platform Module 2.0 H/W interface table */
 #define ACPI_SIG_WPBT           "WPBT" /* Windows Platform Binary Table */
 #define ACPI_SIG_XENV           "XENV" /* Xen Environment table */
 
@@ -720,36 +720,6 @@ struct acpi_table_stao {
        u8 ignore_uart;
 };
 
-/*******************************************************************************
- *
- * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table
- *        Version 3
- *
- * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011
- *
- ******************************************************************************/
-
-struct acpi_table_tpm2 {
-       struct acpi_table_header header;        /* Common ACPI table header */
-       u32 flags;
-       u64 control_address;
-       u32 start_method;
-};
-
-/* Control area structure (not part of table, pointed to by control_address) */
-
-struct acpi_tpm2_control {
-       u32 reserved;
-       u32 error;
-       u32 cancel;
-       u32 start;
-       u64 interrupt_control;
-       u32 command_size;
-       u64 command_address;
-       u32 response_size;
-       u64 response_address;
-};
-
 /*******************************************************************************
  *
  * WPBT - Windows Platform Environment Table (ACPI 6.0)
index 63fd7f5e9fb3495198e659c8b04a16db2e489877..c2a41d223162a3ef3936d40c111e89fd5a4c6600 100644 (file)
@@ -542,14 +542,14 @@ typedef u64 acpi_integer;
 #define ACPI_COMPARE_NAME(a,b)          (*ACPI_CAST_PTR (u32, (a)) == *ACPI_CAST_PTR (u32, (b)))
 #define ACPI_MOVE_NAME(dest,src)        (*ACPI_CAST_PTR (u32, (dest)) = *ACPI_CAST_PTR (u32, (src)))
 #else
-#define ACPI_COMPARE_NAME(a,b)          (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))
-#define ACPI_MOVE_NAME(dest,src)        (ACPI_STRNCPY (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAME_SIZE))
+#define ACPI_COMPARE_NAME(a,b)          (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAME_SIZE))
+#define ACPI_MOVE_NAME(dest,src)        (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAME_SIZE))
 #endif
 
 /* Support for the special RSDP signature (8 characters) */
 
-#define ACPI_VALIDATE_RSDP_SIG(a)       (!ACPI_STRNCMP (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))
-#define ACPI_MAKE_RSDP_SIG(dest)        (ACPI_MEMCPY (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8))
+#define ACPI_VALIDATE_RSDP_SIG(a)       (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))
+#define ACPI_MAKE_RSDP_SIG(dest)        (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8))
 
 /*******************************************************************************
  *
@@ -568,6 +568,7 @@ typedef u64 acpi_integer;
 #define ACPI_NO_ACPI_ENABLE             0x10
 #define ACPI_NO_DEVICE_INIT             0x20
 #define ACPI_NO_OBJECT_INIT             0x40
+#define ACPI_NO_FACS_INIT               0x80
 
 /*
  * Initialization state
@@ -1140,6 +1141,10 @@ u32 (*acpi_interface_handler) (acpi_string interface_name, u32 supported);
 
 #define ACPI_UUID_LENGTH                16
 
+/* Length of 3-byte PCI class code values when converted back to a string */
+
+#define ACPI_PCICLS_STRING_SIZE         7      /* Includes null terminator */
+
 /* Structures used for device/processor HID, UID, CID, and SUB */
 
 struct acpi_pnp_device_id {
@@ -1162,7 +1167,7 @@ struct acpi_device_info {
        u32 name;               /* ACPI object Name */
        acpi_object_type type;  /* ACPI object Type */
        u8 param_count;         /* If a method, required parameter count */
-       u8 valid;               /* Indicates which optional fields are valid */
+       u16 valid;              /* Indicates which optional fields are valid */
        u8 flags;               /* Miscellaneous info */
        u8 highest_dstates[4];  /* _sx_d values: 0xFF indicates not valid */
        u8 lowest_dstates[5];   /* _sx_w values: 0xFF indicates not valid */
@@ -1171,6 +1176,7 @@ struct acpi_device_info {
        struct acpi_pnp_device_id hardware_id;  /* _HID value */
        struct acpi_pnp_device_id unique_id;    /* _UID value */
        struct acpi_pnp_device_id subsystem_id; /* _SUB value */
+       struct acpi_pnp_device_id class_code;   /* _CLS value */
        struct acpi_pnp_device_id_list compatible_id_list;      /* _CID list <must be last> */
 };
 
@@ -1180,14 +1186,15 @@ struct acpi_device_info {
 
 /* Flags for Valid field above (acpi_get_object_info) */
 
-#define ACPI_VALID_STA                  0x01
-#define ACPI_VALID_ADR                  0x02
-#define ACPI_VALID_HID                  0x04
-#define ACPI_VALID_UID                  0x08
-#define ACPI_VALID_SUB                  0x10
-#define ACPI_VALID_CID                  0x20
-#define ACPI_VALID_SXDS                 0x40
-#define ACPI_VALID_SXWS                 0x80
+#define ACPI_VALID_STA                  0x0001
+#define ACPI_VALID_ADR                  0x0002
+#define ACPI_VALID_HID                  0x0004
+#define ACPI_VALID_UID                  0x0008
+#define ACPI_VALID_SUB                  0x0010
+#define ACPI_VALID_CID                  0x0020
+#define ACPI_VALID_CLS                  0x0040
+#define ACPI_VALID_SXDS                 0x0100
+#define ACPI_VALID_SXWS                 0x0200
 
 /* Flags for _STA return value (current_status above) */
 
index 073997d729e9c9710c10656ff3f34c6e30527c34..3cedd43943f42a8465772def8b68f3f93f322676 100644 (file)
 
 /* We will be linking to the standard Clib functions */
 
-#define ACPI_STRSTR(s1,s2)      strstr((s1), (s2))
-#define ACPI_STRCHR(s1,c)       strchr((s1), (c))
-#define ACPI_STRLEN(s)          (acpi_size) strlen((s))
-#define ACPI_STRCPY(d,s)        (void) strcpy((d), (s))
-#define ACPI_STRNCPY(d,s,n)     (void) strncpy((d), (s), (acpi_size)(n))
-#define ACPI_STRNCMP(d,s,n)     strncmp((d), (s), (acpi_size)(n))
-#define ACPI_STRCMP(d,s)        strcmp((d), (s))
-#define ACPI_STRCAT(d,s)        (void) strcat((d), (s))
-#define ACPI_STRNCAT(d,s,n)     strncat((d), (s), (acpi_size)(n))
-#define ACPI_STRTOUL(d,s,n)     strtoul((d), (s), (acpi_size)(n))
-#define ACPI_MEMCMP(s1,s2,n)    memcmp((const char *)(s1), (const char *)(s2), (acpi_size)(n))
-#define ACPI_MEMCPY(d,s,n)      (void) memcpy((d), (s), (acpi_size)(n))
-#define ACPI_MEMSET(d,s,n)      (void) memset((d), (s), (acpi_size)(n))
-
-#define ACPI_TOUPPER(i)         toupper((int) (i))
-#define ACPI_TOLOWER(i)         tolower((int) (i))
-#define ACPI_IS_XDIGIT(i)       isxdigit((int) (i))
-#define ACPI_IS_DIGIT(i)        isdigit((int) (i))
-#define ACPI_IS_SPACE(i)        isspace((int) (i))
-#define ACPI_IS_UPPER(i)        isupper((int) (i))
-#define ACPI_IS_PRINT(i)        isprint((int) (i))
-#define ACPI_IS_ALPHA(i)        isalpha((int) (i))
-
 #else
 
 /******************************************************************************
@@ -406,22 +383,6 @@ typedef char *va_list;
 
 /* Use the local (ACPICA) definitions of the clib functions */
 
-#define ACPI_STRSTR(s1,s2)      acpi_ut_strstr ((s1), (s2))
-#define ACPI_STRCHR(s1,c)       acpi_ut_strchr ((s1), (c))
-#define ACPI_STRLEN(s)          (acpi_size) acpi_ut_strlen ((s))
-#define ACPI_STRCPY(d,s)        (void) acpi_ut_strcpy ((d), (s))
-#define ACPI_STRNCPY(d,s,n)     (void) acpi_ut_strncpy ((d), (s), (acpi_size)(n))
-#define ACPI_STRNCMP(d,s,n)     acpi_ut_strncmp ((d), (s), (acpi_size)(n))
-#define ACPI_STRCMP(d,s)        acpi_ut_strcmp ((d), (s))
-#define ACPI_STRCAT(d,s)        (void) acpi_ut_strcat ((d), (s))
-#define ACPI_STRNCAT(d,s,n)     acpi_ut_strncat ((d), (s), (acpi_size)(n))
-#define ACPI_STRTOUL(d,s,n)     acpi_ut_strtoul ((d), (s), (acpi_size)(n))
-#define ACPI_MEMCMP(s1,s2,n)    acpi_ut_memcmp((const char *)(s1), (const char *)(s2), (acpi_size)(n))
-#define ACPI_MEMCPY(d,s,n)      (void) acpi_ut_memcpy ((d), (s), (acpi_size)(n))
-#define ACPI_MEMSET(d,v,n)      (void) acpi_ut_memset ((d), (v), (acpi_size)(n))
-#define ACPI_TOUPPER(c)         acpi_ut_to_upper ((int) (c))
-#define ACPI_TOLOWER(c)         acpi_ut_to_lower ((int) (c))
-
 #endif                         /* ACPI_USE_SYSTEM_CLIBRARY */
 
 #ifndef ACPI_FILE
index 14dc6f68ca1854de0095e1d572d5e6de36abf7b5..0a7dc8e583b1c2d742e691cf6e4c00ccc0154f5a 100644 (file)
 #if defined(_LINUX) || defined(__linux__)
 #include <acpi/platform/aclinuxex.h>
 
+#elif defined(_AED_EFI)
+#include "acefiex.h"
+
+#elif defined(_GNU_EFI)
+#include "acefiex.h"
+
 #elif defined(__DragonFly__)
 #include "acdragonflyex.h"
 
index f54de0a635582d45b3aca6bb1977313d431e0549..5457a06cb52879f2775ed64630f63025ca3fbb9c 100644 (file)
@@ -75,4 +75,8 @@
 #undef strchr
 #endif
 
+/* GCC supports __VA_ARGS__ in macros */
+
+#define COMPILER_VA_MACRO               1
+
 #endif                         /* __ACGCC_H__ */
index 5da129e10aa2dcd049647d10d025c26e08b7cf65..326e826a5d20ac5ee3829aea1aca23dfc964c2ce 100644 (file)
@@ -127,7 +127,7 @@ int acpi_getopt(int argc, char **argv, char *opts)
                    argv[acpi_gbl_optind][0] != '-' ||
                    argv[acpi_gbl_optind][1] == '\0') {
                        return (ACPI_OPT_END);
-               } else if (ACPI_STRCMP(argv[acpi_gbl_optind], "--") == 0) {
+               } else if (strcmp(argv[acpi_gbl_optind], "--") == 0) {
                        acpi_gbl_optind++;
                        return (ACPI_OPT_END);
                }
@@ -140,7 +140,7 @@ int acpi_getopt(int argc, char **argv, char *opts)
        /* Make sure that the option is legal */
 
        if (current_char == ':' ||
-           (opts_ptr = ACPI_STRCHR(opts, current_char)) == NULL) {
+           (opts_ptr = strchr(opts, current_char)) == NULL) {
                ACPI_OPTION_ERROR("Illegal option: -", current_char);
 
                if (argv[acpi_gbl_optind][++current_char_ptr] == '\0') {
index 38f095d86b5260d54a30f8dfde8da33de91d1995..79e2d1d435d1337dbb35d138b1e3e448a60217eb 100644 (file)
@@ -22,9 +22,6 @@ acpidump options are as follow:
 .B \-b
 Dump tables to binary files
 .TP
-.B \-c
-Dump customized tables
-.TP
 .B \-h \-?
 This help message
 .TP
@@ -48,15 +45,25 @@ Verbose mode
 .B \-a <Address>
 Get table via a physical address
 .TP
+.B \-c <on|off>
+Turning on/off customized table dumping
+.TP
 .B \-f <BinaryFile>
 Get table via a binary file
 .TP
 .B \-n <Signature>
 Get table via a name/signature
 .TP
-Invocation without parameters dumps all available tables
+.B \-x
+Do not use but dump XSDT
+.TP
+.B \-x \-x
+Do not use or dump XSDT
+.TP
+.fi
+Invocation without parameters dumps all available tables.
 .TP
-Multiple mixed instances of -a, -f, and -n are supported
+Multiple mixed instances of -a, -f, and -n are supported.
 
 .SH EXAMPLES
 
index db15c9d2049e08f6090d3d391a7617246aa9c1c5..dd5008b0617a033c76b0fda581aa4fb6a74e5788 100644 (file)
@@ -222,7 +222,7 @@ acpi_os_get_table_by_address(acpi_physical_address address,
                goto exit;
        }
 
-       ACPI_MEMCPY(local_table, mapped_table, table_length);
+       memcpy(local_table, mapped_table, table_length);
 
 exit:
        osl_unmap_table(mapped_table);
@@ -531,7 +531,7 @@ static acpi_status osl_load_rsdp(void)
        gbl_rsdp_address =
            rsdp_base + (ACPI_CAST8(mapped_table) - rsdp_address);
 
-       ACPI_MEMCPY(&gbl_rsdp, mapped_table, sizeof(struct acpi_table_rsdp));
+       memcpy(&gbl_rsdp, mapped_table, sizeof(struct acpi_table_rsdp));
        acpi_os_unmap_memory(rsdp_address, rsdp_size);
 
        return (AE_OK);
@@ -582,64 +582,67 @@ static acpi_status osl_table_initialize(void)
                return (AE_OK);
        }
 
-       /* Get RSDP from memory */
+       if (!gbl_dump_customized_tables) {
 
-       status = osl_load_rsdp();
-       if (ACPI_FAILURE(status)) {
-               return (status);
-       }
+               /* Get RSDP from memory */
+
+               status = osl_load_rsdp();
+               if (ACPI_FAILURE(status)) {
+                       return (status);
+               }
 
-       /* Get XSDT from memory */
+               /* Get XSDT from memory */
 
-       if (gbl_rsdp.revision && !gbl_do_not_dump_xsdt) {
-               if (gbl_xsdt) {
-                       free(gbl_xsdt);
-                       gbl_xsdt = NULL;
+               if (gbl_rsdp.revision && !gbl_do_not_dump_xsdt) {
+                       if (gbl_xsdt) {
+                               free(gbl_xsdt);
+                               gbl_xsdt = NULL;
+                       }
+
+                       gbl_revision = 2;
+                       status = osl_get_bios_table(ACPI_SIG_XSDT, 0,
+                                                   ACPI_CAST_PTR(struct
+                                                                 acpi_table_header
+                                                                 *, &gbl_xsdt),
+                                                   &address);
+                       if (ACPI_FAILURE(status)) {
+                               return (status);
+                       }
                }
 
-               gbl_revision = 2;
-               status = osl_get_bios_table(ACPI_SIG_XSDT, 0,
-                                           ACPI_CAST_PTR(struct
-                                                         acpi_table_header *,
-                                                         &gbl_xsdt), &address);
-               if (ACPI_FAILURE(status)) {
-                       return (status);
+               /* Get RSDT from memory */
+
+               if (gbl_rsdp.rsdt_physical_address) {
+                       if (gbl_rsdt) {
+                               free(gbl_rsdt);
+                               gbl_rsdt = NULL;
+                       }
+
+                       status = osl_get_bios_table(ACPI_SIG_RSDT, 0,
+                                                   ACPI_CAST_PTR(struct
+                                                                 acpi_table_header
+                                                                 *, &gbl_rsdt),
+                                                   &address);
+                       if (ACPI_FAILURE(status)) {
+                               return (status);
+                       }
                }
-       }
 
-       /* Get RSDT from memory */
+               /* Get FADT from memory */
 
-       if (gbl_rsdp.rsdt_physical_address) {
-               if (gbl_rsdt) {
-                       free(gbl_rsdt);
-                       gbl_rsdt = NULL;
+               if (gbl_fadt) {
+                       free(gbl_fadt);
+                       gbl_fadt = NULL;
                }
 
-               status = osl_get_bios_table(ACPI_SIG_RSDT, 0,
+               status = osl_get_bios_table(ACPI_SIG_FADT, 0,
                                            ACPI_CAST_PTR(struct
                                                          acpi_table_header *,
-                                                         &gbl_rsdt), &address);
+                                                         &gbl_fadt),
+                                           &gbl_fadt_address);
                if (ACPI_FAILURE(status)) {
                        return (status);
                }
-       }
-
-       /* Get FADT from memory */
-
-       if (gbl_fadt) {
-               free(gbl_fadt);
-               gbl_fadt = NULL;
-       }
-
-       status = osl_get_bios_table(ACPI_SIG_FADT, 0,
-                                   ACPI_CAST_PTR(struct acpi_table_header *,
-                                                 &gbl_fadt),
-                                   &gbl_fadt_address);
-       if (ACPI_FAILURE(status)) {
-               return (status);
-       }
-
-       if (!gbl_dump_customized_tables) {
 
                /* Add mandatory tables to global table list first */
 
@@ -961,7 +964,7 @@ osl_get_bios_table(char *signature,
                goto exit;
        }
 
-       ACPI_MEMCPY(local_table, mapped_table, table_length);
+       memcpy(local_table, mapped_table, table_length);
        *address = table_address;
        *table = local_table;
 
index 0b1fa290245a904d3255d1fd84976baab2f09851..44ad4889d468cad4b576e39eaad4ef5ba3844b07 100644 (file)
@@ -54,7 +54,7 @@ ACPI_MODULE_NAME("osunixmap")
 #ifndef O_BINARY
 #define O_BINARY 0
 #endif
-#ifdef _free_BSD
+#if defined(_dragon_fly) || defined(_free_BSD)
 #define MMAP_FLAGS          MAP_SHARED
 #else
 #define MMAP_FLAGS          MAP_PRIVATE
index 84bdef0136cbc15a6b9aea1c7c435f57452445fa..eed534481434301586fe13e28150a58677e57ac2 100644 (file)
@@ -66,7 +66,7 @@
 EXTERN u8 INIT_GLOBAL(gbl_summary_mode, FALSE);
 EXTERN u8 INIT_GLOBAL(gbl_verbose_mode, FALSE);
 EXTERN u8 INIT_GLOBAL(gbl_binary_mode, FALSE);
-EXTERN u8 INIT_GLOBAL(gbl_dump_customized_tables, FALSE);
+EXTERN u8 INIT_GLOBAL(gbl_dump_customized_tables, TRUE);
 EXTERN u8 INIT_GLOBAL(gbl_do_not_dump_xsdt, FALSE);
 EXTERN ACPI_FILE INIT_GLOBAL(gbl_output_file, NULL);
 EXTERN char INIT_GLOBAL(*gbl_output_filename, NULL);
index c736adf5fb55241ecb564a796496b2fad32e3b67..61d0de804b709d9568c1870565876f9c7fa0d5c0 100644 (file)
@@ -329,7 +329,7 @@ int ap_dump_table_by_name(char *signature)
        acpi_status status;
        int table_status;
 
-       if (ACPI_STRLEN(signature) != ACPI_NAME_SIZE) {
+       if (strlen(signature) != ACPI_NAME_SIZE) {
                acpi_log_error
                    ("Invalid table signature [%s]: must be exactly 4 characters\n",
                     signature);
@@ -338,15 +338,15 @@ int ap_dump_table_by_name(char *signature)
 
        /* Table signatures are expected to be uppercase */
 
-       ACPI_STRCPY(local_signature, signature);
+       strcpy(local_signature, signature);
        acpi_ut_strupr(local_signature);
 
        /* To be friendly, handle tables whose signatures do not match the name */
 
        if (ACPI_COMPARE_NAME(local_signature, "FADT")) {
-               ACPI_STRCPY(local_signature, ACPI_SIG_FADT);
+               strcpy(local_signature, ACPI_SIG_FADT);
        } else if (ACPI_COMPARE_NAME(local_signature, "MADT")) {
-               ACPI_STRCPY(local_signature, ACPI_SIG_MADT);
+               strcpy(local_signature, ACPI_SIG_MADT);
        }
 
        /* Dump all instances of this signature (to handle multiple SSDTs) */
index 8f2fe168228eb12d9e97efa085d9d5d5d41d94f3..a37f9702b2a90433978f4a6715919c4a9f8e11e6 100644 (file)
@@ -136,10 +136,10 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance)
        } else {
                ACPI_MOVE_NAME(filename, table->signature);
        }
-       filename[0] = (char)ACPI_TOLOWER(filename[0]);
-       filename[1] = (char)ACPI_TOLOWER(filename[1]);
-       filename[2] = (char)ACPI_TOLOWER(filename[2]);
-       filename[3] = (char)ACPI_TOLOWER(filename[3]);
+       filename[0] = (char)tolower((int)filename[0]);
+       filename[1] = (char)tolower((int)filename[1]);
+       filename[2] = (char)tolower((int)filename[2]);
+       filename[3] = (char)tolower((int)filename[3]);
        filename[ACPI_NAME_SIZE] = 0;
 
        /* Handle multiple SSDts - create different filenames for each */
@@ -147,10 +147,10 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance)
        if (instance > 0) {
                acpi_ut_snprintf(instance_str, sizeof(instance_str), "%u",
                                 instance);
-               ACPI_STRCAT(filename, instance_str);
+               strcat(filename, instance_str);
        }
 
-       ACPI_STRCAT(filename, ACPI_TABLE_FILE_SUFFIX);
+       strcat(filename, ACPI_TABLE_FILE_SUFFIX);
 
        if (gbl_verbose_mode) {
                acpi_log_error
index d0ba6535f5af0d0641487cda70ebb5b89ce24784..57620f66ae6c65c3db94952b83d01b8b492eb2fb 100644 (file)
@@ -80,7 +80,7 @@ struct ap_dump_action action_table[AP_MAX_ACTIONS];
 u32 current_action = 0;
 
 #define AP_UTILITY_NAME             "ACPI Binary Table Dump Utility"
-#define AP_SUPPORTED_OPTIONS        "?a:bcf:hn:o:r:svxz"
+#define AP_SUPPORTED_OPTIONS        "?a:bc:f:hn:o:r:svxz"
 
 /******************************************************************************
  *
@@ -96,7 +96,6 @@ static void ap_display_usage(void)
        ACPI_USAGE_HEADER("acpidump [options]");
 
        ACPI_OPTION("-b", "Dump tables to binary files");
-       ACPI_OPTION("-c", "Dump customized tables");
        ACPI_OPTION("-h -?", "This help message");
        ACPI_OPTION("-o <File>", "Redirect output to file");
        ACPI_OPTION("-r <Address>", "Dump tables from specified RSDP");
@@ -107,6 +106,7 @@ static void ap_display_usage(void)
        ACPI_USAGE_TEXT("\nTable Options:\n");
 
        ACPI_OPTION("-a <Address>", "Get table via a physical address");
+       ACPI_OPTION("-c <on|off>", "Turning on/off customized table dumping");
        ACPI_OPTION("-f <BinaryFile>", "Get table via a binary file");
        ACPI_OPTION("-n <Signature>", "Get table via a name/signature");
        ACPI_OPTION("-x", "Do not use but dump XSDT");
@@ -181,7 +181,16 @@ static int ap_do_options(int argc, char **argv)
 
                case 'c':       /* Dump customized tables */
 
-                       gbl_dump_customized_tables = TRUE;
+                       if (!strcmp(acpi_gbl_optarg, "on")) {
+                               gbl_dump_customized_tables = TRUE;
+                       } else if (!strcmp(acpi_gbl_optarg, "off")) {
+                               gbl_dump_customized_tables = FALSE;
+                       } else {
+                               acpi_log_error
+                                   ("%s: Cannot handle this switch, please use on|off\n",
+                                    acpi_gbl_optarg);
+                               return (-1);
+                       }
                        continue;
 
                case 'h':