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