18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * OF console routines 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) Paul Mackerras 1997. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci#include <stddef.h> 88c2ecf20Sopenharmony_ci#include "types.h" 98c2ecf20Sopenharmony_ci#include "elf.h" 108c2ecf20Sopenharmony_ci#include "string.h" 118c2ecf20Sopenharmony_ci#include "stdio.h" 128c2ecf20Sopenharmony_ci#include "page.h" 138c2ecf20Sopenharmony_ci#include "ops.h" 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "of.h" 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistatic unsigned int of_stdout_handle; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic int of_console_open(void) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci void *devp; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci if (((devp = of_finddevice("/chosen")) != NULL) 248c2ecf20Sopenharmony_ci && (of_getprop(devp, "stdout", &of_stdout_handle, 258c2ecf20Sopenharmony_ci sizeof(of_stdout_handle)) 268c2ecf20Sopenharmony_ci == sizeof(of_stdout_handle))) { 278c2ecf20Sopenharmony_ci of_stdout_handle = be32_to_cpu(of_stdout_handle); 288c2ecf20Sopenharmony_ci return 0; 298c2ecf20Sopenharmony_ci } 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci return -1; 328c2ecf20Sopenharmony_ci} 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistatic void of_console_write(const char *buf, int len) 358c2ecf20Sopenharmony_ci{ 368c2ecf20Sopenharmony_ci of_call_prom("write", 3, 1, of_stdout_handle, buf, len); 378c2ecf20Sopenharmony_ci} 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_civoid of_console_init(void) 408c2ecf20Sopenharmony_ci{ 418c2ecf20Sopenharmony_ci console_ops.open = of_console_open; 428c2ecf20Sopenharmony_ci console_ops.write = of_console_write; 438c2ecf20Sopenharmony_ci} 44