hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
 * Copyright (C) 2011 The ChromiumOS Authors.  All rights reserved.
 *
 * SPDX-License-Identifier:    GPL-2.0
 */
 
#include <common.h>
#include <console.h>
#ifndef CONFIG_SYS_COREBOOT
#error This driver requires coreboot
#endif
 
#include <asm/arch/sysinfo.h>
 
struct cbmem_console {
   u32 buffer_size;
   u32 buffer_cursor;
   u8  buffer_body[0];
}  __attribute__ ((__packed__));
 
static struct cbmem_console *cbmem_console_p;
 
void cbmemc_putc(struct stdio_dev *dev, char data)
{
   int cursor;
 
   cursor = cbmem_console_p->buffer_cursor++;
   if (cursor < cbmem_console_p->buffer_size)
       cbmem_console_p->buffer_body[cursor] = data;
}
 
void cbmemc_puts(struct stdio_dev *dev, const char *str)
{
   char c;
 
   while ((c = *str++) != 0)
       cbmemc_putc(dev, c);
}
 
int cbmemc_init(void)
{
   int rc;
   struct stdio_dev cons_dev;
   cbmem_console_p = lib_sysinfo.cbmem_cons;
 
   memset(&cons_dev, 0, sizeof(cons_dev));
 
   strcpy(cons_dev.name, "cbmem");
   cons_dev.flags = DEV_FLAGS_OUTPUT; /* Output only */
   cons_dev.putc  = cbmemc_putc;
   cons_dev.puts  = cbmemc_puts;
 
   rc = stdio_register(&cons_dev);
 
   return (rc == 0) ? 1 : rc;
}