net/sfc/base: handle manual and auto filter clashes in EF10
[dpdk.git] / drivers / net / sfc / base / efx_filter.c
index 36332a2..9949d05 100644 (file)
@@ -28,7 +28,7 @@ static        __checkReturn   efx_rc_t
 siena_filter_add(
        __in            efx_nic_t *enp,
        __inout         efx_filter_spec_t *spec,
-       __in            boolean_t may_replace);
+       __in            efx_filter_replacement_policy_t policy);
 
 static __checkReturn   efx_rc_t
 siena_filter_delete(
@@ -98,7 +98,8 @@ efx_filter_insert(
                goto fail3;
        }
 
-       return (efop->efo_add(enp, spec, B_FALSE));
+       return (efop->efo_add(enp, spec,
+           EFX_FILTER_REPLACEMENT_HIGHER_PRIORITY));
 
 fail3:
        EFSYS_PROBE(fail3);
@@ -1444,7 +1445,7 @@ static     __checkReturn  efx_rc_t
 siena_filter_add(
        __in            efx_nic_t *enp,
        __inout         efx_filter_spec_t *spec,
-       __in            boolean_t may_replace)
+       __in            efx_filter_replacement_policy_t policy)
 {
        efx_rc_t rc;
        siena_filter_spec_t sf_spec;
@@ -1485,9 +1486,17 @@ siena_filter_add(
        saved_sf_spec = &sftp->sft_spec[filter_idx];
 
        if (siena_filter_test_used(sftp, filter_idx)) {
-               if (may_replace == B_FALSE) {
+               /* All Siena filter are considered the same priority */
+               switch (policy) {
+               case EFX_FILTER_REPLACEMENT_NEVER:
+               case EFX_FILTER_REPLACEMENT_HIGHER_PRIORITY:
                        rc = EEXIST;
                        goto fail4;
+               case EFX_FILTER_REPLACEMENT_HIGHER_OR_EQUAL_PRIORITY:
+                       break;
+               default:
+                       EFSYS_ASSERT(0);
+                       break;
                }
        }
        siena_filter_set_used(sftp, filter_idx);