Linux Audio

Check our new training course

Loading...
v3.5.6
  1/******************************************************************************
  2 *
  3 * Module Name: tbfind   - find table
  4 *
  5 *****************************************************************************/
  6
  7/*
  8 * Copyright (C) 2000 - 2012, Intel Corp.
  9 * All rights reserved.
 10 *
 11 * Redistribution and use in source and binary forms, with or without
 12 * modification, are permitted provided that the following conditions
 13 * are met:
 14 * 1. Redistributions of source code must retain the above copyright
 15 *    notice, this list of conditions, and the following disclaimer,
 16 *    without modification.
 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 18 *    substantially similar to the "NO WARRANTY" disclaimer below
 19 *    ("Disclaimer") and any redistribution must be conditioned upon
 20 *    including a substantially similar Disclaimer requirement for further
 21 *    binary redistribution.
 22 * 3. Neither the names of the above-listed copyright holders nor the names
 23 *    of any contributors may be used to endorse or promote products derived
 24 *    from this software without specific prior written permission.
 25 *
 26 * Alternatively, this software may be distributed under the terms of the
 27 * GNU General Public License ("GPL") version 2 as published by the Free
 28 * Software Foundation.
 29 *
 30 * NO WARRANTY
 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 41 * POSSIBILITY OF SUCH DAMAGES.
 42 */
 43
 44#include <acpi/acpi.h>
 45#include "accommon.h"
 46#include "actables.h"
 47
 48#define _COMPONENT          ACPI_TABLES
 49ACPI_MODULE_NAME("tbfind")
 50
 51/*******************************************************************************
 52 *
 53 * FUNCTION:    acpi_tb_find_table
 54 *
 55 * PARAMETERS:  Signature           - String with ACPI table signature
 56 *              oem_id              - String with the table OEM ID
 57 *              oem_table_id        - String with the OEM Table ID
 58 *              table_index         - Where the table index is returned
 59 *
 60 * RETURN:      Status and table index
 61 *
 62 * DESCRIPTION: Find an ACPI table (in the RSDT/XSDT) that matches the
 63 *              Signature, OEM ID and OEM Table ID. Returns an index that can
 64 *              be used to get the table header or entire table.
 65 *
 66 ******************************************************************************/
 67acpi_status
 68acpi_tb_find_table(char *signature,
 69		   char *oem_id, char *oem_table_id, u32 *table_index)
 70{
 71	u32 i;
 72	acpi_status status;
 73	struct acpi_table_header header;
 74
 75	ACPI_FUNCTION_TRACE(tb_find_table);
 76
 77	/* Normalize the input strings */
 78
 79	ACPI_MEMSET(&header, 0, sizeof(struct acpi_table_header));
 80	ACPI_STRNCPY(header.signature, signature, ACPI_NAME_SIZE);
 81	ACPI_STRNCPY(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
 82	ACPI_STRNCPY(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
 83
 84	/* Search for the table */
 85
 86	for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
 87		if (ACPI_MEMCMP(&(acpi_gbl_root_table_list.tables[i].signature),
 88				header.signature, ACPI_NAME_SIZE)) {
 89
 90			/* Not the requested table */
 91
 92			continue;
 93		}
 94
 95		/* Table with matching signature has been found */
 96
 97		if (!acpi_gbl_root_table_list.tables[i].pointer) {
 98
 99			/* Table is not currently mapped, map it */
100
101			status =
102			    acpi_tb_verify_table(&acpi_gbl_root_table_list.
103						 tables[i]);
104			if (ACPI_FAILURE(status)) {
105				return_ACPI_STATUS(status);
106			}
107
108			if (!acpi_gbl_root_table_list.tables[i].pointer) {
109				continue;
110			}
111		}
112
113		/* Check for table match on all IDs */
114
115		if (!ACPI_MEMCMP
116		    (acpi_gbl_root_table_list.tables[i].pointer->signature,
117		     header.signature, ACPI_NAME_SIZE) && (!oem_id[0]
118							   ||
119							   !ACPI_MEMCMP
120							   (acpi_gbl_root_table_list.
121							    tables[i].pointer->
122							    oem_id,
123							    header.oem_id,
124							    ACPI_OEM_ID_SIZE))
125		    && (!oem_table_id[0]
126			|| !ACPI_MEMCMP(acpi_gbl_root_table_list.tables[i].
127					pointer->oem_table_id,
128					header.oem_table_id,
129					ACPI_OEM_TABLE_ID_SIZE))) {
130			*table_index = i;
131
132			ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
133					  "Found table [%4.4s]\n",
134					  header.signature));
135			return_ACPI_STATUS(AE_OK);
136		}
137	}
138
139	return_ACPI_STATUS(AE_NOT_FOUND);
140}
v3.1
  1/******************************************************************************
  2 *
  3 * Module Name: tbfind   - find table
  4 *
  5 *****************************************************************************/
  6
  7/*
  8 * Copyright (C) 2000 - 2011, Intel Corp.
  9 * All rights reserved.
 10 *
 11 * Redistribution and use in source and binary forms, with or without
 12 * modification, are permitted provided that the following conditions
 13 * are met:
 14 * 1. Redistributions of source code must retain the above copyright
 15 *    notice, this list of conditions, and the following disclaimer,
 16 *    without modification.
 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 18 *    substantially similar to the "NO WARRANTY" disclaimer below
 19 *    ("Disclaimer") and any redistribution must be conditioned upon
 20 *    including a substantially similar Disclaimer requirement for further
 21 *    binary redistribution.
 22 * 3. Neither the names of the above-listed copyright holders nor the names
 23 *    of any contributors may be used to endorse or promote products derived
 24 *    from this software without specific prior written permission.
 25 *
 26 * Alternatively, this software may be distributed under the terms of the
 27 * GNU General Public License ("GPL") version 2 as published by the Free
 28 * Software Foundation.
 29 *
 30 * NO WARRANTY
 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 41 * POSSIBILITY OF SUCH DAMAGES.
 42 */
 43
 44#include <acpi/acpi.h>
 45#include "accommon.h"
 46#include "actables.h"
 47
 48#define _COMPONENT          ACPI_TABLES
 49ACPI_MODULE_NAME("tbfind")
 50
 51/*******************************************************************************
 52 *
 53 * FUNCTION:    acpi_tb_find_table
 54 *
 55 * PARAMETERS:  Signature           - String with ACPI table signature
 56 *              oem_id              - String with the table OEM ID
 57 *              oem_table_id        - String with the OEM Table ID
 58 *              table_index         - Where the table index is returned
 59 *
 60 * RETURN:      Status and table index
 61 *
 62 * DESCRIPTION: Find an ACPI table (in the RSDT/XSDT) that matches the
 63 *              Signature, OEM ID and OEM Table ID. Returns an index that can
 64 *              be used to get the table header or entire table.
 65 *
 66 ******************************************************************************/
 67acpi_status
 68acpi_tb_find_table(char *signature,
 69		   char *oem_id, char *oem_table_id, u32 *table_index)
 70{
 71	u32 i;
 72	acpi_status status;
 73	struct acpi_table_header header;
 74
 75	ACPI_FUNCTION_TRACE(tb_find_table);
 76
 77	/* Normalize the input strings */
 78
 79	ACPI_MEMSET(&header, 0, sizeof(struct acpi_table_header));
 80	ACPI_STRNCPY(header.signature, signature, ACPI_NAME_SIZE);
 81	ACPI_STRNCPY(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
 82	ACPI_STRNCPY(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
 83
 84	/* Search for the table */
 85
 86	for (i = 0; i < acpi_gbl_root_table_list.current_table_count; ++i) {
 87		if (ACPI_MEMCMP(&(acpi_gbl_root_table_list.tables[i].signature),
 88				header.signature, ACPI_NAME_SIZE)) {
 89
 90			/* Not the requested table */
 91
 92			continue;
 93		}
 94
 95		/* Table with matching signature has been found */
 96
 97		if (!acpi_gbl_root_table_list.tables[i].pointer) {
 98
 99			/* Table is not currently mapped, map it */
100
101			status =
102			    acpi_tb_verify_table(&acpi_gbl_root_table_list.
103						 tables[i]);
104			if (ACPI_FAILURE(status)) {
105				return_ACPI_STATUS(status);
106			}
107
108			if (!acpi_gbl_root_table_list.tables[i].pointer) {
109				continue;
110			}
111		}
112
113		/* Check for table match on all IDs */
114
115		if (!ACPI_MEMCMP
116		    (acpi_gbl_root_table_list.tables[i].pointer->signature,
117		     header.signature, ACPI_NAME_SIZE) && (!oem_id[0]
118							   ||
119							   !ACPI_MEMCMP
120							   (acpi_gbl_root_table_list.
121							    tables[i].pointer->
122							    oem_id,
123							    header.oem_id,
124							    ACPI_OEM_ID_SIZE))
125		    && (!oem_table_id[0]
126			|| !ACPI_MEMCMP(acpi_gbl_root_table_list.tables[i].
127					pointer->oem_table_id,
128					header.oem_table_id,
129					ACPI_OEM_TABLE_ID_SIZE))) {
130			*table_index = i;
131
132			ACPI_DEBUG_PRINT((ACPI_DB_TABLES,
133					  "Found table [%4.4s]\n",
134					  header.signature));
135			return_ACPI_STATUS(AE_OK);
136		}
137	}
138
139	return_ACPI_STATUS(AE_NOT_FOUND);
140}