#define PC_CKS_RANGE_END 45
#define PC_CKS_LOC 46
-/* coreboot cmos checksum is usually only built over bytes 49..125
- * LB_CKS_RANGE_START, LB_CKS_RANGE_END and LB_CKS_LOC are defined
- * in option_table.h
- */
-#if CONFIG_HAVE_OPTION_TABLE
-#include <option_table.h>
-#endif
-
#ifndef UTIL_BUILD_OPTION_TABLE
#include <arch/io.h>
static inline unsigned char cmos_read(unsigned char addr)
outb(addr, RTC_BASE_PORT + offs + 0);
outb(val, RTC_BASE_PORT + offs + 1);
}
+
+static inline u32 cmos_read32(u8 offset)
+{
+ u32 value = 0;
+ u8 i;
+ for (i = 0; i < sizeof(value); ++i)
+ value |= cmos_read(offset + i) << (i << 3);
+ return value;
+}
+
+static inline void cmos_write32(u8 offset, u32 value)
+{
+ u8 i;
+ for (i = 0; i < sizeof(value); ++i)
+ cmos_write((value >> (i << 3)) & 0xff, offset + i);
+}
#endif
#if !defined(__ROMCC__)
void rtc_init(int invalid);
#if CONFIG_USE_OPTION_TABLE
+int set_option(const char *name, void *val);
int get_option(void *dest, const char *name);
-unsigned read_option(unsigned start, unsigned size, unsigned def);
+unsigned read_option_lowlevel(unsigned start, unsigned size, unsigned def);
#else
+static inline int set_option(const char *name __attribute__((unused)), void *val __attribute__((unused))) { return -2; };
static inline int get_option(void *dest __attribute__((unused)),
const char *name __attribute__((unused))) { return -2; }
-static inline unsigned read_option(unsigned start, unsigned size, unsigned def)
- { return def; }
+#define read_option_lowlevel(start, size, def) def
#endif
#else
#include <pc80/mc146818rtc_early.c>
#endif
+#define read_option(name, default) read_option_lowlevel(CMOS_VSTART_ ##name, CMOS_VLEN_ ##name, (default))
#endif /* PC80_MC146818RTC_H */