aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2010-10-25 02:13:09 -0400
committerLen Brown <len.brown@intel.com>2010-10-25 02:13:09 -0400
commit6e04c417aed5b0a5bd6ae80928bbd759fa1faabc (patch)
treebe657ff1734320850c2ea37d4336b576f07dca31
parent880308089d0abebac365c3a1378b4e3238b100ac (diff)
parenta210080195c95ebca2a517ee3057d71607aa65e0 (diff)
Merge branch 'gpe-defer' into release
-rw-r--r--drivers/acpi/acpica/acevents.h5
-rw-r--r--drivers/acpi/acpica/acglobal.h1
-rw-r--r--drivers/acpi/acpica/aclocal.h3
-rw-r--r--drivers/acpi/acpica/evevent.c41
-rw-r--r--drivers/acpi/acpica/evgpeblk.c47
-rw-r--r--drivers/acpi/acpica/evgpeinit.c31
-rw-r--r--drivers/acpi/acpica/evxface.c19
-rw-r--r--drivers/acpi/acpica/evxfevnt.c61
-rw-r--r--drivers/acpi/acpica/utglobal.c1
-rw-r--r--drivers/acpi/acpica/utxface.c13
-rw-r--r--drivers/acpi/dock.c1
-rw-r--r--drivers/acpi/scan.c9
-rw-r--r--include/acpi/acpixf.h2
13 files changed, 94 insertions, 140 deletions
diff --git a/drivers/acpi/acpica/acevents.h b/drivers/acpi/acpica/acevents.h
index 36867cd70eac..a6f99cc37a19 100644
--- a/drivers/acpi/acpica/acevents.h
+++ b/drivers/acpi/acpica/acevents.h
@@ -105,8 +105,9 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
105 struct acpi_gpe_block_info **return_gpe_block); 105 struct acpi_gpe_block_info **return_gpe_block);
106 106
107acpi_status 107acpi_status
108acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device, 108acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
109 struct acpi_gpe_block_info *gpe_block); 109 struct acpi_gpe_block_info *gpe_block,
110 void *ignored);
110 111
111acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block); 112acpi_status acpi_ev_delete_gpe_block(struct acpi_gpe_block_info *gpe_block);
112 113
diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h
index b8dbb9bd6962..ad88fcae4eb9 100644
--- a/drivers/acpi/acpica/acglobal.h
+++ b/drivers/acpi/acpica/acglobal.h
@@ -370,6 +370,7 @@ ACPI_EXTERN struct acpi_fixed_event_handler
370ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head; 370ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head;
371ACPI_EXTERN struct acpi_gpe_block_info 371ACPI_EXTERN struct acpi_gpe_block_info
372*acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS]; 372*acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS];
373ACPI_EXTERN u8 acpi_all_gpes_initialized;
373 374
374/***************************************************************************** 375/*****************************************************************************
375 * 376 *
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h
index 8acf1e8e479f..2ceb0c05b2d7 100644
--- a/drivers/acpi/acpica/aclocal.h
+++ b/drivers/acpi/acpica/aclocal.h
@@ -413,6 +413,7 @@ struct acpi_handler_info {
413 void *context; /* Context to be passed to handler */ 413 void *context; /* Context to be passed to handler */
414 struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */ 414 struct acpi_namespace_node *method_node; /* Method node for this GPE level (saved) */
415 u8 orig_flags; /* Original misc info about this GPE */ 415 u8 orig_flags; /* Original misc info about this GPE */
416 u8 orig_enabled; /* Set if the GPE was originally enabled */
416}; 417};
417 418
418union acpi_gpe_dispatch_info { 419union acpi_gpe_dispatch_info {
@@ -457,6 +458,7 @@ struct acpi_gpe_block_info {
457 u32 register_count; /* Number of register pairs in block */ 458 u32 register_count; /* Number of register pairs in block */
458 u16 gpe_count; /* Number of individual GPEs in block */ 459 u16 gpe_count; /* Number of individual GPEs in block */
459 u8 block_base_number; /* Base GPE number for this block */ 460 u8 block_base_number; /* Base GPE number for this block */
461 u8 initialized; /* If set, the GPE block has been initialized */
460}; 462};
461 463
462/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */ 464/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
@@ -473,7 +475,6 @@ struct acpi_gpe_walk_info {
473 struct acpi_gpe_block_info *gpe_block; 475 struct acpi_gpe_block_info *gpe_block;
474 u16 count; 476 u16 count;
475 acpi_owner_id owner_id; 477 acpi_owner_id owner_id;
476 u8 enable_this_gpe;
477 u8 execute_by_owner_id; 478 u8 execute_by_owner_id;
478}; 479};
479 480
diff --git a/drivers/acpi/acpica/evevent.c b/drivers/acpi/acpica/evevent.c
index 303618889da0..c61c3039c31a 100644
--- a/drivers/acpi/acpica/evevent.c
+++ b/drivers/acpi/acpica/evevent.c
@@ -95,47 +95,6 @@ acpi_status acpi_ev_initialize_events(void)
95 95
96/******************************************************************************* 96/*******************************************************************************
97 * 97 *
98 * FUNCTION: acpi_ev_install_fadt_gpes
99 *
100 * PARAMETERS: None
101 *
102 * RETURN: Status
103 *
104 * DESCRIPTION: Completes initialization of the FADT-defined GPE blocks
105 * (0 and 1). The HW must be fully initialized at this point,
106 * including global lock support.
107 *
108 ******************************************************************************/
109
110acpi_status acpi_ev_install_fadt_gpes(void)
111{
112 acpi_status status;
113
114 ACPI_FUNCTION_TRACE(ev_install_fadt_gpes);
115
116 /* Namespace must be locked */
117
118 status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
119 if (ACPI_FAILURE(status)) {
120 return (status);
121 }
122
123 /* FADT GPE Block 0 */
124
125 (void)acpi_ev_initialize_gpe_block(acpi_gbl_fadt_gpe_device,
126 acpi_gbl_gpe_fadt_blocks[0]);
127
128 /* FADT GPE Block 1 */
129
130 (void)acpi_ev_initialize_gpe_block(acpi_gbl_fadt_gpe_device,
131 acpi_gbl_gpe_fadt_blocks[1]);
132
133 (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
134 return_ACPI_STATUS(AE_OK);
135}
136
137/*******************************************************************************
138 *
139 * FUNCTION: acpi_ev_install_xrupt_handlers 98 * FUNCTION: acpi_ev_install_xrupt_handlers
140 * 99 *
141 * PARAMETERS: None 100 * PARAMETERS: None
diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c
index 85445fb5844e..020add3eee1c 100644
--- a/drivers/acpi/acpica/evgpeblk.c
+++ b/drivers/acpi/acpica/evgpeblk.c
@@ -363,6 +363,7 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
363 gpe_block->gpe_count = (u16)(register_count * ACPI_GPE_REGISTER_WIDTH); 363 gpe_block->gpe_count = (u16)(register_count * ACPI_GPE_REGISTER_WIDTH);
364 gpe_block->register_count = register_count; 364 gpe_block->register_count = register_count;
365 gpe_block->block_base_number = gpe_block_base_number; 365 gpe_block->block_base_number = gpe_block_base_number;
366 gpe_block->initialized = FALSE;
366 367
367 ACPI_MEMCPY(&gpe_block->block_address, gpe_block_address, 368 ACPI_MEMCPY(&gpe_block->block_address, gpe_block_address,
368 sizeof(struct acpi_generic_address)); 369 sizeof(struct acpi_generic_address));
@@ -385,11 +386,12 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
385 return_ACPI_STATUS(status); 386 return_ACPI_STATUS(status);
386 } 387 }
387 388
389 acpi_all_gpes_initialized = FALSE;
390
388 /* Find all GPE methods (_Lxx or_Exx) for this block */ 391 /* Find all GPE methods (_Lxx or_Exx) for this block */
389 392
390 walk_info.gpe_block = gpe_block; 393 walk_info.gpe_block = gpe_block;
391 walk_info.gpe_device = gpe_device; 394 walk_info.gpe_device = gpe_device;
392 walk_info.enable_this_gpe = FALSE;
393 walk_info.execute_by_owner_id = FALSE; 395 walk_info.execute_by_owner_id = FALSE;
394 396
395 status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device, 397 status = acpi_ns_walk_namespace(ACPI_TYPE_METHOD, gpe_device,
@@ -434,35 +436,34 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
434 ******************************************************************************/ 436 ******************************************************************************/
435 437
436acpi_status 438acpi_status
437acpi_ev_initialize_gpe_block(struct acpi_namespace_node *gpe_device, 439acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
438 struct acpi_gpe_block_info *gpe_block) 440 struct acpi_gpe_block_info *gpe_block,
441 void *ignored)
439{ 442{
440 acpi_status status; 443 acpi_status status;
441 struct acpi_gpe_event_info *gpe_event_info; 444 struct acpi_gpe_event_info *gpe_event_info;
442 u32 gpe_enabled_count; 445 u32 gpe_enabled_count;
443 u32 gpe_index; 446 u32 gpe_index;
444 u32 gpe_number;
445 u32 i; 447 u32 i;
446 u32 j; 448 u32 j;
447 449
448 ACPI_FUNCTION_TRACE(ev_initialize_gpe_block); 450 ACPI_FUNCTION_TRACE(ev_initialize_gpe_block);
449