123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- use sbi_spec::binary::SbiRet;
- pub trait Pmu {
-
-
-
- fn num_counters(&self) -> usize;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_get_info(&self, counter_idx: usize) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_config_matching(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- config_flags: usize,
- event_idx: usize,
- event_data: u64,
- ) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_start(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- start_flags: usize,
- initial_value: u64,
- ) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_stop(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- stop_flags: usize,
- ) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_fw_read(&self, counter_idx: usize) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
- fn counter_fw_read_hi(&self, counter_idx: usize) -> SbiRet {
- match () {
- #[cfg(not(target_pointer_width = "32"))]
- () => {
- let _ = counter_idx;
- SbiRet::success(0)
- }
- #[cfg(target_pointer_width = "32")]
- () => {
- let _ = counter_idx;
- SbiRet::not_supported()
- }
- }
- }
- }
- impl<T: Pmu> Pmu for &T {
- #[inline]
- fn num_counters(&self) -> usize {
- T::num_counters(self)
- }
- #[inline]
- fn counter_get_info(&self, counter_idx: usize) -> SbiRet {
- T::counter_get_info(self, counter_idx)
- }
- #[inline]
- fn counter_config_matching(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- config_flags: usize,
- event_idx: usize,
- event_data: u64,
- ) -> SbiRet {
- T::counter_config_matching(
- self,
- counter_idx_base,
- counter_idx_mask,
- config_flags,
- event_idx,
- event_data,
- )
- }
- #[inline]
- fn counter_start(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- start_flags: usize,
- initial_value: u64,
- ) -> SbiRet {
- T::counter_start(
- self,
- counter_idx_base,
- counter_idx_mask,
- start_flags,
- initial_value,
- )
- }
- #[inline]
- fn counter_stop(
- &self,
- counter_idx_base: usize,
- counter_idx_mask: usize,
- stop_flags: usize,
- ) -> SbiRet {
- T::counter_stop(self, counter_idx_base, counter_idx_mask, stop_flags)
- }
- #[inline]
- fn counter_fw_read(&self, counter_idx: usize) -> SbiRet {
- T::counter_fw_read(self, counter_idx)
- }
- #[inline]
- fn counter_fw_read_hi(&self, counter_idx: usize) -> SbiRet {
- T::counter_fw_read_hi(self, counter_idx)
- }
- }
|