diff options
| author | Bo Gan <ganboing@gmail.com> | 2025-12-18 02:42:39 -0800 |
|---|---|---|
| committer | Anup Patel <anuppate@hu-anuppate-blr.qualcomm.com> | 2025-12-21 20:33:20 +0530 |
| commit | ed1deab09ef6284d018fbf37ab397dcd4b9f82b8 (patch) | |
| tree | 1238387acc46f172f51c69493d75fe77c9490854 /include | |
| parent | 2c1bf5bb73194ca035bcd5ab3fbc6653de3162e1 (diff) | |
| download | opensbi-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.h | 22 |
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 |
