1
#ifndef __LIBHVCALL_H__
2
#define __LIBHVCALL_H__
9
#define H_LOGICAL_CI_LOAD 0x3c
10
#define H_LOGICAL_CI_STORE 0x40
11
#define H_GET_TERM_CHAR 0x54
12
#define H_PUT_TERM_CHAR 0x58
13
#define H_REG_CRQ 0xFC
14
#define H_FREE_CRQ 0x100
15
#define H_SEND_CRQ 0x108
16
#define H_REGISTER_LOGICAL_LAN 0x114
17
#define H_FREE_LOGICAL_LAN 0x118
18
#define H_ADD_LOGICAL_LAN_BUFFER 0x11C
19
#define H_SEND_LOGICAL_LAN 0x120
21
/* KVM specific ones */
22
#define KVMPPC_HCALL_BASE 0xf000
23
#define KVMPPC_H_RTAS (KVMPPC_HCALL_BASE + 0x0)
24
#define KVMPPC_H_LOGICAL_MEMOP (KVMPPC_HCALL_BASE + 0x1)
25
/* Client Architecture support */
26
#define KVMPPC_H_CAS (KVMPPC_HCALL_BASE + 0x2)
27
#define KVMPPC_H_RTAS_UPDATE (KVMPPC_HCALL_BASE + 0x3)
28
#define KVMPPC_H_REPORT_MC_ERR (KVMPPC_HCALL_BASE + 0x4)
29
#define KVMPPC_HCALL_MAX KVMPPC_H_NMI_MCE
33
extern long hv_generic(unsigned long opcode, ...);
35
extern void hv_putchar(char c, int hvtermno);
36
extern char hv_getchar(int hvtermno);
37
extern char hv_haschar(int hvtermno);
38
extern void get_print_banner(unsigned long addr);
40
extern int hv_send_crq(unsigned int unit, uint64_t *msgaddr);
42
static inline long hv_reg_crq(unsigned int unit, unsigned long qaddr,
45
return hv_generic(H_REG_CRQ, unit, qaddr, qsize);
48
static inline void hv_free_crq(unsigned int unit)
50
hv_generic(H_FREE_CRQ, unit);
53
extern long hv_send_logical_lan(unsigned long unit_address,
54
unsigned long desc1, unsigned long desc2,
55
unsigned long desc3, unsigned long desc4,
56
unsigned long desc5, unsigned long desc6);
58
static inline long h_register_logical_lan(unsigned long unit_address,
59
unsigned long buf_list,
61
unsigned long filter_list,
62
unsigned long mac_address)
64
return hv_generic(H_REGISTER_LOGICAL_LAN, unit_address,
65
buf_list, rec_q, filter_list, mac_address);
68
static inline long h_free_logical_lan(unsigned long unit_address)
70
return hv_generic(H_FREE_LOGICAL_LAN, unit_address);
73
static inline long h_add_logical_lan_buffer(unsigned long unit_address,
76
return hv_generic(H_ADD_LOGICAL_LAN_BUFFER, unit_address, buffer);
79
#define HV_RTAS_MAX_ARGRET 5
85
uint32_t argret[HV_RTAS_MAX_ARGRET];
88
static inline unsigned long h_rtas(struct hv_rtas_call *rtas_buf)
90
return hv_generic(KVMPPC_H_RTAS, (unsigned long)rtas_buf);
93
extern unsigned long hv_logical_ci_load(unsigned long size, unsigned long addr);
94
extern unsigned long hv_logical_ci_store(unsigned long size, unsigned long addr,
97
extern unsigned long hv_logical_memop(unsigned long dst, unsigned long src,
98
unsigned long esize, unsigned long count,
100
extern int patch_broken_sc1(void *start, void *end, uint32_t *test_ins);
102
extern unsigned long hv_cas(unsigned long vec, unsigned long buf,
105
#endif /* __ASSEMBLY__ */
107
#endif /* __LIBHVCALL_H__ */