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:
Jonathan Neuschäfer 2017-01-16 00:31:34 +01:00 committed by Ronald G. Minnich
parent f676aa4afd
commit c5ebb1d005
5 changed files with 29 additions and 46 deletions

View File

@ -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;

View File

@ -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>

View File

@ -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;

View File

@ -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

View File

@ -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;