| 1 | #define LOAD32(rn, name) \ |
| 2 | lis rn,name##@h; \ |
| 3 | ori rn,rn,name##@l |
| 4 | |
| 5 | #define ENTRY(func_name) \ |
| 6 | .text; \ |
| 7 | .align 2; \ |
| 8 | .globl .func_name; \ |
| 9 | .func_name: \ |
| 10 | .globl func_name; \ |
| 11 | func_name: |
| 12 | |
| 13 | #define KVMPPC_HCALL_BASE 0xf000 |
| 14 | #define KVMPPC_H_RTAS (KVMPPC_HCALL_BASE + 0x0) |
| 15 | #define KVMPPC_H_VOF_CLIENT (KVMPPC_HCALL_BASE + 0x5) |
| 16 | |
| 17 | . = 0x100 /* Do exactly as SLOF does */ |
| 18 | |
| 19 | ENTRY(_start) |
| 20 | LOAD32(2, __toc_start) |
| 21 | b entry_c |
| 22 | |
| 23 | ENTRY(_prom_entry) |
| 24 | LOAD32(2, __toc_start) |
| 25 | stwu %r1,-112(%r1) |
| 26 | stw %r31,104(%r1) |
| 27 | mflr %r31 |
| 28 | bl prom_entry |
| 29 | nop |
| 30 | mtlr %r31 |
| 31 | lwz %r31,104(%r1) |
| 32 | addi %r1,%r1,112 |
| 33 | blr |
| 34 | |
| 35 | ENTRY(ci_entry) |
| 36 | mr 4,3 |
| 37 | LOAD32(3,KVMPPC_H_VOF_CLIENT) |
| 38 | sc 1 |
| 39 | blr |
| 40 | |
| 41 | /* This is the actual RTAS blob copied to the OS at instantiate-rtas */ |
| 42 | ENTRY(hv_rtas) |
| 43 | mr %r4,%r3 |
| 44 | LOAD32(3,KVMPPC_H_RTAS) |
| 45 | sc 1 |
| 46 | blr |
| 47 | .globl hv_rtas_size |
| 48 | hv_rtas_size: |
| 49 | .long . - hv_rtas; |