162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2012 ARM Ltd.
462306a36Sopenharmony_ci * Author: Marc Zyngier <marc.zyngier@arm.com>
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Adapted for ARM and earlycon:
762306a36Sopenharmony_ci * Copyright (C) 2014 Linaro Ltd.
862306a36Sopenharmony_ci * Author: Rob Herring <robh@kernel.org>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifndef _ARM64_SEMIHOST_H_
1262306a36Sopenharmony_ci#define _ARM64_SEMIHOST_H_
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cistruct uart_port;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistatic inline void smh_putc(struct uart_port *port, unsigned char c)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	asm volatile("mov  x1, %0\n"
1962306a36Sopenharmony_ci		     "mov  x0, #3\n"
2062306a36Sopenharmony_ci		     "hlt  0xf000\n"
2162306a36Sopenharmony_ci		     : : "r" (&c) : "x0", "x1", "memory");
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#endif /* _ARM64_SEMIHOST_H_ */
25