| 249 | } |
| 250 | |
| 251 | void |
| 252 | ssows_reset(struct ssows *ws) |
| 253 | { |
| 254 | uint64_t tag; |
| 255 | uint64_t pend_tag; |
| 256 | uint8_t pend_tt; |
| 257 | uint8_t tt; |
| 258 | |
| 259 | tag = ssovf_read64(ws->base + SSOW_VHWS_TAG); |
| 260 | pend_tag = ssovf_read64(ws->base + SSOW_VHWS_PENDTAG); |
| 261 | |
| 262 | if (pend_tag & (1ULL << 63)) { /* Tagswitch pending */ |
| 263 | pend_tt = (pend_tag >> 32) & 0x3; |
| 264 | if (pend_tt == SSO_SYNC_ORDERED || pend_tt == SSO_SYNC_ATOMIC) |
| 265 | ssows_desched(ws); |
| 266 | } else { |
| 267 | tt = (tag >> 32) & 0x3; |
| 268 | if (tt == SSO_SYNC_ORDERED || tt == SSO_SYNC_ATOMIC) |
| 269 | ssows_swtag_untag(ws); |
| 270 | } |
| 271 | } |
| 272 | |
| 273 | static __rte_always_inline uint16_t |
| 274 | __sso_event_tx_adapter_enqueue(void *port, struct rte_event ev[], |
no test coverage detected