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 _ARM_SEMIHOST_H_
1262306a36Sopenharmony_ci#define _ARM_SEMIHOST_H_
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#ifdef CONFIG_THUMB2_KERNEL
1562306a36Sopenharmony_ci#define SEMIHOST_SWI	"0xab"
1662306a36Sopenharmony_ci#else
1762306a36Sopenharmony_ci#define SEMIHOST_SWI	"0x123456"
1862306a36Sopenharmony_ci#endif
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_cistruct uart_port;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic inline void smh_putc(struct uart_port *port, unsigned char c)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	asm volatile("mov  r1, %0\n"
2562306a36Sopenharmony_ci		     "mov  r0, #3\n"
2662306a36Sopenharmony_ci		     "svc  " SEMIHOST_SWI "\n"
2762306a36Sopenharmony_ci		     : : "r" (&c) : "r0", "r1", "memory");
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#endif /* _ARM_SEMIHOST_H_ */
31