|
@@ -39,9 +39,6 @@
|
|
|
# error Invalid value of HZ.
|
|
|
#endif
|
|
|
|
|
|
-/* LATCH is used in the interval timer and ftape setup. */
|
|
|
-#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
|
|
|
-
|
|
|
/* Suppose we want to divide two numbers NOM and DEN: NOM/DEN, then we can
|
|
|
* improve accuracy by shifting LSH bits, hence calculating:
|
|
|
* (NOM << LSH) / DEN
|
|
@@ -54,8 +51,15 @@
|
|
|
#define SH_DIV(NOM,DEN,LSH) ( (((NOM) / (DEN)) << (LSH)) \
|
|
|
+ ((((NOM) % (DEN)) << (LSH)) + (DEN) / 2) / (DEN))
|
|
|
|
|
|
+#ifdef CLOCK_TICK_RATE
|
|
|
+/* LATCH is used in the interval timer and ftape setup. */
|
|
|
+# define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
|
|
|
+
|
|
|
/* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */
|
|
|
-#define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8))
|
|
|
+# define ACTHZ (SH_DIV(CLOCK_TICK_RATE, LATCH, 8))
|
|
|
+#else
|
|
|
+# define ACTHZ (HZ << 8)
|
|
|
+#endif
|
|
|
|
|
|
/* TICK_NSEC is the time between ticks in nsec assuming real ACTHZ */
|
|
|
#define TICK_NSEC (SH_DIV (1000000UL * 1000, ACTHZ, 8))
|