brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · fdc2699 Raw
84 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * udbg interface to hvc_console.c4 *5 * (C) Copyright David Gibson, IBM Corporation 2008.6 */7 8#include <linux/console.h>9#include <linux/delay.h>10#include <linux/err.h>11#include <linux/init.h>12#include <linux/moduleparam.h>13#include <linux/types.h>14#include <linux/irq.h>15 16#include <asm/udbg.h>17 18#include "hvc_console.h"19 20static struct hvc_struct *hvc_udbg_dev;21 22static ssize_t hvc_udbg_put(uint32_t vtermno, const u8 *buf, size_t count)23{24	size_t i;25 26	for (i = 0; i < count && udbg_putc; i++)27		udbg_putc(buf[i]);28 29	return i;30}31 32static ssize_t hvc_udbg_get(uint32_t vtermno, u8 *buf, size_t count)33{34	size_t i;35	int c;36 37	if (!udbg_getc_poll)38		return 0;39 40	for (i = 0; i < count; i++) {41		if ((c = udbg_getc_poll()) == -1)42			break;43		buf[i] = c;44	}45 46	return i;47}48 49static const struct hv_ops hvc_udbg_ops = {50	.get_chars = hvc_udbg_get,51	.put_chars = hvc_udbg_put,52};53 54static int __init hvc_udbg_init(void)55{56	struct hvc_struct *hp;57 58	if (!udbg_putc)59		return -ENODEV;60 61	BUG_ON(hvc_udbg_dev);62 63	hp = hvc_alloc(0, 0, &hvc_udbg_ops, 16);64	if (IS_ERR(hp))65		return PTR_ERR(hp);66 67	hvc_udbg_dev = hp;68 69	return 0;70}71device_initcall(hvc_udbg_init);72 73static int __init hvc_udbg_console_init(void)74{75	if (!udbg_putc)76		return -ENODEV;77 78	hvc_instantiate(0, 0, &hvc_udbg_ops);79	add_preferred_console("hvc", 0, NULL);80 81	return 0;82}83console_initcall(hvc_udbg_console_init);84