mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
lib: sbi_scratch: Add sbi_hart_count() and for_each_hartindex()
There is currently no helper for iterating through the harts in a system, and code must choose between sbi_scratch_last_hartindex() and sbi_platform_hart_count() for the loop condition. sbi_scratch_last_hartindex() has unusual semantics, leading to the likelihood of off-by-one errors, and sbi_platform_hart_count() is provided by the platform and so may not be properly bounded. Add a new helper which definitively reports the number of harts managed by this OpenSBI instance, i.e. the number of valid hart indexes, and a convenient iterator macro. Signed-off-by: Samuel Holland <samuel.holland@sifive.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:

committed by
Anup Patel

parent
6b97950cf5
commit
757f7acafd
@@ -210,15 +210,21 @@ do { \
|
||||
#define current_hartindex() \
|
||||
(sbi_scratch_thishart_ptr()->hartindex)
|
||||
|
||||
/** Last HART index having a sbi_scratch pointer */
|
||||
extern u32 last_hartindex_having_scratch;
|
||||
/** Number of harts managed by this OpenSBI instance */
|
||||
extern u32 sbi_scratch_hart_count;
|
||||
|
||||
/** Get the number of harts managed by this OpenSBI instance */
|
||||
#define sbi_hart_count() sbi_scratch_hart_count
|
||||
|
||||
/** Iterate over the harts managed by this OpenSBI instance */
|
||||
#define sbi_for_each_hartindex(__var) \
|
||||
for (u32 __var = 0; __var < sbi_hart_count(); ++__var)
|
||||
|
||||
/** Get last HART index having a sbi_scratch pointer */
|
||||
#define sbi_scratch_last_hartindex() last_hartindex_having_scratch
|
||||
#define sbi_scratch_last_hartindex() (sbi_hart_count() - 1)
|
||||
|
||||
/** Check whether a particular HART index is valid or not */
|
||||
#define sbi_hartindex_valid(__hartindex) \
|
||||
(((__hartindex) <= sbi_scratch_last_hartindex()) ? true : false)
|
||||
#define sbi_hartindex_valid(__hartindex) ((__hartindex) < sbi_hart_count())
|
||||
|
||||
/** HART index to HART id table */
|
||||
extern u32 hartindex_to_hartid_table[];
|
||||
|
Reference in New Issue
Block a user