Re: [PATCH 6/6] ACPICA: Misc comments to minimize code divergence

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday, December 06, 2010, Lin Ming wrote:
> Modify/add some comments to minimize ACPICA/linux GPE code divergence.
> 
> Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>

Acked-by: Rafael J. Wysocki <rjw@xxxxxxx>

> --- 
> drivers/acpi/acpica/achware.h   |    2 +-
>  drivers/acpi/acpica/evgpe.c     |   23 ++++++++++++++---------
>  drivers/acpi/acpica/evgpeblk.c  |   18 ++++++++----------
>  drivers/acpi/acpica/evgpeinit.c |   24 ++++++++++++++++++++----
>  drivers/acpi/acpica/evxfgpe.c   |   32 +++++++++++++++++++++-----------
>  drivers/acpi/acpica/hwgpe.c     |   30 ++++++++++++++++++------------
>  6 files changed, 82 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h
> index 167470a..258d628 100644
> --- a/drivers/acpi/acpica/achware.h
> +++ b/drivers/acpi/acpica/achware.h
> @@ -94,7 +94,7 @@ u32 acpi_hw_get_gpe_register_bit(struct acpi_gpe_event_info *gpe_event_info,
>  			     struct acpi_gpe_register_info *gpe_register_info);
>  
>  acpi_status
> -acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 action);
> +acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action);
>  
>  acpi_status
>  acpi_hw_disable_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
> diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
> index c9d9ecf..6cb679f 100644
> --- a/drivers/acpi/acpica/evgpe.c
> +++ b/drivers/acpi/acpica/evgpe.c
> @@ -104,7 +104,7 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info)
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Clear the given GPE from stale events and enable it.
> + * DESCRIPTION: Clear a GPE of stale events and enable it.
>   *
>   ******************************************************************************/
>  acpi_status
> @@ -142,7 +142,7 @@ acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
>   *
>   * FUNCTION:    acpi_ev_add_gpe_reference
>   *
> - * PARAMETERS:  gpe_event_info  - GPE to enable
> + * PARAMETERS:  gpe_event_info          - Add a reference to this GPE
>   *
>   * RETURN:      Status
>   *
> @@ -163,6 +163,9 @@ acpi_status acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info
>  
>  	gpe_event_info->runtime_count++;
>  	if (gpe_event_info->runtime_count == 1) {
> +
> +		/* Enable on first reference */
> +
>  		status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
>  		if (ACPI_SUCCESS(status)) {
>  			status = acpi_ev_enable_gpe(gpe_event_info);
> @@ -180,7 +183,7 @@ acpi_status acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info
>   *
>   * FUNCTION:    acpi_ev_remove_gpe_reference
>   *
> - * PARAMETERS:  gpe_event_info  - GPE to disable
> + * PARAMETERS:  gpe_event_info          - Remove a reference to this GPE
>   *
>   * RETURN:      Status
>   *
> @@ -201,6 +204,9 @@ acpi_status acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_i
>  
>  	gpe_event_info->runtime_count--;
>  	if (!gpe_event_info->runtime_count) {
> +
> +		/* Disable on last reference */
> +
>  		status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
>  		if (ACPI_SUCCESS(status)) {
>  			status = acpi_hw_low_set_gpe(gpe_event_info,
> @@ -386,7 +392,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)
>  			}
>  
>  			ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS,
> -					  "Read GPE Register at GPE%X: Status=%02X, Enable=%02X\n",
> +					  "Read GPE Register at GPE%02X: Status=%02X, Enable=%02X\n",
>  					  gpe_register_info->base_gpe_number,
>  					  status_reg, enable_reg));
>  
> @@ -567,7 +573,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context)
>   ******************************************************************************/
>  
>  static void ACPI_SYSTEM_XFACE acpi_ev_asynch_enable_gpe(void *context)
> - {
> +{
>   	struct acpi_gpe_event_info *gpe_event_info = context;
>  
>  	(void)acpi_ev_finish_gpe(gpe_event_info);
> @@ -659,8 +665,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
>  		status = acpi_hw_clear_gpe(gpe_event_info);
>  		if (ACPI_FAILURE(status)) {
>  			ACPI_EXCEPTION((AE_INFO, status,
> -					"Unable to clear GPE[0x%2X]",
> -					gpe_number));
> +					"Unable to clear GPE%02X", gpe_number));
>  			return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
>  		}
>  	}
> @@ -719,7 +724,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
>  					 gpe_event_info);
>  		if (ACPI_FAILURE(status)) {
>  			ACPI_EXCEPTION((AE_INFO, status,
> -					"Unable to queue handler for GPE[0x%2X] - event disabled",
> +					"Unable to queue handler for GPE%2X - event disabled",
>  					gpe_number));
>  		}
>  		break;
> @@ -732,7 +737,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
>  		 * a GPE to be enabled if it has no handler or method.
>  		 */
>  		ACPI_ERROR((AE_INFO,
> -			    "No handler or method for GPE[0x%2X], disabling event",
> +			    "No handler or method for GPE%02X, disabling event",
>  			    gpe_number));
>  
>  		break;
> diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c
> index e2e8164..9acb869 100644
> --- a/drivers/acpi/acpica/evgpeblk.c
> +++ b/drivers/acpi/acpica/evgpeblk.c
> @@ -361,9 +361,9 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
>  
>  	gpe_block->node = gpe_device;
>  	gpe_block->gpe_count = (u16)(register_count * ACPI_GPE_REGISTER_WIDTH);
> +	gpe_block->initialized = FALSE;
>  	gpe_block->register_count = register_count;
>  	gpe_block->block_base_number = gpe_block_base_number;
> -	gpe_block->initialized = FALSE;
>  
>  	ACPI_MEMCPY(&gpe_block->block_address, gpe_block_address,
>  		    sizeof(struct acpi_generic_address));
> @@ -423,14 +423,12 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,
>   *
>   * FUNCTION:    acpi_ev_initialize_gpe_block
>   *
> - * PARAMETERS:  gpe_device          - Handle to the parent GPE block
> - *              gpe_block           - Gpe Block info
> + * PARAMETERS:  acpi_gpe_callback
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Initialize and enable a GPE block. First find and run any
> - *              _PRT methods associated with the block, then enable the
> - *              appropriate GPEs.
> + * DESCRIPTION: Initialize and enable a GPE block. Enable GPEs that have
> + *              associated methods.
>   *              Note: Assumes namespace is locked.
>   *
>   ******************************************************************************/
> @@ -450,8 +448,8 @@ acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
>  	ACPI_FUNCTION_TRACE(ev_initialize_gpe_block);
>  
>  	/*
> -	 * Ignore a null GPE block (e.g., if no GPE block 1 exists) and
> -	 * GPE blocks that have been initialized already.
> +	 * Ignore a null GPE block (e.g., if no GPE block 1 exists), and
> +	 * any GPE blocks that have been initialized already.
>  	 */
>  	if (!gpe_block || gpe_block->initialized) {
>  		return_ACPI_STATUS(AE_OK);
> @@ -459,8 +457,8 @@ acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
>  
>  	/*
>  	 * Enable all GPEs that have a corresponding method and have the
> -	 * ACPI_GPE_CAN_WAKE flag unset.  Any other GPEs within this block must
> -	 * be enabled via the acpi_enable_gpe() interface.
> +	 * ACPI_GPE_CAN_WAKE flag unset. Any other GPEs within this block
> +	 * must be enabled via the acpi_enable_gpe() interface.
>  	 */
>  	gpe_enabled_count = 0;
>  
> diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c
> index 223dba2..beb3675 100644
> --- a/drivers/acpi/acpica/evgpeinit.c
> +++ b/drivers/acpi/acpica/evgpeinit.c
> @@ -45,11 +45,27 @@
>  #include "accommon.h"
>  #include "acevents.h"
>  #include "acnamesp.h"
> -#include "acinterp.h"
>  
>  #define _COMPONENT          ACPI_EVENTS
>  ACPI_MODULE_NAME("evgpeinit")
>  
> +/*
> + * Note: History of _PRW support in ACPICA
> + *
> + * Originally (2000 - 2010), the GPE initialization code performed a walk of
> + * the entire namespace to execute the _PRW methods and detect all GPEs
> + * capable of waking the system.
> + *
> + * As of 10/2010, the _PRW method execution has been removed since it is
> + * actually unnecessary. The host OS must in fact execute all _PRW methods
> + * in order to identify the device/power-resource dependencies. We now put
> + * the onus on the host OS to identify the wake GPEs as part of this process
> + * and to inform ACPICA of these GPEs via the acpi_setup_gpe_for_wake interface. This
> + * not only reduces the complexity of the ACPICA initialization code, but in
> + * some cases (on systems with very large namespaces) it should reduce the
> + * kernel boot time as well.
> + */
> +
>  /*******************************************************************************
>   *
>   * FUNCTION:    acpi_ev_gpe_initialize
> @@ -222,7 +238,7 @@ void acpi_ev_update_gpes(acpi_owner_id table_owner_id)
>  	acpi_status status = AE_OK;
>  
>  	/*
> -	 * 2) Find any _Lxx/_Exx GPE methods that have just been loaded.
> +	 * Find any _Lxx/_Exx GPE methods that have just been loaded.
>  	 *
>  	 * Any GPEs that correspond to new _Lxx/_Exx methods are immediately
>  	 * enabled.
> @@ -235,9 +251,9 @@ void acpi_ev_update_gpes(acpi_owner_id table_owner_id)
>  		return;
>  	}
>  
> +	walk_info.count = 0;
>  	walk_info.owner_id = table_owner_id;
>  	walk_info.execute_by_owner_id = TRUE;
> -	walk_info.count = 0;
>  
>  	/* Walk the interrupt level descriptor list */
>  
> @@ -298,7 +314,7 @@ void acpi_ev_update_gpes(acpi_owner_id table_owner_id)
>   *                  xx     - is the GPE number [in HEX]
>   *
>   * If walk_info->execute_by_owner_id is TRUE, we only execute examine GPE methods
> - *    with that owner.
> + * with that owner.
>   *
>   ******************************************************************************/
>  
> diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c
> index fcf4a5c..416845b 100644
> --- a/drivers/acpi/acpica/evxfgpe.c
> +++ b/drivers/acpi/acpica/evxfgpe.c
> @@ -55,13 +55,19 @@ ACPI_MODULE_NAME("evxfgpe")
>   *
>   * PARAMETERS:  None
>   *
> - * RETURN:      None
> + * RETURN:      Status
> + *
> + * DESCRIPTION: Complete GPE initialization and enable all GPEs that have
> + *              associated _Lxx or _Exx methods and are not pointed to by any
> + *              device _PRW methods (this indicates that these GPEs are
> + *              generally intended for system or device wakeup. Such GPEs
> + *              have to be enabled directly when the devices whose _PRW
> + *              methods point to them are set up for wakeup signaling.)
>   *
> - * DESCRIPTION: Enable all GPEs that have associated _Lxx or _Exx methods and
> - *              are not pointed to by any device _PRW methods indicating that
> - *              these GPEs are generally intended for system or device wakeup
> - *              (such GPEs have to be enabled directly when the devices whose
> - *              _PRW methods point to them are set up for wakeup signaling).
> + * NOTE: Should be called after any GPEs are added to the system. Primarily,
> + * after the system _PRW methods have been run, but also after a GPE Block
> + * Device has been added or if any new GPE methods have been added via a
> + * dynamic table load.
>   *
>   ******************************************************************************/
>  
> @@ -252,7 +258,8 @@ ACPI_EXPORT_SYMBOL(acpi_setup_gpe_for_wake)
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Set or clear the GPE's wakeup enable mask bit.
> + * DESCRIPTION: Set or clear the GPE's wakeup enable mask bit. The GPE must
> + *              already be marked as a WAKE GPE.
>   *
>   ******************************************************************************/
>  
> @@ -268,8 +275,10 @@ acpi_status acpi_set_gpe_wake_mask(acpi_handle gpe_device, u32 gpe_number, u8 ac
>  
>  	flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock);
>  
> -	/* Ensure that we have a valid GPE number */
> -
> +	/*
> +	 * Ensure that we have a valid GPE number and that this GPE is in
> +	 * fact a wake GPE
> +	 */
>  	gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number);
>  	if (!gpe_event_info) {
>  		status = AE_BAD_PARAMETER;
> @@ -366,7 +375,7 @@ ACPI_EXPORT_SYMBOL(acpi_clear_gpe)
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Get status of an event (general purpose)
> + * DESCRIPTION: Get the current status of a GPE (signalled/not_signalled)
>   *
>   ******************************************************************************/
>  acpi_status
> @@ -476,7 +485,8 @@ ACPI_EXPORT_SYMBOL(acpi_enable_all_runtime_gpes)
>   *
>   * RETURN:      Status
>   *
> - * DESCRIPTION: Create and Install a block of GPE registers
> + * DESCRIPTION: Create and Install a block of GPE registers. The GPEs are not
> + *              enabled here.
>   *
>   ******************************************************************************/
>  acpi_status
> diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c
> index 7c6d485..85c3cbd 100644
> --- a/drivers/acpi/acpica/hwgpe.c
> +++ b/drivers/acpi/acpica/hwgpe.c
> @@ -62,10 +62,10 @@ acpi_hw_enable_wakeup_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
>   * PARAMETERS:	gpe_event_info	    - Info block for the GPE
>   *		gpe_register_info   - Info block for the GPE register
>   *
> - * RETURN:	Status
> + * RETURN:	Register mask with a one in the GPE bit position
>   *
> - * DESCRIPTION:	Compute GPE enable mask with one bit corresponding to the given
> - *		GPE set.
> + * DESCRIPTION: Compute the register mask for this GPE. One bit is set in the
> + *              correct position for the input GPE.
>   *
>   ******************************************************************************/
>  
> @@ -85,12 +85,12 @@ u32 acpi_hw_get_gpe_register_bit(struct acpi_gpe_event_info *gpe_event_info,
>   *
>   * RETURN:	Status
>   *
> - * DESCRIPTION: Enable or disable a single GPE in its enable register.
> + * DESCRIPTION: Enable or disable a single GPE in the parent enable register.
>   *
>   ******************************************************************************/
>  
>  acpi_status
> -acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 action)
> +acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
>  {
>  	struct acpi_gpe_register_info *gpe_register_info;
>  	acpi_status status;
> @@ -113,14 +113,20 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 action)
>  		return (status);
>  	}
>  
> -	/* Set ot clear just the bit that corresponds to this GPE */
> +	/* Set or clear just the bit that corresponds to this GPE */
>  
>  	register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info,
>  						gpe_register_info);
>  	switch (action) {
>  	case ACPI_GPE_CONDITIONAL_ENABLE:
> -		if (!(register_bit & gpe_register_info->enable_for_run))
> +
> +		/* Only enable if the enable_for_run bit is set */
> +
> +		if (!(register_bit & gpe_register_info->enable_for_run)) {
>  			return (AE_BAD_PARAMETER);
> +		}
> +
> +		/*lint -fallthrough */
>  
>  	case ACPI_GPE_ENABLE:
>  		ACPI_SET_BIT(enable_mask, register_bit);
> @@ -131,7 +137,7 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 action)
>  		break;
>  
>  	default:
> -		ACPI_ERROR((AE_INFO, "Invalid action\n"));
> +		ACPI_ERROR((AE_INFO, "Invalid GPE Action, %u\n", action));
>  		return (AE_BAD_PARAMETER);
>  	}
>  
> @@ -168,13 +174,13 @@ acpi_status acpi_hw_clear_gpe(struct acpi_gpe_event_info * gpe_event_info)
>  		return (AE_NOT_EXIST);
>  	}
>  
> -	register_bit = acpi_hw_get_gpe_register_bit(gpe_event_info,
> -						gpe_register_info);
> -
>  	/*
>  	 * Write a one to the appropriate bit in the status register to
>  	 * clear this GPE.
>  	 */
> +	register_bit =
> +	    acpi_hw_get_gpe_register_bit(gpe_event_info, gpe_register_info);
> +
>  	status = acpi_hw_write(register_bit,
>  			       &gpe_register_info->status_address);
>  
> @@ -201,8 +207,8 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info,
>  	u32 in_byte;
>  	u32 register_bit;
>  	struct acpi_gpe_register_info *gpe_register_info;
> -	acpi_status status;
>  	acpi_event_status local_event_status = 0;
> +	acpi_status status;
>  
>  	ACPI_FUNCTION_ENTRY();
>  
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux