RTC: Add a routine to check if the CMOS date is valid

If the CMOS is cleared or someone writes some random date/time
on purpose, the CMOS date register has a invalid date. This will
hurts some OS, like Windows 7, which hangs at MS logo forever.
When we detect that, we need to write a reasonable date in CMOS.

Alexandru Gagniuc:
Hmm, it would be interesting to use the date the coreboot image
was built and set that as the default date. At least until time
travel is invented.

Change-Id: Ic1c7a2d60e711265686441c77bdf7891a7efb42e
Signed-off-by: Zheng Bao <zheng.bao@amd.com>
Signed-off-by: zbao <fishbaozi@gmail.com>
Reviewed-on: http://review.coreboot.org/1389
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
diff --git a/src/include/pc80/mc146818rtc.h b/src/include/pc80/mc146818rtc.h
index 9f18ba4..a916761 100644
--- a/src/include/pc80/mc146818rtc.h
+++ b/src/include/pc80/mc146818rtc.h
@@ -87,6 +87,10 @@
 #define RTC_CLK_DAYOFMONTH	7
 #define RTC_CLK_MONTH		8
 #define RTC_CLK_YEAR		9
+#define RTC_CLK_ALTCENTURY	0x32
+
+#define RTC_HAS_ALTCENTURY	1
+#define RTC_HAS_NO_ALTCENTURY	0
 
 /* On PCs, the checksum is built only over bytes 16..45 */
 #define PC_CKS_RANGE_START	16
@@ -136,6 +140,7 @@
 
 #if !defined(__ROMCC__)
 void rtc_init(int invalid);
+void rtc_check_update_cmos_date(u8 has_century);
 #if CONFIG_USE_OPTION_TABLE
 int set_option(const char *name, void *val);
 int get_option(void *dest, const char *name);