xref: /freebsd/sys/riscv/include/sbi.h (revision 3416500aef140042c64bc149cb1ec6620483bc44)
1 /*-
2  * Copyright (c) 2016 Ruslan Bukin <br@bsdpad.com>
3  * All rights reserved.
4  *
5  * Portions of this software were developed by SRI International and the
6  * University of Cambridge Computer Laboratory under DARPA/AFRL contract
7  * FA8750-10-C-0237 ("CTSRD"), as part of the DARPA CRASH research programme.
8  *
9  * Portions of this software were developed by the University of Cambridge
10  * Computer Laboratory as part of the CTSRD Project, with support from the
11  * UK Higher Education Innovation Fund (HEIF).
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the distribution.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  * $FreeBSD$
35  */
36 
37 #ifndef _MACHINE_SBI_H_
38 #define	_MACHINE_SBI_H_
39 
40 typedef struct {
41 	uint64_t base;
42 	uint64_t size;
43 	uint64_t node_id;
44 } memory_block_info;
45 
46 uint64_t sbi_query_memory(uint64_t id, memory_block_info *p);
47 uint64_t sbi_hart_id(void);
48 uint64_t sbi_num_harts(void);
49 uint64_t sbi_timebase(void);
50 void sbi_set_timer(uint64_t stime_value);
51 void sbi_send_ipi(uint64_t hart_id);
52 uint64_t sbi_clear_ipi(void);
53 void sbi_shutdown(void);
54 
55 void sbi_console_putchar(unsigned char ch);
56 int sbi_console_getchar(void);
57 
58 void sbi_remote_sfence_vm(uint64_t hart_mask_ptr, uint64_t asid);
59 void sbi_remote_sfence_vm_range(uint64_t hart_mask_ptr, uint64_t asid, uint64_t start, uint64_t size);
60 void sbi_remote_fence_i(uint64_t hart_mask_ptr);
61 
62 uint64_t sbi_mask_interrupt(uint64_t which);
63 uint64_t sbi_unmask_interrupt(uint64_t which);
64 
65 #endif /* !_MACHINE_SBI_H_ */
66