Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 1 | /* |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 2 | * arch/h8300/kernel/sim-console.c |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 3 | * |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 4 | * Copyright (C) 2015 Yoshinori Sato <ysato@users.sourceforge.jp> |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 5 | * |
| 6 | * This file is subject to the terms and conditions of the GNU General Public |
| 7 | * License. See the file "COPYING" in the main directory of this archive |
| 8 | * for more details. |
| 9 | */ |
| 10 | #include <linux/console.h> |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 11 | #include <linux/init.h> |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 12 | #include <linux/serial_core.h> |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 13 | |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 14 | static void sim_write(struct console *con, const char *s, unsigned n) |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 15 | { |
| 16 | register const int fd __asm__("er0") = 1; /* stdout */ |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 17 | register const char *_ptr __asm__("er1") = s; |
| 18 | register const unsigned _len __asm__("er2") = n; |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 19 | |
| 20 | __asm__(".byte 0x5e,0x00,0x00,0xc7\n\t" /* jsr @0xc7 (sys_write) */ |
| 21 | : : "g"(fd), "g"(_ptr), "g"(_len)); |
| 22 | } |
| 23 | |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 24 | static int __init sim_setup(struct earlycon_device *device, const char *opt) |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 25 | { |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 26 | device->con->write = sim_write; |
Yoshinori Sato | 4e0c209 | 2015-01-28 02:46:20 +0900 | [diff] [blame] | 27 | return 0; |
| 28 | } |
| 29 | |
Yoshinori Sato | 8cad489 | 2015-11-21 21:42:58 +0900 | [diff] [blame] | 30 | EARLYCON_DECLARE(h8sim, sim_setup); |