riscv: Move mcall numbers to mcall.h, adjust their names
The new name and location make more sense: - The instruction used to call into machine mode isn't called "ecall" anymore; it's mcall now. - Having SBI_ in the name is slightly wrong, too: these numbers are not part of the Supervisor Binary Interface, they are just used to forward SBI calls (they could be renumbered arbitrarily without breaking an OS that's run under coreboot). Also remove mcall_dev_{req,resp} and the corresponding mcall numbers, which are no longer used. Change-Id: I76a8cb04e4ace51964b1cb4f67d49cfee9850da7 Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net> Reviewed-on: https://review.coreboot.org/18146 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
parent
f676aa4afd
commit
c5ebb1d005
|
@ -17,17 +17,6 @@
|
||||||
#ifndef _ARCH_SBI_H
|
#ifndef _ARCH_SBI_H
|
||||||
#define _ARCH_SBI_H
|
#define _ARCH_SBI_H
|
||||||
|
|
||||||
#define SBI_ECALL_HART_ID 0
|
|
||||||
#define SBI_ECALL_CONSOLE_PUT 1
|
|
||||||
#define SBI_ECALL_SEND_DEVICE_REQUEST 2
|
|
||||||
#define SBI_ECALL_RECEIVE_DEVICE_RESPONSE 3
|
|
||||||
#define SBI_ECALL_SEND_IPI 4
|
|
||||||
#define SBI_ECALL_CLEAR_IPI 5
|
|
||||||
#define SBI_ECALL_SHUTDOWN 6
|
|
||||||
#define SBI_ECALL_SET_TIMER 7
|
|
||||||
#define SBI_ECALL_QUERY_MEMORY 8
|
|
||||||
#define SBI_ECALL_NUM_HARTS 9
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
struct opaque;
|
struct opaque;
|
||||||
extern struct opaque sbi_page;
|
extern struct opaque sbi_page;
|
||||||
|
|
|
@ -23,6 +23,20 @@
|
||||||
/* We save 37 registers, currently. */
|
/* We save 37 registers, currently. */
|
||||||
#define MENTRY_FRAME_SIZE (HLS_SIZE + 37 * 8)
|
#define MENTRY_FRAME_SIZE (HLS_SIZE + 37 * 8)
|
||||||
|
|
||||||
|
#define MCALL_HART_ID 0
|
||||||
|
#define MCALL_NUM_HARTS 1
|
||||||
|
#define MCALL_QUERY_MEMORY 2
|
||||||
|
#define MCALL_CONSOLE_PUTCHAR 3
|
||||||
|
#define MCALL_CONSOLE_GETCHAR 4
|
||||||
|
#define MCALL_SEND_IPI 6
|
||||||
|
#define MCALL_CLEAR_IPI 7
|
||||||
|
#define MCALL_SHUTDOWN 8
|
||||||
|
#define MCALL_SET_TIMER 9
|
||||||
|
#define MCALL_REMOTE_SFENCE_VM 10
|
||||||
|
#define MCALL_REMOTE_FENCE_I 11
|
||||||
|
#define MCALL_CONFIG_STRING_BASE 12
|
||||||
|
#define MCALL_CONFIG_STRING_SIZE 13
|
||||||
|
|
||||||
#ifndef __ASSEMBLER__
|
#ifndef __ASSEMBLER__
|
||||||
|
|
||||||
#include <arch/encoding.h>
|
#include <arch/encoding.h>
|
||||||
|
|
|
@ -90,18 +90,6 @@ uintptr_t mcall_set_timer(uint64_t when)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t mcall_dev_req(sbi_device_message *m)
|
|
||||||
{
|
|
||||||
die("mcall_dev_req is currently not implemented");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uintptr_t mcall_dev_resp(void)
|
|
||||||
{
|
|
||||||
die("mcall_dev_resp is currently not implemented");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void hls_init(uint32_t hart_id)
|
void hls_init(uint32_t hart_id)
|
||||||
{
|
{
|
||||||
query_result res;
|
query_result res;
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#define __ASSEMBLY__
|
#define __ASSEMBLY__
|
||||||
#include <arch/encoding.h>
|
#include <arch/encoding.h>
|
||||||
#include <arch/sbi.h>
|
#include <mcall.h>
|
||||||
|
|
||||||
.section ".text.sbi", "ax", %progbits
|
.section ".text.sbi", "ax", %progbits
|
||||||
|
|
||||||
|
@ -33,26 +33,26 @@ sbi_page:
|
||||||
.skip 0x800
|
.skip 0x800
|
||||||
|
|
||||||
/* -2048: size_t sbi_hart_id(void); */
|
/* -2048: size_t sbi_hart_id(void); */
|
||||||
li a7, SBI_ECALL_HART_ID
|
li a7, MCALL_HART_ID
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
/* -2032: size_t sbi_num_harts(void); */
|
/* -2032: size_t sbi_num_harts(void); */
|
||||||
li a7, SBI_ECALL_NUM_HARTS
|
li a7, MCALL_NUM_HARTS
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
/* -2016: unsigned long sbi_query_memory(unsigned long id,
|
/* -2016: unsigned long sbi_query_memory(unsigned long id,
|
||||||
memory_block_info *p); */
|
memory_block_info *p); */
|
||||||
li a7, SBI_ECALL_QUERY_MEMORY
|
li a7, MCALL_QUERY_MEMORY
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
/* -2000: int sbi_console_putchar(uint8_t ch); */
|
/* -2000: int sbi_console_putchar(uint8_t ch); */
|
||||||
li a7, SBI_ECALL_CONSOLE_PUT
|
li a7, MCALL_CONSOLE_PUTCHAR
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
@ -80,13 +80,13 @@ sbi_page:
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
/* -1904: void sbi_shutdown(void); */
|
/* -1904: void sbi_shutdown(void); */
|
||||||
li a7, SBI_ECALL_SHUTDOWN
|
li a7, MCALL_SHUTDOWN
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
/* -1888: void sbi_set_timer(unsigned long long stime_value); */
|
/* -1888: void sbi_set_timer(unsigned long long stime_value); */
|
||||||
li a7, SBI_ECALL_SET_TIMER
|
li a7, MCALL_SET_TIMER
|
||||||
ecall
|
ecall
|
||||||
jr ra
|
jr ra
|
||||||
.align 4
|
.align 4
|
||||||
|
|
|
@ -31,42 +31,34 @@ void handle_supervisor_call(trapframe *tf) {
|
||||||
uintptr_t arg1 = tf->gpr[11]; /* a1 */
|
uintptr_t arg1 = tf->gpr[11]; /* a1 */
|
||||||
uintptr_t returnValue;
|
uintptr_t returnValue;
|
||||||
switch(call) {
|
switch(call) {
|
||||||
case SBI_ECALL_HART_ID:
|
case MCALL_HART_ID:
|
||||||
printk(BIOS_DEBUG, "Getting hart id...\n");
|
printk(BIOS_DEBUG, "Getting hart id...\n");
|
||||||
returnValue = read_csr(0xf14);//mhartid);
|
returnValue = read_csr(0xf14);//mhartid);
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_NUM_HARTS:
|
case MCALL_NUM_HARTS:
|
||||||
/* TODO: parse the hardware-supplied config string and
|
/* TODO: parse the hardware-supplied config string and
|
||||||
return the correct value */
|
return the correct value */
|
||||||
returnValue = 1;
|
returnValue = 1;
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_CONSOLE_PUT:
|
case MCALL_CONSOLE_PUTCHAR:
|
||||||
returnValue = mcall_console_putchar(arg0);
|
returnValue = mcall_console_putchar(arg0);
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_SEND_DEVICE_REQUEST:
|
case MCALL_SEND_IPI:
|
||||||
printk(BIOS_DEBUG, "Sending device request...\n");
|
|
||||||
returnValue = mcall_dev_req((sbi_device_message*) arg0);
|
|
||||||
break;
|
|
||||||
case SBI_ECALL_RECEIVE_DEVICE_RESPONSE:
|
|
||||||
printk(BIOS_DEBUG, "Getting device response...\n");
|
|
||||||
returnValue = mcall_dev_resp();
|
|
||||||
break;
|
|
||||||
case SBI_ECALL_SEND_IPI:
|
|
||||||
printk(BIOS_DEBUG, "Sending IPI...\n");
|
printk(BIOS_DEBUG, "Sending IPI...\n");
|
||||||
returnValue = mcall_send_ipi(arg0);
|
returnValue = mcall_send_ipi(arg0);
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_CLEAR_IPI:
|
case MCALL_CLEAR_IPI:
|
||||||
printk(BIOS_DEBUG, "Clearing IPI...\n");
|
printk(BIOS_DEBUG, "Clearing IPI...\n");
|
||||||
returnValue = mcall_clear_ipi();
|
returnValue = mcall_clear_ipi();
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_SHUTDOWN:
|
case MCALL_SHUTDOWN:
|
||||||
printk(BIOS_DEBUG, "Shutting down...\n");
|
printk(BIOS_DEBUG, "Shutting down...\n");
|
||||||
returnValue = mcall_shutdown();
|
returnValue = mcall_shutdown();
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_SET_TIMER:
|
case MCALL_SET_TIMER:
|
||||||
returnValue = mcall_set_timer(arg0);
|
returnValue = mcall_set_timer(arg0);
|
||||||
break;
|
break;
|
||||||
case SBI_ECALL_QUERY_MEMORY:
|
case MCALL_QUERY_MEMORY:
|
||||||
printk(BIOS_DEBUG, "Querying memory, CPU #%lld...\n", arg0);
|
printk(BIOS_DEBUG, "Querying memory, CPU #%lld...\n", arg0);
|
||||||
returnValue = mcall_query_memory(arg0, (memory_block_info*) arg1);
|
returnValue = mcall_query_memory(arg0, (memory_block_info*) arg1);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue