rtc_time()
Synopsis:
unsigned long rtc_time (void)
Description:
This is a user-replaceable function responsible for returning the number of seconds since January 1 1970 00:00:00 GMT.
- x86
- This function defaults to calling rtc_time_mc146818(), which knows how to get the time from an IBM-PC standard clock chip.
- ARM
- The default library version simply returns zero.
Currently, these are the chip-specific versions:
- rtc_time_ds1386()
- Dallas Semiconductor DS-1386 compatible
- rtc_time_m48t5x()
- SGS-Thomson M48T59 RTC/NVRAM chip
- rtc_time_mc146818()
- Motorola 146818 compatible
- rtc_time_rtc72423()
- FOX RTC-72423 compatible
There's also a none
version to use if your board doesn't have RTC hardware:
unsigned long rtc_time_none(void);
If you're supplying the rtc_time() routine, you should call one of the chip-specific routines or write your own. The chip-specific routines all share the same parameter list:
(paddr_t base, unsigned reg_shift, int mmap, int cent_reg);
The base parameter indicates the physical base address or I/O port of the device. The reg_shift indicates the register offset as a power of two.
A typical value would be 0
(meaning 20, i.e. 1),
indicating that the registers of the device are one byte apart in the address space.
As another example, a value of 2
(meaning 22, i.e. 4)
indicates that the registers in the device are four bytes apart.
If the mmap variable is 0
, then the device is in
I/O space. If mmap is 1
, then the device is in
memory space.
Finally, cent_reg indicates which register in the device contains
the century byte (-1
indicates no such register). If there's no
century byte register, then the behavior is chip-specific. If the chip is year
2000-compliant, then we will get the correct time. If the chip isn't compliant, then
if the year is less than 70, we assume it's in the range 2000 to 2069; else we
assume it's in the range 1970 to 1999.
Returns:
- >0
- Success