blob: 687344400c9074520ba03c09ff3109f4756dfb22 [file] [log] [blame]
Gabe Blacka54b6a62012-09-29 00:21:27 -07001/*
Stefan Reinauerc9f35f52013-02-19 16:55:51 -08002 * This file is part of the libpayload project.
Gabe Blacka54b6a62012-09-29 00:21:27 -07003 *
Stefan Reinauerc9f35f52013-02-19 16:55:51 -08004 * Copyright (c) 2012 Google Inc.
Gabe Blacka54b6a62012-09-29 00:21:27 -07005 *
Stefan Reinauerc9f35f52013-02-19 16:55:51 -08006 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
Gabe Blacka54b6a62012-09-29 00:21:27 -070016 *
Stefan Reinauerc9f35f52013-02-19 16:55:51 -080017 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
Gabe Blacka54b6a62012-09-29 00:21:27 -070028 */
29
30#include <libpayload.h>
31#include <stdint.h>
32
33struct cbmem_console {
34 uint32_t size;
35 uint32_t cursor;
36 uint8_t body[0];
37} __attribute__ ((__packed__));
38
39static struct cbmem_console *cbmem_console_p;
40
41static struct console_output_driver cbmem_console_driver =
42{
Julius Werner2fe505b2014-04-17 20:00:20 -070043 .write = &cbmem_console_write,
Gabe Blacka54b6a62012-09-29 00:21:27 -070044};
45
46void cbmem_console_init(void)
47{
48 cbmem_console_p = lib_sysinfo.cbmem_cons;
49 if (cbmem_console_p)
50 console_add_output_driver(&cbmem_console_driver);
51}
52
Julius Werner2fe505b2014-04-17 20:00:20 -070053void cbmem_console_write(const void *buffer, size_t count)
Gabe Blacka54b6a62012-09-29 00:21:27 -070054{
Julius Werner2fe505b2014-04-17 20:00:20 -070055 if (cbmem_console_p->cursor + count >= cbmem_console_p->size)
Gabe Blacka54b6a62012-09-29 00:21:27 -070056 return;
57
Julius Werner2fe505b2014-04-17 20:00:20 -070058 memcpy(cbmem_console_p->body + cbmem_console_p->cursor, buffer, count);
59 cbmem_console_p->cursor += count;
Gabe Blacka54b6a62012-09-29 00:21:27 -070060}