aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/tables/tbrsdt.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2006-04-21 17:15:00 -0400
committerLen Brown <len.brown@intel.com>2006-06-14 02:30:55 -0400
commitb229cf92eee616c7cb5ad8cdb35a19b119f00bc8 (patch)
tree74b52bec6ec029859c2320aba227290a503af31a /drivers/acpi/tables/tbrsdt.c
parent793c2388cae3fd023b3b5166354931752d42353c (diff)
ACPI: ACPICA 20060421
Removed a device initialization optimization introduced in 20051216 where the _STA method was not run unless an _INI was also present for the same device. This optimization could cause problems because it could allow _INI methods to be run within a not-present device subtree (If a not-present device had no _INI, _STA would not be run, the not-present status would not be discovered, and the children of the device would be incorrectly traversed.) Implemented a new _STA optimization where namespace subtrees that do not contain _INI are identified and ignored during device initialization. Selectively running _STA can significantly improve boot time on large machines (with assistance from Len Brown.) Implemented support for the device initialization case where the returned _STA flags indicate a device not-present but functioning. In this case, _INI is not run, but the device children are examined for presence, as per the ACPI specification. Implemented an additional change to the IndexField support in order to conform to MS behavior. The value written to the Index Register is not simply a byte offset, it is a byte offset in units of the access width of the parent Index Field. (Fiodor Suietov) Defined and deployed a new OSL interface, acpi_os_validate_address(). This interface is called during the creation of all AML operation regions, and allows the host OS to exert control over what addresses it will allow the AML code to access. Operation Regions whose addresses are disallowed will cause a runtime exception when they are actually accessed (will not affect or abort table loading.) Defined and deployed a new OSL interface, acpi_os_validate_interface(). This interface allows the host OS to match the various "optional" interface/behavior strings for the _OSI predefined control method as appropriate (with assistance from Bjorn Helgaas.) Restructured and corrected various problems in the exception handling code paths within DsCallControlMethod and DsTerminateControlMethod in dsmethod (with assistance from Takayoshi Kochi.) Modified the Linux source converter to ignore quoted string literals while converting identifiers from mixed to lower case. This will correct problems with the disassembler and other areas where such strings must not be modified. The ACPI_FUNCTION_* macros no longer require quotes around the function name. This allows the Linux source converter to convert the names, now that the converter ignores quoted strings. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/tables/tbrsdt.c')
-rw-r--r--drivers/acpi/tables/tbrsdt.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/acpi/tables/tbrsdt.c b/drivers/acpi/tables/tbrsdt.c
index 9e0ebe625ed9..9e226438a3f6 100644
--- a/drivers/acpi/tables/tbrsdt.c
+++ b/drivers/acpi/tables/tbrsdt.c
@@ -64,7 +64,7 @@ acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
64 acpi_status status; 64 acpi_status status;
65 struct rsdp_descriptor *rsdp; 65 struct rsdp_descriptor *rsdp;
66 66
67 ACPI_FUNCTION_TRACE("tb_verify_rsdp"); 67 ACPI_FUNCTION_TRACE(tb_verify_rsdp);
68 68
69 switch (address->pointer_type) { 69 switch (address->pointer_type) {
70 case ACPI_LOGICAL_POINTER: 70 case ACPI_LOGICAL_POINTER:
@@ -103,7 +103,7 @@ acpi_status acpi_tb_verify_rsdp(struct acpi_pointer *address)
103 103
104 /* Save the table pointers and allocation info */ 104 /* Save the table pointers and allocation info */
105 105
106 status = acpi_tb_init_table_descriptor(ACPI_TABLE_RSDP, &table_info); 106 status = acpi_tb_init_table_descriptor(ACPI_TABLE_ID_RSDP, &table_info);
107 if (ACPI_FAILURE(status)) { 107 if (ACPI_FAILURE(status)) {
108 goto cleanup; 108 goto cleanup;
109 } 109 }
@@ -174,22 +174,19 @@ void acpi_tb_get_rsdt_address(struct acpi_pointer *out_address)
174 174
175acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr) 175acpi_status acpi_tb_validate_rsdt(struct acpi_table_header *table_ptr)
176{ 176{
177 int no_match; 177 char *signature;
178 178
179 ACPI_FUNCTION_ENTRY(); 179 ACPI_FUNCTION_ENTRY();
180 180
181 /* 181 /* Search for appropriate signature, RSDT or XSDT */
182 * Search for appropriate signature, RSDT or XSDT 182
183 */
184 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) { 183 if (acpi_gbl_root_table_type == ACPI_TABLE_TYPE_RSDT) {
185 no_match = ACPI_STRNCMP((char *)table_ptr, RSDT_SIG, 184 signature = RSDT_SIG;
186 sizeof(RSDT_SIG) - 1);
187 } else { 185 } else {
188 no_match = ACPI_STRNCMP((char *)table_ptr, XSDT_SIG, 186 signature = XSDT_SIG;
189 sizeof(XSDT_SIG) - 1);
190 } 187 }
191 188
192 if (no_match) { 189 if (!ACPI_COMPARE_NAME(table_ptr->signature, signature)) {
193 190
194 /* Invalid RSDT or XSDT signature */ 191 /* Invalid RSDT or XSDT signature */
195 192
@@ -235,13 +232,13 @@ acpi_status acpi_tb_get_table_rsdt(void)
235 acpi_status status; 232 acpi_status status;
236 struct acpi_pointer address; 233 struct acpi_pointer address;
237 234
238 ACPI_FUNCTION_TRACE("tb_get_table_rsdt"); 235 ACPI_FUNCTION_TRACE(tb_get_table_rsdt);
239 236
240 /* Get the RSDT/XSDT via the RSDP */ 237 /* Get the RSDT/XSDT via the RSDP */
241 238
242 acpi_tb_get_rsdt_address(&address); 239 acpi_tb_get_rsdt_address(&address);
243 240
244 table_info.type = ACPI_TABLE_XSDT; 241 table_info.type = ACPI_TABLE_ID_XSDT;
245 status = acpi_tb_get_table(&address, &table_info); 242 status = acpi_tb_get_table(&address, &table_info);
246 if (ACPI_FAILURE(status)) { 243 if (ACPI_FAILURE(status)) {
247 ACPI_EXCEPTION((AE_INFO, status, 244 ACPI_EXCEPTION((AE_INFO, status,
@@ -275,7 +272,7 @@ acpi_status acpi_tb_get_table_rsdt(void)
275 272
276 /* Save the table pointers and allocation info */ 273 /* Save the table pointers and allocation info */
277 274
278 status = acpi_tb_init_table_descriptor(ACPI_TABLE_XSDT, &table_info); 275 status = acpi_tb_init_table_descriptor(ACPI_TABLE_ID_XSDT, &table_info);
279 if (ACPI_FAILURE(status)) { 276 if (ACPI_FAILURE(status)) {
280 return_ACPI_STATUS(status); 277 return_ACPI_STATUS(status);
281 } 278 }