On 27/03/08 21:24 +0100, Uwe Hermann wrote:
See patch.
I'll follow-up with a coreinfo patch to dump the whole CMOS array.
Uwe.
http://www.hermann-uwe.de | http://www.holsham-traders.de http://www.crazy-hacks.org | http://www.unmaintained-free-software.org
Add initial support for some basic CMOS read/write functions and the bcd2dec()/dec2bcd() functions we'll need for (among other things) converting some date/time parameters in CMOS.
Signed-off-by: Uwe Hermann uwe@hermann-uwe.de
Acked-by: Jordan Crouse jordan.crouse@amd.com
Good stuff!
Index: include/libpayload.h
--- include/libpayload.h (Revision 3190) +++ include/libpayload.h (Arbeitskopie) @@ -41,6 +41,18 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+/* Some CMOS byte definitions */ +#define CMOS_RTC_SECONDS 0 +#define CMOS_RTC_MINUTES 2 +#define CMOS_RTC_HOURS 4 +#define CMOS_RTC_DAY 7 +#define CMOS_RTC_MONTH 8 +#define CMOS_RTC_YEAR 9
+/* drivers/cmos.c */ +u8 cmos_read(u8 addr); +void cmos_write(u8 val, u8 addr);
/* drivers/keyboard.c */ int keyboard_havechar(void); unsigned char keyboard_get_scancode(void); @@ -87,6 +99,10 @@ void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size);
+/* libc/lib.c */ +int bcd2dec(int b); +int dec2bcd(int d);
/* libc/memory.c */ void *memset(void *s, int c, size_t n); void *memcpy(void *dst, const void *src, size_t n); Index: libc/Makefile.inc =================================================================== --- libc/Makefile.inc (Revision 3190) +++ libc/Makefile.inc (Arbeitskopie) @@ -28,5 +28,4 @@ ##
TARGETS-y += libc/malloc.o libc/printf.o libc/console.o libc/string.o -TARGETS-y += libc/memory.o libc/ctype.o -TARGETS-y += libc/ipchecksum.o +TARGETS-y += libc/memory.o libc/ctype.o libc/ipchecksum.o libc/lib.o Index: libc/lib.c =================================================================== --- libc/lib.c (Revision 0) +++ libc/lib.c (Revision 0) @@ -0,0 +1,51 @@ +/*
- This file is part of the libpayload project.
- Copyright (C) 2008 Uwe Hermann uwe@hermann-uwe.de
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- */
+/*
- Convert a number in BCD format to decimal.
- @param b The BCD number.
- @return The given BCD number in decimal format.
- */
+int bcd2dec(int b) +{
- return ((b >> 4) & 0x0f) * 10 + (b & 0x0f);
+}
+/*
- Convert a number in decimal format into the BCD format.
- @param d The decimal number.
- @return The given decimal number in BCD format.
- */
+int dec2bcd(int d) +{
- return ((d / 10) << 4) | (d % 10);
+}
Index: Config.in
--- Config.in (Revision 3190) +++ Config.in (Arbeitskopie) @@ -68,6 +68,10 @@ depends VGA_CONSOLE default y
+config CMOS
bool "Support for reading/writing CMOS bytes"
default y
endmenu
menu "Build Options" Index: drivers/cmos.c =================================================================== --- drivers/cmos.c (Revision 0) +++ drivers/cmos.c (Revision 0) @@ -0,0 +1,69 @@ +/*
- This file is part of the libpayload project.
- Copyright (C) 2008 Uwe Hermann uwe@hermann-uwe.de
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
- */
+/*
- Datasheet:
- Name: MC146818: Real-time Clock Plus RAM (RTC)
- Order number: MC146818/D
- */
+/*
- See also:
- */
+#include <libpayload.h>
+#define RTC_PORT 0x70
+/**
- Read a byte from the specified CMOS address.
- @param addr The CMOS address to read a byte from.
- @return The byte at the given CMOS address.
- */
+u8 cmos_read(u8 addr) +{
- outb(addr, RTC_PORT);
- return inb(RTC_PORT + 1);
+}
+/**
- Write a byte to the specified CMOS address.
- @param val The byte to write to CMOS.
- @param addr The CMOS address to write to.
- */
+void cmos_write(u8 val, u8 addr) +{
- outb(addr, RTC_PORT);
- outb(val, RTC_PORT + 1);
+} Index: drivers/Makefile.inc =================================================================== --- drivers/Makefile.inc (Revision 3190) +++ drivers/Makefile.inc (Arbeitskopie) @@ -31,3 +31,4 @@ TARGETS-$(CONFIG_SERIAL_CONSOLE) += drivers/serial.o TARGETS-$(CONFIG_VGA_CONSOLE) += drivers/vga.o TARGETS-$(CONFIG_PC_KEYBOARD) += drivers/keyboard.o +TARGETS-$(CONFIG_CMOS) += drivers/cmos.o
-- coreboot mailing list coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot