.. | .. |
---|
3 | 3 | * |
---|
4 | 4 | * Module Name: evgpeblk - GPE block creation and initialization. |
---|
5 | 5 | * |
---|
6 | | - * Copyright (C) 2000 - 2018, Intel Corp. |
---|
| 6 | + * Copyright (C) 2000 - 2020, Intel Corp. |
---|
7 | 7 | * |
---|
8 | 8 | *****************************************************************************/ |
---|
9 | 9 | |
---|
.. | .. |
---|
110 | 110 | |
---|
111 | 111 | status = |
---|
112 | 112 | acpi_hw_disable_gpe_block(gpe_block->xrupt_block, gpe_block, NULL); |
---|
| 113 | + if (ACPI_FAILURE(status)) { |
---|
| 114 | + return_ACPI_STATUS(status); |
---|
| 115 | + } |
---|
113 | 116 | |
---|
114 | 117 | if (!gpe_block->previous && !gpe_block->next) { |
---|
115 | 118 | |
---|
.. | .. |
---|
230 | 233 | |
---|
231 | 234 | this_register->status_address.space_id = gpe_block->space_id; |
---|
232 | 235 | this_register->enable_address.space_id = gpe_block->space_id; |
---|
233 | | - this_register->status_address.bit_width = |
---|
234 | | - ACPI_GPE_REGISTER_WIDTH; |
---|
235 | | - this_register->enable_address.bit_width = |
---|
236 | | - ACPI_GPE_REGISTER_WIDTH; |
---|
237 | | - this_register->status_address.bit_offset = 0; |
---|
238 | | - this_register->enable_address.bit_offset = 0; |
---|
239 | 236 | |
---|
240 | 237 | /* Init the event_info for each GPE within this register */ |
---|
241 | 238 | |
---|
.. | .. |
---|
248 | 245 | |
---|
249 | 246 | /* Disable all GPEs within this register */ |
---|
250 | 247 | |
---|
251 | | - status = acpi_hw_write(0x00, &this_register->enable_address); |
---|
| 248 | + status = acpi_hw_gpe_write(0x00, &this_register->enable_address); |
---|
252 | 249 | if (ACPI_FAILURE(status)) { |
---|
253 | 250 | goto error_exit; |
---|
254 | 251 | } |
---|
255 | 252 | |
---|
256 | 253 | /* Clear any pending GPE events within this register */ |
---|
257 | 254 | |
---|
258 | | - status = acpi_hw_write(0xFF, &this_register->status_address); |
---|
| 255 | + status = acpi_hw_gpe_write(0xFF, &this_register->status_address); |
---|
259 | 256 | if (ACPI_FAILURE(status)) { |
---|
260 | 257 | goto error_exit; |
---|
261 | 258 | } |
---|
.. | .. |
---|
314 | 311 | return_ACPI_STATUS(AE_OK); |
---|
315 | 312 | } |
---|
316 | 313 | |
---|
| 314 | + /* Validate the space_ID */ |
---|
| 315 | + |
---|
| 316 | + if ((space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY) && |
---|
| 317 | + (space_id != ACPI_ADR_SPACE_SYSTEM_IO)) { |
---|
| 318 | + ACPI_ERROR((AE_INFO, |
---|
| 319 | + "Unsupported address space: 0x%X", space_id)); |
---|
| 320 | + return_ACPI_STATUS(AE_SUPPORT); |
---|
| 321 | + } |
---|
| 322 | + |
---|
| 323 | + if (space_id == ACPI_ADR_SPACE_SYSTEM_IO) { |
---|
| 324 | + status = acpi_hw_validate_io_block(address, |
---|
| 325 | + ACPI_GPE_REGISTER_WIDTH, |
---|
| 326 | + register_count); |
---|
| 327 | + if (ACPI_FAILURE(status)) |
---|
| 328 | + return_ACPI_STATUS(status); |
---|
| 329 | + } |
---|
| 330 | + |
---|
317 | 331 | /* Allocate a new GPE block */ |
---|
318 | 332 | |
---|
319 | 333 | gpe_block = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_gpe_block_info)); |
---|
.. | .. |
---|
359 | 373 | walk_info.gpe_device = gpe_device; |
---|
360 | 374 | walk_info.execute_by_owner_id = FALSE; |
---|
361 | 375 | |
---|
362 | | - status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device, |
---|
363 | | - ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, |
---|
364 | | - acpi_ev_match_gpe_method, NULL, |
---|
365 | | - &walk_info, NULL); |
---|
| 376 | + (void)acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device, |
---|
| 377 | + ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK, |
---|
| 378 | + acpi_ev_match_gpe_method, NULL, &walk_info, |
---|
| 379 | + NULL); |
---|
366 | 380 | |
---|
367 | 381 | /* Return the new block */ |
---|
368 | 382 | |
---|