fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / acpi / utilities / utmath.c
index 573176c..19d74be 100644 (file)
@@ -5,7 +5,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
  * POSSIBILITY OF SUCH DAMAGES.
  */
 
-
 #include <acpi/acpi.h>
 
-
 #define _COMPONENT          ACPI_UTILITIES
-        ACPI_MODULE_NAME    ("utmath")
+ACPI_MODULE_NAME("utmath")
 
 /*
  * Support for double-precision integer divide.  This code is included here
  * in order to support kernel environments where the double-precision math
  * library is not available.
  */
-
 #ifndef ACPI_USE_NATIVE_DIVIDE
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_short_divide
  *
- * PARAMETERS:  in_dividend         - Pointer to the dividend
+ * PARAMETERS:  Dividend            - 64-bit dividend
  *              Divisor             - 32-bit divisor
  *              out_quotient        - Pointer to where the quotient is returned
  *              out_remainder       - Pointer to where the remainder is returned
  *              32-bit remainder.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ut_short_divide (
-       acpi_integer                    *in_dividend,
-       u32                             divisor,
-       acpi_integer                    *out_quotient,
-       u32                             *out_remainder)
+acpi_ut_short_divide(acpi_integer dividend,
+                    u32 divisor,
+                    acpi_integer * out_quotient, u32 * out_remainder)
 {
-       union uint64_overlay            dividend;
-       union uint64_overlay            quotient;
-       u32                             remainder32;
-
+       union uint64_overlay dividend_ovl;
+       union uint64_overlay quotient;
+       u32 remainder32;
 
-       ACPI_FUNCTION_TRACE ("ut_short_divide");
-
-       dividend.full = *in_dividend;
+       ACPI_FUNCTION_TRACE(ut_short_divide);
 
        /* Always check for a zero divisor */
 
        if (divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_short_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_ERROR((AE_INFO, "Divide by zero"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
+       dividend_ovl.full = dividend;
+
        /*
         * The quotient is 64 bits, the remainder is always 32 bits,
         * and is generated by the second divide.
         */
-       ACPI_DIV_64_BY_32 (0, dividend.part.hi, divisor,
+       ACPI_DIV_64_BY_32(0, dividend_ovl.part.hi, divisor,
                          quotient.part.hi, remainder32);
-       ACPI_DIV_64_BY_32 (remainder32, dividend.part.lo,  divisor,
+       ACPI_DIV_64_BY_32(remainder32, dividend_ovl.part.lo, divisor,
                          quotient.part.lo, remainder32);
 
        /* Return only what was requested */
@@ -113,16 +106,15 @@ acpi_ut_short_divide (
                *out_remainder = remainder32;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_divide
  *
- * PARAMETERS:  in_dividend         - Pointer to the dividend
- *              in_divisor          - Pointer to the divisor
+ * PARAMETERS:  in_dividend         - Dividend
+ *              in_divisor          - Divisor
  *              out_quotient        - Pointer to where the quotient is returned
  *              out_remainder       - Pointer to where the remainder is returned
  *
@@ -133,35 +125,31 @@ acpi_ut_short_divide (
  ******************************************************************************/
 
 acpi_status
-acpi_ut_divide (
-       acpi_integer                    *in_dividend,
-       acpi_integer                    *in_divisor,
-       acpi_integer                    *out_quotient,
-       acpi_integer                    *out_remainder)
+acpi_ut_divide(acpi_integer in_dividend,
+              acpi_integer in_divisor,
+              acpi_integer * out_quotient, acpi_integer * out_remainder)
 {
-       union uint64_overlay            dividend;
-       union uint64_overlay            divisor;
-       union uint64_overlay            quotient;
-       union uint64_overlay            remainder;
-       union uint64_overlay            normalized_dividend;
-       union uint64_overlay            normalized_divisor;
-       u32                             partial1;
-       union uint64_overlay            partial2;
-       union uint64_overlay            partial3;
-
-
-       ACPI_FUNCTION_TRACE ("ut_divide");
-
+       union uint64_overlay dividend;
+       union uint64_overlay divisor;
+       union uint64_overlay quotient;
+       union uint64_overlay remainder;
+       union uint64_overlay normalized_dividend;
+       union uint64_overlay normalized_divisor;
+       u32 partial1;
+       union uint64_overlay partial2;
+       union uint64_overlay partial3;
+
+       ACPI_FUNCTION_TRACE(ut_divide);
 
        /* Always check for a zero divisor */
 
-       if (*in_divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+       if (in_divisor == 0) {
+               ACPI_ERROR((AE_INFO, "Divide by zero"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
-       divisor.full  = *in_divisor;
-       dividend.full = *in_dividend;
+       divisor.full in_divisor;
+       dividend.full = in_dividend;
        if (divisor.part.hi == 0) {
                /*
                 * 1) Simplest case is where the divisor is 32 bits, we can
@@ -173,9 +161,9 @@ acpi_ut_divide (
                 * The quotient is 64 bits, the remainder is always 32 bits,
                 * and is generated by the second divide.
                 */
-               ACPI_DIV_64_BY_32 (0, dividend.part.hi, divisor.part.lo,
+               ACPI_DIV_64_BY_32(0, dividend.part.hi, divisor.part.lo,
                                  quotient.part.hi, partial1);
-               ACPI_DIV_64_BY_32 (partial1, dividend.part.lo, divisor.part.lo,
+               ACPI_DIV_64_BY_32(partial1, dividend.part.lo, divisor.part.lo,
                                  quotient.part.lo, remainder.part.lo);
        }
 
@@ -184,23 +172,23 @@ acpi_ut_divide (
                 * 2) The general case where the divisor is a full 64 bits
                 * is more difficult
                 */
-               quotient.part.hi   = 0;
+               quotient.part.hi = 0;
                normalized_dividend = dividend;
                normalized_divisor = divisor;
 
                /* Normalize the operands (shift until the divisor is < 32 bits) */
 
                do {
-                       ACPI_SHIFT_RIGHT_64 (normalized_divisor.part.hi,
-                                        normalized_divisor.part.lo);
-                       ACPI_SHIFT_RIGHT_64 (normalized_dividend.part.hi,
-                                        normalized_dividend.part.lo);
+                       ACPI_SHIFT_RIGHT_64(normalized_divisor.part.hi,
+                                           normalized_divisor.part.lo);
+                       ACPI_SHIFT_RIGHT_64(normalized_dividend.part.hi,
+                                           normalized_dividend.part.lo);
 
                } while (normalized_divisor.part.hi != 0);
 
                /* Partial divide */
 
-               ACPI_DIV_64_BY_32 (normalized_dividend.part.hi,
+               ACPI_DIV_64_BY_32(normalized_dividend.part.hi,
                                  normalized_dividend.part.lo,
                                  normalized_divisor.part.lo,
                                  quotient.part.lo, partial1);
@@ -209,8 +197,9 @@ acpi_ut_divide (
                 * The quotient is always 32 bits, and simply requires adjustment.
                 * The 64-bit remainder must be generated.
                 */
-               partial1      = quotient.part.lo * divisor.part.hi;
-               partial2.full = (acpi_integer) quotient.part.lo * divisor.part.lo;
+               partial1 = quotient.part.lo * divisor.part.hi;
+               partial2.full =
+                   (acpi_integer) quotient.part.lo * divisor.part.lo;
                partial3.full = (acpi_integer) partial2.part.hi + partial1;
 
                remainder.part.hi = partial3.part.lo;
@@ -223,16 +212,15 @@ acpi_ut_divide (
                                                quotient.part.lo--;
                                                remainder.full -= divisor.full;
                                        }
-                               }
-                               else {
+                               } else {
                                        quotient.part.lo--;
                                        remainder.full -= divisor.full;
                                }
                        }
 
-                       remainder.full    = remainder.full - dividend.full;
-                       remainder.part.hi = (u32) -((s32) remainder.part.hi);
-                       remainder.part.lo = (u32) -((s32) remainder.part.lo);
+                       remainder.full = remainder.full - dividend.full;
+                       remainder.part.hi = (u32) - ((s32) remainder.part.hi);
+                       remainder.part.lo = (u32) - ((s32) remainder.part.lo);
 
                        if (remainder.part.lo) {
                                remainder.part.hi--;
@@ -249,15 +237,16 @@ acpi_ut_divide (
                *out_remainder = remainder.full;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 #else
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_short_divide, acpi_ut_divide
  *
+ * PARAMETERS:  See function headers above
+ *
  * DESCRIPTION: Native versions of the ut_divide functions. Use these if either
  *              1) The target is a 64-bit platform and therefore 64-bit
  *                 integer math is supported directly by the machine.
@@ -266,67 +255,57 @@ acpi_ut_divide (
  *                 perform the divide.
  *
  ******************************************************************************/
-
 acpi_status
-acpi_ut_short_divide (
-       acpi_integer                    *in_dividend,
-       u32                             divisor,
-       acpi_integer                    *out_quotient,
-       u32                             *out_remainder)
+acpi_ut_short_divide(acpi_integer in_dividend,
+                    u32 divisor,
+                    acpi_integer * out_quotient, u32 * out_remainder)
 {
 
-       ACPI_FUNCTION_TRACE ("ut_short_divide");
-
+       ACPI_FUNCTION_TRACE(ut_short_divide);
 
        /* Always check for a zero divisor */
 
        if (divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_short_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+               ACPI_ERROR((AE_INFO, "Divide by zero"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
        /* Return only what was requested */
 
        if (out_quotient) {
-               *out_quotient = *in_dividend / divisor;
+               *out_quotient = in_dividend / divisor;
        }
        if (out_remainder) {
-               *out_remainder = (u32) *in_dividend % divisor;
+               *out_remainder = (u32) in_dividend % divisor;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 acpi_status
-acpi_ut_divide (
-       acpi_integer                    *in_dividend,
-       acpi_integer                    *in_divisor,
-       acpi_integer                    *out_quotient,
-       acpi_integer                    *out_remainder)
+acpi_ut_divide(acpi_integer in_dividend,
+              acpi_integer in_divisor,
+              acpi_integer * out_quotient, acpi_integer * out_remainder)
 {
-       ACPI_FUNCTION_TRACE ("ut_divide");
-
+       ACPI_FUNCTION_TRACE(ut_divide);
 
        /* Always check for a zero divisor */
 
-       if (*in_divisor == 0) {
-               ACPI_REPORT_ERROR (("acpi_ut_divide: Divide by zero\n"));
-               return_ACPI_STATUS (AE_AML_DIVIDE_BY_ZERO);
+       if (in_divisor == 0) {
+               ACPI_ERROR((AE_INFO, "Divide by zero"));
+               return_ACPI_STATUS(AE_AML_DIVIDE_BY_ZERO);
        }
 
-
        /* Return only what was requested */
 
        if (out_quotient) {
-               *out_quotient = *in_dividend / *in_divisor;
+               *out_quotient = in_dividend / in_divisor;
        }
        if (out_remainder) {
-               *out_remainder = *in_dividend % *in_divisor;
+               *out_remainder = in_dividend % in_divisor;
        }
 
-       return_ACPI_STATUS (AE_OK);
+       return_ACPI_STATUS(AE_OK);
 }
 
 #endif
-
-