- /*
- * FIXME: add error checking to make sure this a batched event.
- * This could also be an aborted scatter, see Bug36629.
- */
- if (desc_count > 1) {
+ /* Calculate the index of the last descriptor consumed */
+ last_used_id = (eersp->eers_rx_read_ptr - 1) & eersp->eers_rx_mask;
+
+ if (eep->ee_flags & EFX_EVQ_FLAGS_NO_CONT_EV) {
+ if (desc_count > 1)
+ EFX_EV_QSTAT_INCR(eep, EV_RX_BATCH);
+
+ /* Always read the length from the prefix in NO_CONT_EV mode. */
+ flags |= EFX_PKT_PREFIX_LEN;
+
+ /*
+ * Check for an aborted scatter, signalled by the ABORT bit in
+ * NO_CONT_EV mode. The ABORT bit was not used before NO_CONT_EV
+ * mode was added as it was broken in Huntington silicon.
+ */
+ if (EFX_QWORD_FIELD(*eqp, ESF_EZ_RX_ABORT) != 0) {
+ flags |= EFX_DISCARD;
+ goto deliver;
+ }
+ } else if (desc_count > 1) {
+ /*
+ * FIXME: add error checking to make sure this a batched event.
+ * This could also be an aborted scatter, see Bug36629.
+ */