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