Files
opensbi/lib/sbi/sbi_ecall_dbtr.c
Anup Patel d4f5a16598 include: sbi: Change SBI spec version to 3.0
Now that SBI v3.0 specification is frozen, change runtime SBI version
implemented by OpenSBI to v3.0. Also, mark extensions defined by the
SBI v3.0 specification as non-experimental.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Clément Léger <cleger@rivosinc.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Link: https://lore.kernel.org/r/20250516122844.113423-1-apatel@ventanamicro.com
Signed-off-by: Anup Patel <anup@brainfault.org>
2025-05-20 13:47:34 +05:30

75 lines
1.9 KiB
C

/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2023 Ventana Micro Systems Inc.
*
* Author(s):
* Himanshu Chauhan <hchauhan@ventanamicro.com>
*/
#include <sbi/sbi_ecall.h>
#include <sbi/sbi_ecall_interface.h>
#include <sbi/sbi_error.h>
#include <sbi/sbi_trap.h>
#include <sbi/sbi_domain.h>
#include <sbi/sbi_dbtr.h>
static int sbi_ecall_dbtr_handler(unsigned long extid, unsigned long funcid,
struct sbi_trap_regs *regs,
struct sbi_ecall_return *out)
{
unsigned long smode = (csr_read(CSR_MSTATUS) & MSTATUS_MPP) >>
MSTATUS_MPP_SHIFT;
int ret = 0;
switch (funcid) {
case SBI_EXT_DBTR_NUM_TRIGGERS:
ret = sbi_dbtr_num_trig(regs->a0, &out->value);
break;
case SBI_EXT_DBTR_SETUP_SHMEM:
ret = sbi_dbtr_setup_shmem(sbi_domain_thishart_ptr(), smode,
regs->a0, regs->a1);
break;
case SBI_EXT_DBTR_TRIGGER_READ:
ret = sbi_dbtr_read_trig(smode, regs->a0, regs->a1);
break;
case SBI_EXT_DBTR_TRIGGER_INSTALL:
ret = sbi_dbtr_install_trig(smode, regs->a0, &out->value);
break;
case SBI_EXT_DBTR_TRIGGER_UNINSTALL:
ret = sbi_dbtr_uninstall_trig(regs->a0, regs->a1);
break;
case SBI_EXT_DBTR_TRIGGER_ENABLE:
ret = sbi_dbtr_enable_trig(regs->a0, regs->a1);
break;
case SBI_EXT_DBTR_TRIGGER_UPDATE:
ret = sbi_dbtr_update_trig(smode, regs->a0, regs->a1);
break;
case SBI_EXT_DBTR_TRIGGER_DISABLE:
ret = sbi_dbtr_disable_trig(regs->a0, regs->a1);
break;
default:
ret = SBI_ENOTSUPP;
};
return ret;
}
struct sbi_ecall_extension ecall_dbtr;
static int sbi_ecall_dbtr_register_extensions(void)
{
if (sbi_dbtr_get_total_triggers() == 0)
return 0;
return sbi_ecall_register_extension(&ecall_dbtr);
}
struct sbi_ecall_extension ecall_dbtr = {
.name = "dbtr",
.extid_start = SBI_EXT_DBTR,
.extid_end = SBI_EXT_DBTR,
.handle = sbi_ecall_dbtr_handler,
.register_extensions = sbi_ecall_dbtr_register_extensions,
};