aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBo Gan <ganboing@gmail.com>2025-12-18 02:42:39 -0800
committerAnup Patel <anuppate@hu-anuppate-blr.qualcomm.com>2025-12-21 20:33:20 +0530
commited1deab09ef6284d018fbf37ab397dcd4b9f82b8 (patch)
tree1238387acc46f172f51c69493d75fe77c9490854 /include
parent2c1bf5bb73194ca035bcd5ab3fbc6653de3162e1 (diff)
downloadopensbi-ed1deab09ef6284d018fbf37ab397dcd4b9f82b8.zip
opensbi-ed1deab09ef6284d018fbf37ab397dcd4b9f82b8.tar.gz
opensbi-ed1deab09ef6284d018fbf37ab397dcd4b9f82b8.tar.bz2
lib: sbi_domain: make is_region_subset public
The helper function is renamed as sbi_domain_memregion_is_subset, and made public in header file. Also add a convenient helper of sbi_domain_for_each_memregion_idx. Signed-off-by: Bo Gan <ganboing@gmail.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20251218104243.562667-4-ganboing@gmail.com Signed-off-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'include')
-rw-r--r--include/sbi/sbi_domain.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/sbi/sbi_domain.h b/include/sbi/sbi_domain.h
index 3360e09..c8a6da9 100644
--- a/include/sbi/sbi_domain.h
+++ b/include/sbi/sbi_domain.h
@@ -164,6 +164,25 @@ struct sbi_domain_memregion {
unsigned long flags;
};
+/** Check if regionA is sub-region of regionB */
+static inline bool sbi_domain_memregion_is_subset(
+ const struct sbi_domain_memregion *regA,
+ const struct sbi_domain_memregion *regB)
+{
+ ulong regA_start = regA->base;
+ ulong regA_end = regA->base + (BIT(regA->order) - 1);
+ ulong regB_start = regB->base;
+ ulong regB_end = regB->base + (BIT(regB->order) - 1);
+
+ if ((regB_start <= regA_start) &&
+ (regA_start < regB_end) &&
+ (regB_start < regA_end) &&
+ (regA_end <= regB_end))
+ return true;
+
+ return false;
+}
+
/** Representation of OpenSBI domain */
struct sbi_domain {
/** Node in linked list of domains */
@@ -222,6 +241,9 @@ extern struct sbi_dlist domain_list;
#define sbi_domain_for_each_memregion(__d, __r) \
for ((__r) = (__d)->regions; (__r)->order; (__r)++)
+#define sbi_domain_for_each_memregion_idx(__d, __r, __i) \
+ for ((__r) = (__d)->regions, (__i) = 0; (__r)->order; (__r)++, (__i)++)
+
/**
* Check whether given HART is assigned to specified domain
* @param dom pointer to domain