master
s 49 lines 957 Bytes
Raw
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;