| #define LOAD32(rn, name) \ |
| lis rn,name##@h; \ |
| ori rn,rn,name##@l |
| |
| #define ENTRY(func_name) \ |
| .text; \ |
| .align 2; \ |
| .globl .func_name; \ |
| .func_name: \ |
| .globl func_name; \ |
| func_name: |
| |
| #define KVMPPC_HCALL_BASE 0xf000 |
| #define KVMPPC_H_RTAS (KVMPPC_HCALL_BASE + 0x0) |
| #define KVMPPC_H_VOF_CLIENT (KVMPPC_HCALL_BASE + 0x5) |
| |
| . = 0x100 /* Do exactly as SLOF does */ |
| |
| ENTRY(_start) |
| LOAD32(2, __toc_start) |
| b entry_c |
| |
| ENTRY(_prom_entry) |
| LOAD32(2, __toc_start) |
| stwu %r1,-112(%r1) |
| stw %r31,104(%r1) |
| mflr %r31 |
| bl prom_entry |
| nop |
| mtlr %r31 |
| lwz %r31,104(%r1) |
| addi %r1,%r1,112 |
| blr |
| |
| ENTRY(ci_entry) |
| mr 4,3 |
| LOAD32(3,KVMPPC_H_VOF_CLIENT) |
| sc 1 |
| blr |
| |
| /* This is the actual RTAS blob copied to the OS at instantiate-rtas */ |
| ENTRY(hv_rtas) |
| mr %r4,%r3 |
| LOAD32(3,KVMPPC_H_RTAS) |
| sc 1 |
| blr |
| .globl hv_rtas_size |
| hv_rtas_size: |
| .long . - hv_rtas; |