diff -urpNX dontdiff linux-2.5.59/drivers/acpi/events/evmisc.c linux-2.5.59-acpi/drivers/acpi/events/evmisc.c
--- linux-2.5.59/drivers/acpi/events/evmisc.c	2003-02-05 13:41:04.000000000 -0500
+++ linux-2.5.59-acpi/drivers/acpi/events/evmisc.c	2003-02-05 16:38:28.000000000 -0500
@@ -67,27 +67,55 @@ acpi_ev_is_notify_object (
 
 /*******************************************************************************
  *
- * FUNCTION:    acpi_ev_get_gpe_register_index
+ * FUNCTION:    acpi_ev_get_gpe_register_info
  *
  * PARAMETERS:  gpe_number      - Raw GPE number
  *
  * RETURN:      None.
  *
- * DESCRIPTION: Returns the register index (index into the GPE register info
- *              table) associated with this GPE.
+ * DESCRIPTION: Returns the register info entry associated with this GPE.
  *
  ******************************************************************************/
 
-u32
-acpi_ev_get_gpe_register_index (
+struct acpi_gpe_register_info *
+acpi_ev_get_gpe_register_info (
 	u32                             gpe_number)
 {
+	u32 register_index;
 
 	if (gpe_number > acpi_gbl_gpe_number_max) {
-		return (ACPI_GPE_INVALID);
+		return NULL;
+	}
+
+	register_index = ACPI_DIV_8 (acpi_gbl_gpe_number_to_index[gpe_number].number_index);
+	return &acpi_gbl_gpe_register_info[register_index];
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    acpi_ev_get_gpe_number_info
+ *
+ * PARAMETERS:  gpe_number      - Raw GPE number
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Returns the number info entry associated with this GPE.
+ *
+ ******************************************************************************/
+
+struct acpi_gpe_number_info *
+acpi_ev_get_gpe_number_info (
+	u32                             gpe_number)
+{
+	u32 register_index;
+
+	if (gpe_number > acpi_gbl_gpe_number_max) {
+		return NULL;
 	}
 
-	return (ACPI_DIV_8 (acpi_gbl_gpe_number_to_index[gpe_number].number_index));
+	register_index = ACPI_DIV_8 (acpi_gbl_gpe_number_to_index[gpe_number].number_index);
+	return &acpi_gbl_gpe_number_info[register_index];
 }
 
 
diff -urpNX dontdiff linux-2.5.59/drivers/acpi/hardware/hwgpe.c linux-2.5.59-acpi/drivers/acpi/hardware/hwgpe.c
--- linux-2.5.59/drivers/acpi/hardware/hwgpe.c	2003-02-05 13:41:04.000000000 -0500
+++ linux-2.5.59-acpi/drivers/acpi/hardware/hwgpe.c	2003-02-05 16:41:25.000000000 -0500
@@ -32,26 +32,6 @@
 
 /******************************************************************************
  *
- * FUNCTION:    acpi_hw_get_gpe_bit_mask
- *
- * PARAMETERS:  gpe_number      - The GPE
- *
- * RETURN:      Gpe register bitmask for this gpe level
- *
- * DESCRIPTION: Get the bitmask for this GPE
- *
- ******************************************************************************/
-
-u8
-acpi_hw_get_gpe_bit_mask (
-	u32                             gpe_number)
-{
-	return (acpi_gbl_gpe_number_info [acpi_ev_get_gpe_number_index (gpe_number)].bit_mask);
-}
-
-
-/******************************************************************************
- *
  * FUNCTION:    acpi_hw_enable_gpe
  *
  * PARAMETERS:  gpe_number      - The GPE
@@ -67,34 +47,32 @@ acpi_hw_enable_gpe (
 	u32                             gpe_number)
 {
 	u32                             in_byte;
-	u32                             register_index;
+	struct acpi_gpe_register_info	*register_info;
 	u8                              bit_mask;
 	acpi_status                     status;
+	struct acpi_generic_address	*enable_address;
 
 
 	ACPI_FUNCTION_ENTRY ();
 
 
-	/* Translate GPE number to index into global registers array. */
-
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-
-	/* Get the register bitmask for this GPE */
+	/* Get the register info for this GPE */
 
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
+	enable_address = &register_info->enable_address;
 
 	/*
 	 * Read the current value of the register, set the appropriate bit
 	 * to enable the GPE, and write out the new register.
 	 */
-	status = acpi_hw_low_level_read (8, &in_byte,
-			  &acpi_gbl_gpe_register_info[register_index].enable_address, 0);
+	status = acpi_hw_low_level_read (8, &in_byte, enable_address, 0);
 	if (ACPI_FAILURE (status)) {
 		return (status);
 	}
 
 	status = acpi_hw_low_level_write (8, (in_byte | bit_mask),
-			  &acpi_gbl_gpe_register_info[register_index].enable_address, 0);
+			  enable_address, 0);
 
 	return (status);
 }
@@ -117,25 +95,22 @@ void
 acpi_hw_enable_gpe_for_wakeup (
 	u32                             gpe_number)
 {
-	u32                             register_index;
+	struct acpi_gpe_register_info	*register_info;
 	u8                              bit_mask;
 
 
 	ACPI_FUNCTION_ENTRY ();
 
 
-	/* Translate GPE number to index into global registers array. */
+	/* Get the register info for this GPE */
 
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-
-	/* Get the register bitmask for this GPE */
-
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
 
 	/*
 	 * Set the bit so we will not disable this when sleeping
 	 */
-	acpi_gbl_gpe_register_info[register_index].wake_enable |= bit_mask;
+	register_info->wake_enable |= bit_mask;
 }
 
 
@@ -156,34 +131,32 @@ acpi_hw_disable_gpe (
 	u32                             gpe_number)
 {
 	u32                             in_byte;
-	u32                             register_index;
+	struct acpi_gpe_register_info	*register_info;
 	u8                              bit_mask;
 	acpi_status                     status;
+	struct acpi_generic_address	*enable_address;
 
 
 	ACPI_FUNCTION_ENTRY ();
 
 
-	/* Translate GPE number to index into global registers array. */
-
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-
-	/* Get the register bitmask for this GPE */
+	/* Get the register info for this GPE */
 
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
+	enable_address = &register_info->enable_address;
 
 	/*
 	 * Read the current value of the register, clear the appropriate bit,
 	 * and write out the new register value to disable the GPE.
 	 */
-	status = acpi_hw_low_level_read (8, &in_byte,
-			  &acpi_gbl_gpe_register_info[register_index].enable_address, 0);
+	status = acpi_hw_low_level_read (8, &in_byte, enable_address, 0);
 	if (ACPI_FAILURE (status)) {
 		return (status);
 	}
 
 	status = acpi_hw_low_level_write (8, (in_byte & ~bit_mask),
-			  &acpi_gbl_gpe_register_info[register_index].enable_address, 0);
+			  enable_address, 0);
 	if (ACPI_FAILURE (status)) {
 		return (status);
 	}
@@ -210,25 +183,22 @@ void
 acpi_hw_disable_gpe_for_wakeup (
 	u32                             gpe_number)
 {
-	u32                             register_index;
+	struct acpi_gpe_register_info	*register_info;
 	u8                              bit_mask;
 
 
 	ACPI_FUNCTION_ENTRY ();
 
 
-	/* Translate GPE number to index into global registers array. */
+	/* Get the register info for this GPE */
 
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-
-	/* Get the register bitmask for this GPE */
-
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
 
 	/*
 	 * Clear the bit so we will disable this when sleeping
 	 */
-	acpi_gbl_gpe_register_info[register_index].wake_enable &= ~bit_mask;
+	register_info->wake_enable &= ~bit_mask;
 }
 
 
@@ -248,28 +218,26 @@ acpi_status
 acpi_hw_clear_gpe (
 	u32                             gpe_number)
 {
-	u32                             register_index;
+	struct acpi_gpe_register_info	*register_info;
 	u8                              bit_mask;
 	acpi_status                     status;
+	struct acpi_generic_address	*status_address;
 
 
 	ACPI_FUNCTION_ENTRY ();
 
 
-	/* Translate GPE number to index into global registers array. */
-
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-
-	/* Get the register bitmask for this GPE */
+	/* Get the register info for this GPE */
 
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
+	status_address = &register_info->status_address;
 
 	/*
 	 * Write a one to the appropriate bit in the status register to
 	 * clear this GPE.
 	 */
-	status = acpi_hw_low_level_write (8, bit_mask,
-			  &acpi_gbl_gpe_register_info[register_index].status_address, 0);
+	status = acpi_hw_low_level_write (8, bit_mask, status_address, 0);
 
 	return (status);
 }
@@ -292,11 +260,13 @@ acpi_hw_get_gpe_status (
 	u32                             gpe_number,
 	acpi_event_status               *event_status)
 {
-	u32                             in_byte = 0;
-	u32                             register_index = 0;
-	u8                              bit_mask = 0;
-	struct acpi_gpe_register_info   *gpe_register_info;
+	u32                             in_byte;
+	struct acpi_gpe_register_info   *register_info;
+	u8                              bit_mask;
+	struct acpi_generic_address	*enable_address;
+	struct acpi_generic_address	*status_address;
 	acpi_status                     status;
+	acpi_event_status		ev_status = 0;
 
 
 	ACPI_FUNCTION_ENTRY ();
@@ -306,44 +276,42 @@ acpi_hw_get_gpe_status (
 		return (AE_BAD_PARAMETER);
 	}
 
-	(*event_status) = 0;
-
-	/* Translate GPE number to index into global registers array. */
+	/* Get the register info for this GPE */
 
-	register_index = acpi_ev_get_gpe_register_index (gpe_number);
-	gpe_register_info = &acpi_gbl_gpe_register_info[register_index];
-
-	/* Get the register bitmask for this GPE */
-
-	bit_mask = acpi_hw_get_gpe_bit_mask (gpe_number);
+	register_info = acpi_ev_get_gpe_register_info (gpe_number);
+	bit_mask = acpi_ev_get_gpe_number_info(gpe_number)->bit_mask;
+	enable_address = &register_info->enable_address;
+	status_address = &register_info->status_address;
 
 	/* GPE Enabled? */
 
-	status = acpi_hw_low_level_read (8, &in_byte, &gpe_register_info->enable_address, 0);
+	status = acpi_hw_low_level_read (8, &in_byte, enable_address, 0);
 	if (ACPI_FAILURE (status)) {
 		return (status);
 	}
 
 	if (bit_mask & in_byte) {
-		(*event_status) |= ACPI_EVENT_FLAG_ENABLED;
+		ev_status |= ACPI_EVENT_FLAG_ENABLED;
 	}
 
 	/* GPE Enabled for wake? */
 
-	if (bit_mask & gpe_register_info->wake_enable) {
-		(*event_status) |= ACPI_EVENT_FLAG_WAKE_ENABLED;
+	if (bit_mask & register_info->wake_enable) {
+		ev_status |= ACPI_EVENT_FLAG_WAKE_ENABLED;
 	}
 
 	/* GPE active (set)? */
 
-	status = acpi_hw_low_level_read (8, &in_byte, &gpe_register_info->status_address, 0);
+	status = acpi_hw_low_level_read (8, &in_byte, status_address, 0);
 	if (ACPI_FAILURE (status)) {
 		return (status);
 	}
 
 	if (bit_mask & in_byte) {
-		(*event_status) |= ACPI_EVENT_FLAG_SET;
+		ev_status |= ACPI_EVENT_FLAG_SET;
 	}
+
+	*event_status = ev_status;
 	return (AE_OK);
 }
 
diff -urpNX dontdiff linux-2.5.59/drivers/acpi/include/acevents.h linux-2.5.59-acpi/drivers/acpi/include/acevents.h
--- linux-2.5.59/drivers/acpi/include/acevents.h	2003-02-05 13:41:04.000000000 -0500
+++ linux-2.5.59-acpi/drivers/acpi/include/acevents.h	2003-02-05 16:39:34.000000000 -0500
@@ -72,8 +72,12 @@ acpi_status
 acpi_ev_init_global_lock_handler (
 	void);
 
-u32
-acpi_ev_get_gpe_register_index (
+struct acpi_gpe_register_info *
+acpi_ev_get_gpe_register_info (
+	u32                             gpe_number);
+
+struct acpi_gpe_number_info *
+acpi_ev_get_gpe_number_info (
 	u32                             gpe_number);
 
 u32
diff -urpNX dontdiff linux-2.5.59/drivers/acpi/include/achware.h linux-2.5.59-acpi/drivers/acpi/include/achware.h
--- linux-2.5.59/drivers/acpi/include/achware.h	2003-02-05 13:41:04.000000000 -0500
+++ linux-2.5.59-acpi/drivers/acpi/include/achware.h	2003-02-05 14:44:17.000000000 -0500
@@ -96,10 +96,6 @@ acpi_hw_clear_acpi_status (
 
 /* GPE support */
 
-u8
-acpi_hw_get_gpe_bit_mask (
-	u32                             gpe_number);
-
 acpi_status
 acpi_hw_enable_gpe (
 	u32                             gpe_number);
