156 lines
2.1 KiB
ArmAsm
156 lines
2.1 KiB
ArmAsm
|
#define _ASM
|
||
|
#define __ASSEMBLY__
|
||
|
#include "macros.h"
|
||
|
#include "libhvcall.h"
|
||
|
#include <termctrl.h>
|
||
|
#include <product.h>
|
||
|
|
||
|
#define HVCALL .long 0x44000022
|
||
|
.text
|
||
|
.align 3
|
||
|
|
||
|
ENTRY(get_print_banner)
|
||
|
LOAD32(r4, print_version)
|
||
|
LOAD32(r5, print_version_end)
|
||
|
std r4,0(r3)
|
||
|
std r5,8(r3)
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_generic)
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
/* r3 = char, r4 = hvtermno */
|
||
|
ENTRY(hv_putchar)
|
||
|
sldi r6,r3,(24+32)
|
||
|
li r3,H_PUT_TERM_CHAR
|
||
|
li r5,1
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
/* r3 = hvtermno */
|
||
|
ENTRY(hv_getchar)
|
||
|
mflr r10
|
||
|
bl .hv_haschar
|
||
|
mtlr r10
|
||
|
cmpwi cr0,r3,0
|
||
|
beqlr
|
||
|
lis r9,inbuf@h
|
||
|
ori r9,r9,inbuf@l
|
||
|
lwz r4,20(r9)
|
||
|
lbzx r3,r4,r9
|
||
|
addi r4,r4,1
|
||
|
stw r4,20(r9)
|
||
|
blr
|
||
|
|
||
|
/* r3 = hvtermno */
|
||
|
ENTRY(hv_haschar)
|
||
|
mr r4,r3
|
||
|
li r3,-1
|
||
|
lis r9,inbuf@h
|
||
|
ori r9,r9,inbuf@l
|
||
|
lwz r5,16(r9)
|
||
|
lwz r6,20(r9)
|
||
|
cmplw cr0,r5,r6
|
||
|
bnelr
|
||
|
li r3,H_GET_TERM_CHAR
|
||
|
HVCALL
|
||
|
lis r9,inbuf@h
|
||
|
ori r9,r9,inbuf@l
|
||
|
stw r4,16(r9)
|
||
|
li r3,0
|
||
|
stw r3,20(r9)
|
||
|
cmplwi cr0,r4,0
|
||
|
beqlr
|
||
|
li r3,-1
|
||
|
std r5,0(r9)
|
||
|
std r6,8(r9)
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_send_crq)
|
||
|
ld r5,0(r4)
|
||
|
ld r6,8(r4)
|
||
|
mr r4,r3
|
||
|
li r3,H_SEND_CRQ
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_send_logical_lan)
|
||
|
li r11,0 /* no continue token for now */
|
||
|
mr r10,r9
|
||
|
mr r9,r8
|
||
|
mr r8,r7
|
||
|
mr r7,r6
|
||
|
mr r6,r5
|
||
|
mr r5,r4
|
||
|
mr r4,r3
|
||
|
li r3,H_SEND_LOGICAL_LAN
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_logical_ci_load)
|
||
|
mr r5,r4
|
||
|
mr r4,r3
|
||
|
li r3,H_LOGICAL_CI_LOAD
|
||
|
HVCALL
|
||
|
cmpdi cr0,r3,0
|
||
|
mr r3,r4
|
||
|
beqlr
|
||
|
li r3,-1
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_logical_ci_store)
|
||
|
mr r6,r5
|
||
|
mr r5,r4
|
||
|
mr r4,r3
|
||
|
li r3,H_LOGICAL_CI_STORE
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_logical_memop)
|
||
|
mr r8,r7
|
||
|
mr r7,r6
|
||
|
mr r6,r5
|
||
|
mr r5,r4
|
||
|
mr r4,r3
|
||
|
lis r3,KVMPPC_H_LOGICAL_MEMOP@h
|
||
|
ori r3,r3,KVMPPC_H_LOGICAL_MEMOP@l
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
ENTRY(hv_cas)
|
||
|
mr r6,r5
|
||
|
mr r5,r4
|
||
|
mr r4,r3
|
||
|
lis r3,KVMPPC_H_CAS@h
|
||
|
ori r3,r3,KVMPPC_H_CAS@l
|
||
|
HVCALL
|
||
|
blr
|
||
|
|
||
|
/* This is the actual RTAS blob copied to the OS at instantiate-rtas */
|
||
|
ENTRY(hv_rtas)
|
||
|
mr r4,r3
|
||
|
lis r3,KVMPPC_H_RTAS@h
|
||
|
ori r3,r3,KVMPPC_H_RTAS@l
|
||
|
HVCALL
|
||
|
blr
|
||
|
.globl hv_rtas_size
|
||
|
hv_rtas_size:
|
||
|
.long . - hv_rtas;
|
||
|
|
||
|
ENTRY(hv_rtas_broken_sc1)
|
||
|
mr r4,r3
|
||
|
lis r3,KVMPPC_H_RTAS@h
|
||
|
ori r3,r3,KVMPPC_H_RTAS@l
|
||
|
.long 0x7c000268
|
||
|
blr
|
||
|
.globl hv_rtas_broken_sc1_size
|
||
|
hv_rtas_broken_sc1_size:
|
||
|
.long . - hv_rtas_broken_sc1;
|
||
|
|
||
|
.section ".bss"
|
||
|
inbuf: .space 16
|
||
|
inlen: .space 4
|
||
|
inpos: .space 4
|
||
|
.text
|