/* Examine all installed tables of this type */
while (table_desc) {
- /* Compare Revision and oem_table_id */
-
+ /*
+ * If the table lengths match, perform a full bytewise compare. This
+ * means that we will allow tables with duplicate oem_table_id(s), as
+ * long as the tables are different in some way.
+ *
+ * Checking if the table has been loaded into the namespace means that
+ * we don't check for duplicate tables during the initial installation
+ * of tables within the RSDT/XSDT.
+ */
if ((table_desc->loaded_into_namespace) &&
- (table_desc->pointer->revision ==
- new_table_desc->pointer->revision) &&
- (!ACPI_MEMCMP(table_desc->pointer->oem_table_id,
- new_table_desc->pointer->oem_table_id, 8))) {
- /* This table is already installed */
+ (table_desc->pointer->length ==
+ new_table_desc->pointer->length)
+ &&
+ (!ACPI_MEMCMP
+ ((const char *)table_desc->pointer,
+ (const char *)new_table_desc->pointer,
+ (acpi_size) new_table_desc->pointer->length))) {
+ /* Match: this table is already installed */
ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
"Table [%4.4s] already installed: Rev %X oem_table_id [%8.8s]\n",
/* All Function names are longer than 4 chars, check is safe */
- if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_FUNCTION_PREFIX1) {
+ if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_MIXED) {
/* This is the case where the original source has not been modified */
return (function_name + 4);
}
- if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_FUNCTION_PREFIX2) {
+ if (*(ACPI_CAST_PTR(u32, function_name)) == ACPI_PREFIX_LOWER) {
/* This is the case where the source has been 'linuxized' */
return (function_name + 5);
for (i = 0; i < 32; i++) {
if (!(acpi_gbl_owner_id_mask & (1 << i))) {
+ ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
+ "Current owner_id mask: %8.8X New ID: %2.2X\n",
+ acpi_gbl_owner_id_mask, (i + 1)));
+
acpi_gbl_owner_id_mask |= (1 << i);
*owner_id = (acpi_owner_id) (i + 1);
goto exit;
acpi_owner_id owner_id = *owner_id_ptr;
acpi_status status;
- ACPI_FUNCTION_TRACE("ut_release_owner_id");
+ ACPI_FUNCTION_TRACE_U32("ut_release_owner_id", owner_id);
/* Always clear the input owner_id (zero is an invalid ID) */
/* Version string */
-#define ACPI_CA_VERSION 0x20050729
+#define ACPI_CA_VERSION 0x20050815
/*
* OS name, used for the _OS object. The _OS object is essentially obsolete,
/* Definitions of the predefined namespace names */
-#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
-#define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */
-#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */
+#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
+#define ACPI_ROOT_NAME (u32) 0x5F5F5F5C /* Root name is "\___" */
+
+#define ACPI_PREFIX_MIXED (u32) 0x69706341 /* "Acpi" */
+#define ACPI_PREFIX_LOWER (u32) 0x69706361 /* "acpi" */
#define ACPI_NS_ROOT_PATH "\\"
#define ACPI_NS_SYSTEM_BUS "_SB_"
-/*! [Begin] no source code translation (not handled by acpisrc) */
-#define ACPI_FUNCTION_PREFIX1 'ipcA'
-#define ACPI_FUNCTION_PREFIX2 'ipca'
-/*! [End] no source code translation !*/
-
#endif /* __ACNAMES_H__ */