* Prime event queue to allow processed events to be reused. * * @param evq_prime Global address of the prime register * @param evq_hw_index Event queue index * @param evq_read_ptr Masked event queue read pointer */
| 22 | * @param evq_read_ptr Masked event queue read pointer |
| 23 | */ |
| 24 | static inline void |
| 25 | sfc_ef100_evq_prime(volatile void *evq_prime, unsigned int evq_hw_index, |
| 26 | unsigned int evq_read_ptr) |
| 27 | { |
| 28 | efx_dword_t dword; |
| 29 | |
| 30 | EFX_POPULATE_DWORD_2(dword, |
| 31 | ERF_GZ_EVQ_ID, evq_hw_index, |
| 32 | ERF_GZ_IDX, evq_read_ptr); |
| 33 | |
| 34 | /* |
| 35 | * EvQ prime on EF100 allows HW to reuse descriptors. So we |
| 36 | * should be sure that event descriptor reads are done. |
| 37 | * However, there is implicit data dependency here since we |
| 38 | * move past event if we have found out that the event has |
| 39 | * come (i.e. we read it) and we have processed it. |
| 40 | * So, no extra barriers are required here. |
| 41 | */ |
| 42 | rte_write32_relaxed(dword.ed_u32[0], evq_prime); |
| 43 | } |
| 44 | |
| 45 | static inline bool |
| 46 | sfc_ef100_ev_present(const efx_qword_t *ev, bool phase_bit) |
no test coverage detected