162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * OF console routines
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) Paul Mackerras 1997.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#include <stddef.h>
862306a36Sopenharmony_ci#include "types.h"
962306a36Sopenharmony_ci#include "elf.h"
1062306a36Sopenharmony_ci#include "string.h"
1162306a36Sopenharmony_ci#include "stdio.h"
1262306a36Sopenharmony_ci#include "page.h"
1362306a36Sopenharmony_ci#include "ops.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "of.h"
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic unsigned int of_stdout_handle;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistatic int of_console_open(void)
2062306a36Sopenharmony_ci{
2162306a36Sopenharmony_ci	void *devp;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	if (((devp = of_finddevice("/chosen")) != NULL)
2462306a36Sopenharmony_ci	    && (of_getprop(devp, "stdout", &of_stdout_handle,
2562306a36Sopenharmony_ci			   sizeof(of_stdout_handle))
2662306a36Sopenharmony_ci		== sizeof(of_stdout_handle))) {
2762306a36Sopenharmony_ci		of_stdout_handle = be32_to_cpu(of_stdout_handle);
2862306a36Sopenharmony_ci		return 0;
2962306a36Sopenharmony_ci	}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci	return -1;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistatic void of_console_write(const char *buf, int len)
3562306a36Sopenharmony_ci{
3662306a36Sopenharmony_ci	of_call_prom("write", 3, 1, of_stdout_handle, buf, len);
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_civoid of_console_init(void)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	console_ops.open = of_console_open;
4262306a36Sopenharmony_ci	console_ops.write = of_console_write;
4362306a36Sopenharmony_ci}
44