112 lines
3.3 KiB
C
112 lines
3.3 KiB
C
#ifndef __LIBHVCALL_H__
|
|
#define __LIBHVCALL_H__
|
|
|
|
#define H_SUCCESS 0
|
|
#define H_HARDWARE -1
|
|
#define H_PRIVILEGE -3 /* Caller not privileged */
|
|
|
|
#define H_GET_TCE 0x1C
|
|
#define H_PUT_TCE 0x20
|
|
#define H_LOGICAL_CI_LOAD 0x3c
|
|
#define H_LOGICAL_CI_STORE 0x40
|
|
#define H_GET_TERM_CHAR 0x54
|
|
#define H_PUT_TERM_CHAR 0x58
|
|
#define H_REG_CRQ 0xFC
|
|
#define H_FREE_CRQ 0x100
|
|
#define H_SEND_CRQ 0x108
|
|
#define H_REGISTER_LOGICAL_LAN 0x114
|
|
#define H_FREE_LOGICAL_LAN 0x118
|
|
#define H_ADD_LOGICAL_LAN_BUFFER 0x11C
|
|
#define H_SEND_LOGICAL_LAN 0x120
|
|
|
|
/* KVM specific ones */
|
|
#define KVMPPC_HCALL_BASE 0xf000
|
|
#define KVMPPC_H_RTAS (KVMPPC_HCALL_BASE + 0x0)
|
|
#define KVMPPC_H_LOGICAL_MEMOP (KVMPPC_HCALL_BASE + 0x1)
|
|
/* Client Architecture support */
|
|
#define KVMPPC_H_CAS (KVMPPC_HCALL_BASE + 0x2)
|
|
#define KVMPPC_H_UPDATE_DT (KVMPPC_HCALL_BASE + 0x3)
|
|
#define KVMPPC_HCALL_MAX KVMPPC_H_UPDATE_DT
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
extern long hv_generic(unsigned long opcode, ...);
|
|
|
|
extern void hv_putchar(char c, int hvtermno);
|
|
extern char hv_getchar(int hvtermno);
|
|
extern char hv_haschar(int hvtermno);
|
|
extern void get_print_banner(unsigned long addr);
|
|
|
|
extern int hv_send_crq(unsigned int unit, uint64_t *msgaddr);
|
|
|
|
static inline long hv_reg_crq(unsigned int unit, unsigned long qaddr,
|
|
unsigned long qsize)
|
|
{
|
|
return hv_generic(H_REG_CRQ, unit, qaddr, qsize);
|
|
}
|
|
|
|
static inline void hv_free_crq(unsigned int unit)
|
|
{
|
|
hv_generic(H_FREE_CRQ, unit);
|
|
}
|
|
|
|
extern long hv_send_logical_lan(unsigned long unit_address,
|
|
unsigned long desc1, unsigned long desc2,
|
|
unsigned long desc3, unsigned long desc4,
|
|
unsigned long desc5, unsigned long desc6);
|
|
|
|
static inline long h_register_logical_lan(unsigned long unit_address,
|
|
unsigned long buf_list,
|
|
unsigned long rec_q,
|
|
unsigned long filter_list,
|
|
unsigned long mac_address)
|
|
{
|
|
return hv_generic(H_REGISTER_LOGICAL_LAN, unit_address,
|
|
buf_list, rec_q, filter_list, mac_address);
|
|
}
|
|
|
|
static inline long h_free_logical_lan(unsigned long unit_address)
|
|
{
|
|
return hv_generic(H_FREE_LOGICAL_LAN, unit_address);
|
|
}
|
|
|
|
static inline long h_add_logical_lan_buffer(unsigned long unit_address,
|
|
unsigned long buffer)
|
|
{
|
|
return hv_generic(H_ADD_LOGICAL_LAN_BUFFER, unit_address, buffer);
|
|
}
|
|
|
|
#define HV_RTAS_MAX_ARGRET 5
|
|
|
|
struct hv_rtas_call {
|
|
uint32_t token;
|
|
uint32_t nargs;
|
|
uint32_t nrets;
|
|
uint32_t argret[HV_RTAS_MAX_ARGRET];
|
|
};
|
|
|
|
static inline unsigned long h_rtas(struct hv_rtas_call *rtas_buf)
|
|
{
|
|
return hv_generic(KVMPPC_H_RTAS, (unsigned long)rtas_buf);
|
|
}
|
|
|
|
extern unsigned long hv_logical_ci_load(unsigned long size, unsigned long addr);
|
|
extern unsigned long hv_logical_ci_store(unsigned long size, unsigned long addr,
|
|
unsigned long value);
|
|
|
|
extern unsigned long hv_logical_memop(unsigned long dst, unsigned long src,
|
|
unsigned long esize, unsigned long count,
|
|
unsigned long op);
|
|
extern int check_broken_sc1(void);
|
|
extern int patch_broken_sc1(void *start, void *end, uint32_t *test_ins);
|
|
|
|
extern unsigned long hv_cas(unsigned long vec, unsigned long buf,
|
|
unsigned long size);
|
|
|
|
extern unsigned long hv_rtas(unsigned long params);
|
|
extern unsigned long hv_rtas_broken_sc1(unsigned long params);
|
|
extern unsigned int hv_rtas_size, hv_rtas_broken_sc1_size;
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* __LIBHVCALL_H__ */
|