Add missing files from r354720
MFC with: r354720 Differential Revision: https://reviews.freebsd.org/D22326
This commit is contained in:
parent
dad9aadfd4
commit
8889871a5b
@ -39,6 +39,9 @@ extern int szsigcode;
|
|||||||
extern uint64_t *vm_page_dump;
|
extern uint64_t *vm_page_dump;
|
||||||
extern int vm_page_dump_size;
|
extern int vm_page_dump_size;
|
||||||
extern u_long elf_hwcap;
|
extern u_long elf_hwcap;
|
||||||
|
extern register_t mvendorid;
|
||||||
|
extern register_t marchid;
|
||||||
|
extern register_t mimpid;
|
||||||
|
|
||||||
struct dumperinfo;
|
struct dumperinfo;
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2016-2017 Ruslan Bukin <br@bsdpad.com>
|
* Copyright (c) 2016-2017 Ruslan Bukin <br@bsdpad.com>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
|
* Copyright (c) 2019 Mitchell Horne <mhorne@FreeBSD.org>
|
||||||
*
|
*
|
||||||
* Portions of this software were developed by SRI International and the
|
* Portions of this software were developed by SRI International and the
|
||||||
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
* University of Cambridge Computer Laboratory under DARPA/AFRL contract
|
||||||
@ -37,6 +38,35 @@
|
|||||||
#ifndef _MACHINE_SBI_H_
|
#ifndef _MACHINE_SBI_H_
|
||||||
#define _MACHINE_SBI_H_
|
#define _MACHINE_SBI_H_
|
||||||
|
|
||||||
|
/* SBI Specification Version */
|
||||||
|
#define SBI_SPEC_VERS_MAJOR_OFFSET 24
|
||||||
|
#define SBI_SPEC_VERS_MAJOR_MASK (0x7F << SBI_SPEC_VERS_MAJOR_OFFSET)
|
||||||
|
#define SBI_SPEC_VERS_MINOR_OFFSET 0
|
||||||
|
#define SBI_SPEC_VERS_MINOR_MASK (0xFFFFFF << SBI_SPEC_VERS_MINOR_OFFSET)
|
||||||
|
|
||||||
|
/* SBI Implementation IDs */
|
||||||
|
#define SBI_IMPL_ID_BBL 0
|
||||||
|
#define SBI_IMPL_ID_OPENSBI 1
|
||||||
|
|
||||||
|
/* SBI Error Codes */
|
||||||
|
#define SBI_SUCCESS 0
|
||||||
|
#define SBI_ERR_FAILURE -1
|
||||||
|
#define SBI_ERR_NOT_SUPPORTED -2
|
||||||
|
#define SBI_ERR_INVALID_PARAM -3
|
||||||
|
#define SBI_ERR_DENIED -4
|
||||||
|
#define SBI_ERR_INVALID_ADDRESS -5
|
||||||
|
|
||||||
|
/* SBI Base Extension */
|
||||||
|
#define SBI_EXT_ID_BASE 0x10
|
||||||
|
#define SBI_BASE_GET_SPEC_VERSION 0
|
||||||
|
#define SBI_BASE_GET_IMPL_ID 1
|
||||||
|
#define SBI_BASE_GET_IMPL_VERSION 2
|
||||||
|
#define SBI_BASE_PROBE_EXTENSION 3
|
||||||
|
#define SBI_BASE_GET_MVENDORID 4
|
||||||
|
#define SBI_BASE_GET_MARCHID 5
|
||||||
|
#define SBI_BASE_GET_MIMPID 6
|
||||||
|
|
||||||
|
/* Legacy Extensions */
|
||||||
#define SBI_SET_TIMER 0
|
#define SBI_SET_TIMER 0
|
||||||
#define SBI_CONSOLE_PUTCHAR 1
|
#define SBI_CONSOLE_PUTCHAR 1
|
||||||
#define SBI_CONSOLE_GETCHAR 2
|
#define SBI_CONSOLE_GETCHAR 2
|
||||||
@ -55,13 +85,20 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Documentation available at
|
* Documentation available at
|
||||||
* https://github.com/riscv/riscv-sbi-doc/blob/master/riscv-sbi.md
|
* https://github.com/riscv/riscv-sbi-doc/blob/master/riscv-sbi.adoc
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static __inline uint64_t
|
struct sbi_ret {
|
||||||
|
long error;
|
||||||
|
long value;
|
||||||
|
};
|
||||||
|
|
||||||
|
static __inline struct sbi_ret
|
||||||
sbi_call(uint64_t arg7, uint64_t arg6, uint64_t arg0, uint64_t arg1,
|
sbi_call(uint64_t arg7, uint64_t arg6, uint64_t arg0, uint64_t arg1,
|
||||||
uint64_t arg2, uint64_t arg3)
|
uint64_t arg2, uint64_t arg3)
|
||||||
{
|
{
|
||||||
|
struct sbi_ret ret;
|
||||||
|
|
||||||
register uintptr_t a0 __asm ("a0") = (uintptr_t)(arg0);
|
register uintptr_t a0 __asm ("a0") = (uintptr_t)(arg0);
|
||||||
register uintptr_t a1 __asm ("a1") = (uintptr_t)(arg1);
|
register uintptr_t a1 __asm ("a1") = (uintptr_t)(arg1);
|
||||||
register uintptr_t a2 __asm ("a2") = (uintptr_t)(arg2);
|
register uintptr_t a2 __asm ("a2") = (uintptr_t)(arg2);
|
||||||
@ -71,13 +108,27 @@ sbi_call(uint64_t arg7, uint64_t arg6, uint64_t arg0, uint64_t arg1,
|
|||||||
|
|
||||||
__asm __volatile( \
|
__asm __volatile( \
|
||||||
"ecall" \
|
"ecall" \
|
||||||
:"+r"(a0) \
|
:"+r"(a0), "+r"(a1) \
|
||||||
:"r"(a1), "r"(a2), "r"(a3), "r"(a6), "r"(a7) \
|
:"r"(a2), "r"(a3), "r"(a6), "r"(a7) \
|
||||||
:"memory");
|
:"memory");
|
||||||
|
|
||||||
return (a0);
|
ret.error = a0;
|
||||||
|
ret.value = a1;
|
||||||
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Base extension functions and variables. */
|
||||||
|
extern u_long sbi_spec_version;
|
||||||
|
extern u_long sbi_impl_id;
|
||||||
|
extern u_long sbi_impl_version;
|
||||||
|
|
||||||
|
static __inline long
|
||||||
|
sbi_probe_extension(long id)
|
||||||
|
{
|
||||||
|
return (SBI_CALL1(SBI_EXT_ID_BASE, SBI_BASE_PROBE_EXTENSION, id).value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Legacy extension functions. */
|
||||||
static __inline void
|
static __inline void
|
||||||
sbi_console_putchar(int ch)
|
sbi_console_putchar(int ch)
|
||||||
{
|
{
|
||||||
@ -89,7 +140,11 @@ static __inline int
|
|||||||
sbi_console_getchar(void)
|
sbi_console_getchar(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (SBI_CALL0(SBI_CONSOLE_GETCHAR, 0));
|
/*
|
||||||
|
* XXX: The "error" is returned here because legacy SBI functions
|
||||||
|
* continue to return their value in a0.
|
||||||
|
*/
|
||||||
|
return (SBI_CALL0(SBI_CONSOLE_GETCHAR, 0).error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline void
|
static __inline void
|
||||||
@ -146,4 +201,6 @@ sbi_remote_sfence_vma_asid(const unsigned long *hart_mask,
|
|||||||
start, size, asid);
|
start, size, asid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sbi_init(void);
|
||||||
|
|
||||||
#endif /* !_MACHINE_SBI_H_ */
|
#endif /* !_MACHINE_SBI_H_ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user