Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * linux/arch/sh/kernel/sh_bios.c | |
3 | * C interface for trapping into the standard LinuxSH BIOS. | |
4 | * | |
5 | * Copyright (C) 2000 Greg Banks, Mitch Davis | |
6 | * | |
7 | */ | |
98d877c4 | 8 | #include <linux/module.h> |
1da177e4 LT |
9 | #include <asm/sh_bios.h> |
10 | ||
8e32018b | 11 | #define BIOS_CALL_CONSOLE_WRITE 0 |
1da177e4 LT |
12 | #define BIOS_CALL_ETH_NODE_ADDR 10 |
13 | #define BIOS_CALL_SHUTDOWN 11 | |
8e32018b | 14 | #define BIOS_CALL_CHAR_OUT 0x1f /* TODO: hack */ |
8e32018b | 15 | #define BIOS_CALL_GDB_DETACH 0xff |
1da177e4 | 16 | |
8e32018b PM |
17 | static inline long sh_bios_call(long func, long arg0, long arg1, long arg2, |
18 | long arg3) | |
1da177e4 | 19 | { |
8e32018b PM |
20 | register long r0 __asm__("r0") = func; |
21 | register long r4 __asm__("r4") = arg0; | |
22 | register long r5 __asm__("r5") = arg1; | |
23 | register long r6 __asm__("r6") = arg2; | |
24 | register long r7 __asm__("r7") = arg3; | |
1da177e4 | 25 | |
8e32018b PM |
26 | __asm__ __volatile__("trapa #0x3f":"=z"(r0) |
27 | :"0"(r0), "r"(r4), "r"(r5), "r"(r6), "r"(r7) | |
28 | :"memory"); | |
29 | return r0; | |
30 | } | |
1da177e4 LT |
31 | |
32 | void sh_bios_console_write(const char *buf, unsigned int len) | |
33 | { | |
8e32018b | 34 | sh_bios_call(BIOS_CALL_CONSOLE_WRITE, (long)buf, (long)len, 0, 0); |
1da177e4 LT |
35 | } |
36 | ||
1da177e4 LT |
37 | void sh_bios_char_out(char ch) |
38 | { | |
8e32018b | 39 | sh_bios_call(BIOS_CALL_CHAR_OUT, ch, 0, 0, 0); |
1da177e4 LT |
40 | } |
41 | ||
1da177e4 LT |
42 | void sh_bios_gdb_detach(void) |
43 | { | |
8e32018b | 44 | sh_bios_call(BIOS_CALL_GDB_DETACH, 0, 0, 0, 0); |
1da177e4 | 45 | } |
a9df1ed9 | 46 | EXPORT_SYMBOL_GPL(sh_bios_gdb_detach); |
1da177e4 | 47 | |
8e32018b | 48 | void sh_bios_get_node_addr(unsigned char *node_addr) |
1da177e4 | 49 | { |
8e32018b | 50 | sh_bios_call(BIOS_CALL_ETH_NODE_ADDR, 0, (long)node_addr, 0, 0); |
1da177e4 | 51 | } |
a9df1ed9 | 52 | EXPORT_SYMBOL_GPL(sh_bios_get_node_addr); |
1da177e4 LT |
53 | |
54 | void sh_bios_shutdown(unsigned int how) | |
55 | { | |
8e32018b | 56 | sh_bios_call(BIOS_CALL_SHUTDOWN, how, 0, 0, 0); |
1da177e4 | 57 | } |