123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- //! Chapter 11. Performance Monitoring Unit Extension (EID #0x504D55 "PMU").
- /// Extension ID for Performance Monitoring Unit extension.
- pub const EID_PMU: usize = crate::eid_from_str("PMU") as _;
- pub use fid::*;
- /// Declared in §11.11.
- mod fid {
- /// Function ID to get the number of counters, both hardware and firmware.
- ///
- /// Declared in §11.5.
- pub const NUM_COUNTERS: usize = 0;
- /// Function ID to get details about the specified counter.
- ///
- /// Declared in §11.6.
- pub const COUNTER_GET_INFO: usize = 1;
- /// Function ID to find and configure a counter from a set of counters.
- ///
- /// Declared in §11.7.
- pub const COUNTER_CONFIG_MATCHING: usize = 2;
- /// Function ID to start or enable a set of counters on the calling hart with the specified initial value.
- ///
- /// Declared in §11.8.
- pub const COUNTER_START: usize = 3;
- /// Function ID to stop or disable a set of counters on the calling hart.
- ///
- /// Declared in §11.9.
- pub const COUNTER_STOP: usize = 4;
- /// Function ID to provide the current value of a firmware counter.
- ///
- /// Declared in §11.10.
- pub const COUNTER_FW_READ: usize = 5;
- /// Function ID to provide the upper 32 bits of the current firmware counter value.
- ///
- /// Declared in §11.11.
- pub const COUNTER_FW_READ_HI: usize = 6;
- /// Function ID to set and enable the PMU snapshot shared memory.
- ///
- /// Declared in §11.12.
- pub const SNAPSHOT_SET_SHMEM: usize = 7;
- }
- /// PMU Event Types.
- ///
- /// Declared in §11.
- pub mod event_type {
- /// Type for all hardware general events.
- ///
- /// Declared in §11.1.
- pub const HARDWARE_GENERAL: usize = 0;
- /// Type for all hardware cache events.
- ///
- /// Declared in §11.2.
- pub const HARDWARE_CACHE: usize = 1;
- /// Type for all hardware raw events.
- ///
- /// Declared in §11.3.
- pub const HARDWARE_RAW: usize = 2;
- /// Type for for all firmware events.
- ///
- /// Declared in §11.4.
- pub const FIRMWARE: usize = 15;
- }
- /// Hardware General Event Codes.
- ///
- /// Declared in §11.1.
- pub mod hardware_event {
- /// Unused event because event_idx cannot be zero
- pub const NO_EVENT: usize = 0;
- /// Event for each CPU cycle
- pub const CPU_CYCLES: usize = 1;
- /// Event for each completed instruction
- pub const INSTRUCTIONS: usize = 2;
- /// Event for cache hit
- pub const CACHE_REFERENCES: usize = 3;
- /// Event for cache miss
- pub const CACHE_MISSES: usize = 4;
- /// Event for a branch instruction
- pub const BRANCH_INSTRUCTIONS: usize = 5;
- /// Event for a branch misprediction
- pub const BRANCH_MISSES: usize = 6;
- /// Event for each BUS cycle
- pub const BUS_CYCLES: usize = 7;
- /// Event for a stalled cycle in microarchitecture frontend
- pub const STALLED_CYCLES_FRONTEND: usize = 8;
- /// Event for a stalled cycle in microarchitecture backend
- pub const STALLED_CYCLES_BACKEND: usize = 9;
- /// Event for each reference CPU cycle
- pub const REF_CPU_CYCLES: usize = 10;
- }
- /// Hardware Cache Event ID.
- ///
- /// Declared in §11.2.
- pub mod cache_event {
- /// Level 1 data cache event.
- pub const L1D: usize = 0;
- /// Level 1 instruction cache event.
- pub const L1I: usize = 1;
- /// Last level cache event.
- pub const LL: usize = 2;
- /// Data TLB event.
- pub const DTLB: usize = 3;
- /// Instruction TLB event.
- pub const ITLB: usize = 4;
- /// Branch predictor unit event.
- pub const BPU: usize = 5;
- /// NUMA node cache event.
- pub const NODE: usize = 6;
- }
- /// Hardware Cache Operation ID.
- ///
- /// Declared in §11.2.
- pub mod cache_operation {
- /// Read cache line.
- pub const READ: usize = 0;
- /// Write cache line.
- pub const WRITE: usize = 1;
- /// Prefetch cache line.
- pub const PREFETCH: usize = 2;
- }
- /// Hardware Cache Operation Result ID.
- ///
- /// Declared in §11.2.
- pub mod cache_result {
- /// Cache access.
- pub const ACCESS: usize = 0;
- /// Cache miss.
- pub const MISS: usize = 1;
- }
- /// Firmware Event Codes.
- ///
- /// Declared in §11.4.
- pub mod firmware_event {
- /// Misaligned load trap event.
- pub const MISALIGNED_LOAD: usize = 0;
- /// Misaligned store trap event.
- pub const MISALIGNED_STORE: usize = 1;
- /// Load access trap event.
- pub const ACCESS_LOAD: usize = 2;
- /// Store access trap event.
- pub const ACCESS_STORE: usize = 3;
- /// Illegal instruction trap event.
- pub const ILLEGAL_INSN: usize = 4;
- /// Set timer event.
- pub const SET_TIMER: usize = 5;
- /// Sent IPI to other HART event.
- pub const IPI_SENT: usize = 6;
- /// Received IPI from other HART event.
- pub const IPI_RECEIVED: usize = 7;
- /// Sent FENCE.I request to other HART event.
- pub const FENCE_I_SENT: usize = 8;
- /// Received FENCE.I request from other HART event.
- pub const FENCE_I_RECEIVED: usize = 9;
- /// Sent SFENCE.VMA request to other HART event.
- pub const SFENCE_VMA_SENT: usize = 10;
- /// Received SFENCE.VMA request from other HART event.
- pub const SFENCE_VMA_RECEIVED: usize = 11;
- /// Sent SFENCE.VMA with ASID request to other HART event.
- pub const SFENCE_VMA_ASID_SENT: usize = 12;
- /// Received SFENCE.VMA with ASID request from other HART event.
- pub const SFENCE_VMA_ASID_RECEIVED: usize = 13;
- /// Sent HFENCE.GVMA request to other HART event.
- pub const HFENCE_GVMA_SENT: usize = 14;
- /// Received HFENCE.GVMA request from other HART event.
- pub const HFENCE_GVMA_RECEIVED: usize = 15;
- /// Sent HFENCE.GVMA with VMID request to other HART event.
- pub const HFENCE_GVMA_VMID_SENT: usize = 16;
- /// Received HFENCE.GVMA with VMID request from other HART event.
- pub const HFENCE_GVMA_VMID_RECEIVED: usize = 17;
- /// Sent HFENCE.VVMA request to other HART event.
- pub const HFENCE_VVMA_SENT: usize = 18;
- /// Received HFENCE.VVMA request from other HART event.
- pub const HFENCE_VVMA_RECEIVED: usize = 19;
- /// Sent HFENCE.VVMA with ASID request to other HART event.
- pub const HFENCE_VVMA_ASID_SENT: usize = 20;
- /// Received HFENCE.VVMA with ASID request from other HART event.
- pub const HFENCE_VVMA_ASID_RECEIVED: usize = 21;
- /// RISC-V platform specific firmware events.
- ///
- /// The `event_data` configuration (or parameter) contains the event encoding.
- pub const PLATFORM: usize = 65535;
- }
|