mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-12-17 12:31:37 +00:00
lib: sbi: Introduce hart protection abstraction
Currently, PMP and ePMP are the only hart protection mechanisms available in OpenSBI but new protection mechanisms (such as Smmpt) will be added in the near future. To allow multiple hart protection mechanisms, introduce hart protection abstraction and related APIs. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Link: https://lore.kernel.org/r/20251209135235.423391-3-apatel@ventanamicro.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
100
include/sbi/sbi_hart_protection.h
Normal file
100
include/sbi/sbi_hart_protection.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2025 Ventana Micro Systems Inc.
|
||||
*/
|
||||
|
||||
#ifndef __SBI_HART_PROTECTION_H__
|
||||
#define __SBI_HART_PROTECTION_H__
|
||||
|
||||
#include <sbi/sbi_types.h>
|
||||
#include <sbi/sbi_list.h>
|
||||
|
||||
struct sbi_scratch;
|
||||
|
||||
/** Representation of hart protection mechanism */
|
||||
struct sbi_hart_protection {
|
||||
/** List head */
|
||||
struct sbi_dlist head;
|
||||
|
||||
/** Name of the hart protection mechanism */
|
||||
char name[32];
|
||||
|
||||
/** Ratings of the hart protection mechanism (higher is better) */
|
||||
unsigned long rating;
|
||||
|
||||
/** Configure protection for current HART (Mandatory) */
|
||||
int (*configure)(struct sbi_scratch *scratch);
|
||||
|
||||
/** Unconfigure protection for current HART (Mandatory) */
|
||||
void (*unconfigure)(struct sbi_scratch *scratch);
|
||||
|
||||
/** Create temporary mapping to access address range on current HART (Optional) */
|
||||
int (*map_range)(struct sbi_scratch *scratch,
|
||||
unsigned long base, unsigned long size);
|
||||
|
||||
/** Destroy temporary mapping on current HART (Optional) */
|
||||
int (*unmap_range)(struct sbi_scratch *scratch,
|
||||
unsigned long base, unsigned long size);
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the best hart protection mechanism
|
||||
*
|
||||
* @return pointer to best hart protection mechanism
|
||||
*/
|
||||
struct sbi_hart_protection *sbi_hart_protection_best(void);
|
||||
|
||||
/**
|
||||
* Register a hart protection mechanism
|
||||
*
|
||||
* @param hprot pointer to hart protection mechanism
|
||||
*
|
||||
* @return 0 on success and negative error code on failure
|
||||
*/
|
||||
int sbi_hart_protection_register(struct sbi_hart_protection *hprot);
|
||||
|
||||
/**
|
||||
* Unregister a hart protection mechanism
|
||||
*
|
||||
* @param hprot pointer to hart protection mechanism
|
||||
*/
|
||||
void sbi_hart_protection_unregister(struct sbi_hart_protection *hprot);
|
||||
|
||||
/**
|
||||
* Configure protection for current HART
|
||||
*
|
||||
* @param scratch pointer to scratch space of current HART
|
||||
*
|
||||
* @return 0 on success and negative error code on failure
|
||||
*/
|
||||
int sbi_hart_protection_configure(struct sbi_scratch *scratch);
|
||||
|
||||
/**
|
||||
* Unconfigure protection for current HART
|
||||
*
|
||||
* @param scratch pointer to scratch space of current HART
|
||||
*/
|
||||
void sbi_hart_protection_unconfigure(struct sbi_scratch *scratch);
|
||||
|
||||
/**
|
||||
* Create temporary mapping to access address range on current HART
|
||||
*
|
||||
* @param base base address of the temporary mapping
|
||||
* @param size size of the temporary mapping
|
||||
*
|
||||
* @return 0 on success and negative error code on failure
|
||||
*/
|
||||
int sbi_hart_protection_map_range(unsigned long base, unsigned long size);
|
||||
|
||||
/**
|
||||
* Destroy temporary mapping to access address range on current HART
|
||||
*
|
||||
* @param base base address of the temporary mapping
|
||||
* @param size size of the temporary mapping
|
||||
*
|
||||
* @return 0 on success and negative error code on failure
|
||||
*/
|
||||
int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size);
|
||||
|
||||
#endif /* __SBI_HART_PROTECTION_H__ */
|
||||
Reference in New Issue
Block a user