linux/drivers/tty/hvc/hvc_riscv_sbi.c
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2008 David Gibson, IBM Corporation
   4 * Copyright (C) 2012 Regents of the University of California
   5 * Copyright (C) 2017 SiFive
   6 */
   7
   8#include <linux/console.h>
   9#include <linux/err.h>
  10#include <linux/init.h>
  11#include <linux/moduleparam.h>
  12#include <linux/types.h>
  13
  14#include <asm/sbi.h>
  15
  16#include "hvc_console.h"
  17
  18static int hvc_sbi_tty_put(uint32_t vtermno, const char *buf, int count)
  19{
  20        int i;
  21
  22        for (i = 0; i < count; i++)
  23                sbi_console_putchar(buf[i]);
  24
  25        return i;
  26}
  27
  28static int hvc_sbi_tty_get(uint32_t vtermno, char *buf, int count)
  29{
  30        int i, c;
  31
  32        for (i = 0; i < count; i++) {
  33                c = sbi_console_getchar();
  34                if (c < 0)
  35                        break;
  36                buf[i] = c;
  37        }
  38
  39        return i;
  40}
  41
  42static const struct hv_ops hvc_sbi_ops = {
  43        .get_chars = hvc_sbi_tty_get,
  44        .put_chars = hvc_sbi_tty_put,
  45};
  46
  47static int __init hvc_sbi_init(void)
  48{
  49        return PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_ops, 16));
  50}
  51device_initcall(hvc_sbi_init);
  52
  53static int __init hvc_sbi_console_init(void)
  54{
  55        hvc_instantiate(0, 0, &hvc_sbi_ops);
  56
  57        return 0;
  58}
  59console_initcall(hvc_sbi_console_init);
  60