Update of /cvsroot/linux-mips/linux/arch/mips/kernel
In directory usw-pr-cvs1:/tmp/cvs-serv32754/arch/mips/kernel
Modified Files:
time.c
Log Message:
Move to_tm() to common time.c file. Some related ddb5477 changes.
Index: time.c
===================================================================
RCS file: /cvsroot/linux-mips/linux/arch/mips/kernel/time.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** time.c 2001/08/22 18:18:14 1.5
--- time.c 2001/08/23 04:20:15 1.6
***************
*** 3,7 ****
* Author: Jun Sun, js...@mv... or js...@ju...
*
! * Common time service routines for MIPS machines. See Documents/MIPS/time.txt.
*
* This program is free software; you can redistribute it and/or modify it
--- 3,8 ----
* Author: Jun Sun, js...@mv... or js...@ju...
*
! * Common time service routines for MIPS machines. See
! * Documents/MIPS/README.txt.
*
* This program is free software; you can redistribute it and/or modify it
***************
*** 460,461 ****
--- 461,511 ----
board_timer_setup(&timer_irqaction);
}
+
+ /* ================================================== */
+ #define FEBRUARY 2
+ #define STARTOFTIME 1970
+ #define SECDAY 86400L
+ #define SECYR (SECDAY * 365)
+ #define leapyear(year) ((year) % 4 == 0)
+ #define days_in_year(a) (leapyear(a) ? 366 : 365)
+ #define days_in_month(a) (month_days[(a) - 1])
+
+ static int month_days[12] = {
+ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+ };
+
+ void to_tm(unsigned long tim, struct rtc_time * tm)
+ {
+ register int i;
+ register long hms, day;
+
+ day = tim / SECDAY;
+ hms = tim % SECDAY;
+
+ /* Hours, minutes, seconds are easy */
+ tm->tm_hour = hms / 3600;
+ tm->tm_min = (hms % 3600) / 60;
+ tm->tm_sec = (hms % 3600) % 60;
+
+ /* Number of years in days */
+ for (i = STARTOFTIME; day >= days_in_year(i); i++)
+ day -= days_in_year(i);
+ tm->tm_year = i;
+
+ /* Number of months in days left */
+ if (leapyear(tm->tm_year))
+ days_in_month(FEBRUARY) = 29;
+ for (i = 1; day >= days_in_month(i); i++)
+ day -= days_in_month(i);
+ days_in_month(FEBRUARY) = 28;
+ tm->tm_mon = i;
+
+ /* Days are what is left over (+1) from all that. */
+ tm->tm_mday = day + 1;
+
+ /*
+ * Determine the day of week
+ */
+ tm->tm_wday = (day + 3) % 7;
+ }
+
|