fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / acpi / hardware / hwtimer.c
index 8878aff..c4ec47c 100644 (file)
@@ -6,7 +6,7 @@
  *****************************************************************************/
 
 /*
- * Copyright (C) 2000 - 2004, R. Byron Moore
+ * Copyright (C) 2000 - 2006, R. Byron Moore
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include <acpi/acpi.h>
 
 #define _COMPONENT          ACPI_HARDWARE
-        ACPI_MODULE_NAME    ("hwtimer")
-
+ACPI_MODULE_NAME("hwtimer")
 
 /******************************************************************************
  *
  * FUNCTION:    acpi_get_timer_resolution
  *
- * PARAMETERS:  none
+ * PARAMETERS:  Resolution          - Where the resolution is returned
  *
- * RETURN:      Number of bits of resolution in the PM Timer (24 or 32).
+ * RETURN:      Status and timer resolution
  *
- * DESCRIPTION: Obtains resolution of the ACPI PM Timer.
+ * DESCRIPTION: Obtains resolution of the ACPI PM Timer (24 or 32 bits).
  *
  ******************************************************************************/
-
-acpi_status
-acpi_get_timer_resolution (
-       u32                             *resolution)
+acpi_status acpi_get_timer_resolution(u32 * resolution)
 {
-       ACPI_FUNCTION_TRACE ("acpi_get_timer_resolution");
-
+       ACPI_FUNCTION_TRACE(acpi_get_timer_resolution);
 
        if (!resolution) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       if (0 == acpi_gbl_FADT->tmr_val_ext) {
+       if (acpi_gbl_FADT->tmr_val_ext == 0) {
                *resolution = 24;
-       }
-       else {
+       } else {
                *resolution = 32;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
+ACPI_EXPORT_SYMBOL(acpi_get_timer_resolution)
 
 /******************************************************************************
  *
  * FUNCTION:    acpi_get_timer
  *
- * PARAMETERS:  none
+ * PARAMETERS:  Ticks               - Where the timer value is returned
  *
- * RETURN:      Current value of the ACPI PM Timer (in ticks).
+ * RETURN:      Status and current timer value (ticks)
  *
- * DESCRIPTION: Obtains current value of ACPI PM Timer.
+ * DESCRIPTION: Obtains current value of ACPI PM Timer (in ticks).
  *
  ******************************************************************************/
-
-acpi_status
-acpi_get_timer (
-       u32                             *ticks)
+acpi_status acpi_get_timer(u32 * ticks)
 {
-       acpi_status                     status;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_timer");
+       acpi_status status;
 
+       ACPI_FUNCTION_TRACE(acpi_get_timer);
 
        if (!ticks) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
-       status = acpi_hw_low_level_read (32, ticks, &acpi_gbl_FADT->xpm_tmr_blk);
+       status = acpi_hw_low_level_read(32, ticks, &acpi_gbl_FADT->xpm_tmr_blk);
 
-       return_ACPI_STATUS (status);
+       return_ACPI_STATUS(status);
 }
 
+ACPI_EXPORT_SYMBOL(acpi_get_timer)
 
 /******************************************************************************
  *
  * FUNCTION:    acpi_get_timer_duration
  *
- * PARAMETERS:  start_ticks
- *              end_ticks
- *              time_elapsed
+ * PARAMETERS:  start_ticks         - Starting timestamp
+ *              end_ticks           - End timestamp
+ *              time_elapsed        - Where the elapsed time is returned
  *
- * RETURN:      time_elapsed
+ * RETURN:      Status and time_elapsed
  *
  * DESCRIPTION: Computes the time elapsed (in microseconds) between two
  *              PM Timer time stamps, taking into account the possibility of
@@ -136,72 +127,60 @@ acpi_get_timer (
  *              Note that this function accommodates only a single timer
  *              rollover.  Thus for 24-bit timers, this function should only
  *              be used for calculating durations less than ~4.6 seconds
- *              (~20 minutes for 32-bit timers) -- calculations below
+ *              (~20 minutes for 32-bit timers) -- calculations below:
  *
  *              2**24 Ticks / 3,600,000 Ticks/Sec = 4.66 sec
  *              2**32 Ticks / 3,600,000 Ticks/Sec = 1193 sec or 19.88 minutes
  *
  ******************************************************************************/
-
 acpi_status
-acpi_get_timer_duration (
-       u32                             start_ticks,
-       u32                             end_ticks,
-       u32                             *time_elapsed)
+acpi_get_timer_duration(u32 start_ticks, u32 end_ticks, u32 * time_elapsed)
 {
-       u32                             delta_ticks = 0;
-       union uint64_overlay            normalized_ticks;
-       acpi_status                     status;
-       acpi_integer                    out_quotient;
-
-
-       ACPI_FUNCTION_TRACE ("acpi_get_timer_duration");
+       acpi_status status;
+       u32 delta_ticks;
+       acpi_integer quotient;
 
+       ACPI_FUNCTION_TRACE(acpi_get_timer_duration);
 
        if (!time_elapsed) {
-               return_ACPI_STATUS (AE_BAD_PARAMETER);
+               return_ACPI_STATUS(AE_BAD_PARAMETER);
        }
 
        /*
         * Compute Tick Delta:
-        * -------------------
-        * Handle (max one) timer rollovers on 24- versus 32-bit timers.
+        * Handle (max one) timer rollovers on 24-bit versus 32-bit timers.
         */
        if (start_ticks < end_ticks) {
                delta_ticks = end_ticks - start_ticks;
-       }
-       else if (start_ticks > end_ticks) {
-               if (0 == acpi_gbl_FADT->tmr_val_ext) {
+       } else if (start_ticks > end_ticks) {
+               if (acpi_gbl_FADT->tmr_val_ext == 0) {
+
                        /* 24-bit Timer */
 
-                       delta_ticks = (((0x00FFFFFF - start_ticks) + end_ticks) & 0x00FFFFFF);
-               }
-               else {
+                       delta_ticks =
+                           (((0x00FFFFFF - start_ticks) +
+                             end_ticks) & 0x00FFFFFF);
+               } else {
                        /* 32-bit Timer */
 
                        delta_ticks = (0xFFFFFFFF - start_ticks) + end_ticks;
                }
-       }
-       else {
+       } else {                /* start_ticks == end_ticks */
+
                *time_elapsed = 0;
-               return_ACPI_STATUS (AE_OK);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /*
-        * Compute Duration:
-        * -----------------
-        *
-        * Requires a 64-bit divide:
+        * Compute Duration (Requires a 64-bit multiply and divide):
         *
         * time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY;
         */
-       normalized_ticks.full = ((u64) delta_ticks) * 1000000;
+       status = acpi_ut_short_divide(((u64) delta_ticks) * 1000000,
+                                     PM_TIMER_FREQUENCY, &quotient, NULL);
 
-       status = acpi_ut_short_divide (&normalized_ticks.full, PM_TIMER_FREQUENCY,
-                          &out_quotient, NULL);
-
-       *time_elapsed = (u32) out_quotient;
-       return_ACPI_STATUS (status);
+       *time_elapsed = (u32) quotient;
+       return_ACPI_STATUS(status);
 }
 
-
+ACPI_EXPORT_SYMBOL(acpi_get_timer_duration)