Commit Graph

548 Commits

Author SHA1 Message Date
Uwe Hermann d0e687ac39 Fix the build when serial console support is disabled (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3298 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-05-11 16:13:24 +00:00
Jordan Crouse 681ec27e2c libpayload: Add LAR walking support
Add suport for walking LARs.  These try to emulate the f*
functions from POSIX, though they are obviously different
in their behavior.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Myles Watson <mylesgw@gmail.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3288 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-05-07 20:34:02 +00:00
Jordan Crouse e2271430c5 libpayload: Add gettimeofday() and friends
Add a gettimeofday() implementation - it works pretty well, but it
drifts a little bit so its not very suitable for keeping time.  It
works best to track changes in time over small periods of time.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3272 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-25 23:11:02 +00:00
Jordan Crouse d772e1e7fe libpayload: Fix a small but aggressive bug in printf()
This was causing the returned counter value to be one more then it
should be when printing a single character.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Ward Vandewege <ward@gnu.org>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3271 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-25 23:10:23 +00:00
Jordan Crouse 63f181f97c libpayload: Enable keyboard translation so that we can use scancode set 1
The qemu keyboard controller defaults to using scancode set 2, we use set 1.
Turn on the translate mode in the keyboard controller to force the issue.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Peter Stuge <peter@stuge.se>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3270 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-25 23:09:39 +00:00
Jordan Crouse 24a0404759 libpayload: Fix malloc allocation
Apparently the previous version worked on luck.  Fix the allocation
and add parens to better guide the compiler.  Also, halt() if 
the heap is poisoned (like by an overrun).  Finally, fix calloc()
so that it actually works.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Peter Stuge <peter@stuge.se>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3269 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-25 23:08:47 +00:00
Jordan Crouse c781584936 libpayload: Add the null terminator to the end of the duplicated string
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Myles Watson <mylesgw@gmail.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3268 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-25 23:07:39 +00:00
Jordan Crouse 5f4410b7dd libpayload: Fix keyboard buglet
This solves the multiple keystroke issue that popped up recently.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3245 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-21 22:33:58 +00:00
Uwe Hermann 0b53ec3da9 Move curses/speaker.c to drivers/ as it's not curses-specific (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3240 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-15 17:24:08 +00:00
Ulf Jordan 50eff2147d Correct upper boundary for isxdigit.
Signed-off-by: Ulf Jordan <jordan@chalmers.se>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3238 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-12 20:09:46 +00:00
Uwe Hermann be504d1d8d Drop unneeded #includes, add EXIT_SUCCESS/EXIT_FAILURE (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3237 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-11 20:16:24 +00:00
Uwe Hermann 72199bc49a Rewrite and filling of libc/ctype.c (thus adjusting copyright line).
Use a simple one-liner for each of the functions. You can surely optimize
the code some more, but I chose not to do that in order to keep it readable.
When compiling with -Os the size differences are minimal.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3236 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-11 19:43:55 +00:00
Uwe Hermann b103345a14 Convert BIN2HEX/HEX2BIN to functions and add the abs() family
of functions while we're at it.

hex2bin() now also supports upper-case input characters.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3235 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-11 18:38:04 +00:00
Uwe Hermann fad8c2bd7c Various small consistency fixes (trivial):
- Use _FOO_H include guard format everywhere.

 - Add missing speaker.c prototypes to libpayload.h.

 - Consistently use short form u8/u16/u32 instead of uint8_t et. al.

 - kcofig: Use 'depends on' instead of 'depends', which seems deprecated.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3234 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-11 18:01:50 +00:00
Jordan Crouse 54315533cc libpayload: Add a Geode video driver
Add a Geode video driver in lieu of VGA on Geode LX devices

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3233 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-11 15:48:21 +00:00
Jordan Crouse 234e87f137 libpayload: Support functions for Geode
The Geode video driver will require a number of support functions,
including udelay(), PCI bus walking and MSRs.  This adds those functions
in preparation for the actual code.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3231 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-10 22:50:44 +00:00
Jordan Crouse 30939bdffd libpayload: Add video console framework
Add a framework for multiple video console drivers.  This is to prepare
for the Geode driver.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3230 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-10 22:49:02 +00:00
Jordan Crouse bac89d088c libpayload: Avoid .svn files in the header install
Slight tweak to to the install target to avoid copying .svn
files.  Trivial self ack.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3229 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-10 17:57:42 +00:00
Uwe Hermann 804f4df5bd Make the sample Makefile a bit more generic, so it can be adapted more
easily for other payloads. Also, add a 'distclean' target (trivial).

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3227 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-09 23:48:48 +00:00
Jordan Crouse c3e728fbdf libpayload: Implement gcc wrappers for libpayload
libpayload uses a ton of flags and other scary gcc and ld options.  These
wrappers hide most of that from the user, so that using libpayload is as
easy as lpgcc -o hello hello.c

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3226 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-09 23:05:59 +00:00
Uwe Hermann c5a78ac56a Add missing prototypes for libc/rand.c functions (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3225 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-08 23:38:15 +00:00
Uwe Hermann ea72559d5d Small curses fixes/additions for libpayload (trivial).
- Properly set LINES and COLS, needed for a real curses application.

 - Implement notimeout() and wtimeout(), which are trivial.

 - Implement a dummy flushinp() for now as it's needed by a curses
   application I'm porting, will be replaced by something useful later.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3224 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-08 23:30:22 +00:00
Jordan Crouse 672d0ae156 libpayload: Add a timeout function for getchar and getch
Implement a timeout option for getchar() to return after so many
milliseconds.  Also implement the same thing for curses using
the halfdelay() function.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3223 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-08 23:21:33 +00:00
Uwe Hermann 4eb5089821 Add rand/rand_r/srand functions for generating pseudo-random bytes.
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3222 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-07 23:33:50 +00:00
Jordan Crouse 3860404b65 libpayload: remove unneeded stack stuff
Following on the previous code to streamline the libpayload init code,
this removes the now unneeded stack structures.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3217 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-05 01:07:27 +00:00
Uwe Hermann 1bee6f9b9c Add BIN2HEX and HEX2BIN macros (trivial).
They're generally useful for lots of stuff, but especially for converting
to/from the compact 160 bit (20 byte) representation of SHA-1 hashes to
the "hex" representation (same as 'sha1sum' output), which is 40 bytes long.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3213 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-04 13:16:33 +00:00
Uwe Hermann 3995593b68 Add a SHA-1 implementation to libpayload.
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Peter Stuge <peter@stuge.se>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3212 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-03 23:01:23 +00:00
Uwe Hermann 0a89625f55 Add missing snprintf() to libc/printf.c (trivial).
This is also taken from the HelenOS project.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3210 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-04-02 12:35:45 +00:00
Klaus Schnass 2c6b33ce3e Libpayload fixes to prevent triple-faults when running in QEMU.
Let the linker figure out the correct address and just CALL the
start_main entry point.

Signed-off-by: Klaus Schnass <dev@stuffit.at>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3204 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-31 21:02:29 +00:00
Uwe Hermann 30d789bcbd Fix the NVRAM access functions to work correctly for the
upper 128 bytes of NVRAM (if enabled).

For most chipsets this means using I/O ports 0x72/0x73, but at least
on some VIA chipsets (I tested the VIA VT8237R on actual hardware)
these ports won't work and you have to use 0x74/0x75. Thus, make this
a Kconfig option for now.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3202 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-31 20:21:49 +00:00
Uwe Hermann 2d758b8bf6 Whitespace fixes (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3201 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-31 15:21:24 +00:00
Uwe Hermann b642e6d40a Rename drivers/cmos.c to drivers/nvram.c (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3200 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-31 15:18:56 +00:00
Uwe Hermann c16d24e73a Due to popular demand, rename "CMOS" to "NVRAM" (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3199 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-31 15:17:39 +00:00
Jordan Crouse 0e122af465 [libpayload] Work around sign-extending issue
Somewhere characters are getting sign-extended, meaning that the
attributes of the drawing chars (>= 128) are wrong. Cast the value
before sending it to VGA.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3195 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-29 16:13:22 +00:00
Uwe Hermann 8cc38d2f13 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>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3192 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-27 23:26:40 +00:00
Uwe Hermann 408c4e1784 Drop -Os in libpayload for now, it causes run-time problems for some
strange reason (broken curses/VGA display, maybe others).

It'll be re-enabled when we fixed that.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3190 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-27 19:11:44 +00:00
Jonathan A. Kollasch b0e3f39a39 Make cursor positioning work by using both halves of the
VGA cursor position register.
   
Have vga_scroll_up() and vga_clear_line() present row/column
arguments to the VIDEO() macro in the right order.
       
Signed-off-by: Jonathan A. Kollasch <jakllsch@kollasch.net>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>

-This line, and those below, will be ignored--

M    libpayload/drivers/vga.c


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3186 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-22 15:27:26 +00:00
Uwe Hermann 661e380a75 Cosmetics, fix typos (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3185 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-21 18:37:23 +00:00
Uwe Hermann 29014056e7 Quickfix for libpayload's strcpy() to properly NUL-terminate strings (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3184 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-21 15:47:38 +00:00
Uwe Hermann 14a3feb068 Fix code to allow usage of -Wall in libpayload and the sample (trivial).
This even fixes two bugs:

 - get_cpu_speed() didn't return a value.

 - The line
     win->_color - PAIR_NUMBER(0);
   should actually be
     win->_color = PAIR_NUMBER(0);

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3182 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 20:46:44 +00:00
Uwe Hermann 6a441bfb46 Cosmetics, coding style fixes (trivial).
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3180 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 19:54:59 +00:00
Christopher Kilgour 5f4c8abb65 Change kconfig references from 'buildrom' to 'libpayload'.
Signed-off-by: Christopher Kilgour <techie@whiterocker.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3179 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 01:58:08 +00:00
Christopher Kilgour 0c1cea29e7 Allow 'make menuconfig' to function within libpayload.
Removes reference to BusyBox.

Signed-off-by: Christopher Kilgour <techie@whiterocker.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3178 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 01:56:05 +00:00
Uwe Hermann dc69e05d90 Make the list of functions in libpayload.h more complete (trivial).
We need to think about the exact API we want to expose later, though.

Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3177 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 01:53:30 +00:00
Jordan Crouse 2c7bb9e84f libpayload: Add -Os to the CFLAGS
Adding -Os to the CFLAGS gains us about 25% smaller code (give or take).
Unfortunately, it exposes a strange issue where strcpy() suddenly goes
missing - we think that strcpy() is being provided by libgcc, and that
for some reason, -Os changes the beahavior.  Oh, well - add a quick
strcpy() function and we're good.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3175 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 01:13:28 +00:00
Uwe Hermann c52761be0a libpayload: BSD solutions contributed by Uwe
Signed-off-by: Uwe Hermann <uwe@hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3172 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-20 00:02:07 +00:00
Jordan Crouse f3029a8fc9 libpayload: External code
This is external and properly licensed code that I pulled into the tree.
          
Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3171 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-19 23:59:13 +00:00
Jordan Crouse f6145c3c15 libpayload: The initial chunk of code writen by AMD
This is the initial chunk of code written by me and copyrighted
by AMD.  Includes everything but a few files that we pulled from
outside sources.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3170 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
2008-03-19 23:56:58 +00:00