blob: 0ff7c3b47d5625e69a6b039fc26c1c4f44201363 [file] [log] [blame]
/*
* RISC-V supervisor binary interface (SBI) trampoline page
*
* Copyright 2016 Jonathan Neuschäfer <j.neuschaefer@gmx.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; version 2 of
* the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*/
#define __ASSEMBLY__
#include <arch/encoding.h>
#include <mcall.h>
.section ".text.sbi", "ax", %progbits
/* align to a page boundary */
.align RISCV_PGSHIFT
.globl sbi_page
sbi_page:
/*
* None of the SBI entry points is located in the first half of the
* page
*/
.skip 0x800
/* -2048: size_t sbi_hart_id(void); */
li a7, MCALL_HART_ID
ecall
jr ra
.align 4
/* -2032: size_t sbi_num_harts(void); */
li a7, MCALL_NUM_HARTS
ecall
jr ra
.align 4
/* -2016: unsigned long sbi_query_memory(unsigned long id,
memory_block_info *p); */
li a7, MCALL_QUERY_MEMORY
ecall
jr ra
.align 4
/* -2000: int sbi_console_putchar(uint8_t ch); */
li a7, MCALL_CONSOLE_PUTCHAR
ecall
jr ra
.align 4
/* -1984: int sbi_console_getchar(void); */
li a0, -1 /* failure: Coreboot doesn't support console input */
jr ra
.align 4
/* -1968: Not allocated */
ebreak
.align 4
/* -1952: int sbi_send_ipi(size_t hart_id); */
ebreak
.align 4
/* -1936: int bool sbi_clear_ipi(void); */
ebreak
.align 4
/* -1920: unsigned long sbi_timebase(void); */
li a0, 1000000000 /* I have no idea. */
jr ra
.align 4
/* -1904: void sbi_shutdown(void); */
li a7, MCALL_SHUTDOWN
ecall
jr ra
.align 4
/* -1888: void sbi_set_timer(unsigned long long stime_value); */
li a7, MCALL_SET_TIMER
ecall
jr ra
.align 4
/* -1872: int sbi_mask_interrupt(int which); */
li a0, 0 # dummy
jr ra
.align 4
/* -1856: int sbi_unmask_interrupt(int which); */
li a0, 0 # dummy
jr ra
.align 4
/* -1840: void sbi_remote_sfence_vm(const uintptr_t* harts,
size_t asid); */
ebreak
.align 4
/* -1824: void sbi_remote_sfence_vm_range(const uintptr_t* harts,
size_t asid, uintptr_t start, uintptr_t size); */
ebreak
.align 4
/* -1808: void sbi_remote_fence_i(const uintptr_t* harts); */
ebreak
.align 4
/* Fill the remainder of the page */
.align RISCV_PGSHIFT