if (ecmd->use_adaptive_rx_coalesce      ||
                    ecmd->rx_coalesce_usecs_low         ||
                    ecmd->rx_coalesce_usecs_high)
-                       return -EOPNOTSUPP;
+                       return -EINVAL;
 
                intr = enic_legacy_io_intr();
                vnic_intr_coalescing_timer_set(&enic->intr[intr],
                if (ecmd->use_adaptive_rx_coalesce      ||
                    ecmd->rx_coalesce_usecs_low         ||
                    ecmd->rx_coalesce_usecs_high)
-                       return -EOPNOTSUPP;
+                       return -EINVAL;
 
                vnic_intr_coalescing_timer_set(&enic->intr[0],
                        tx_coalesce_usecs);
                break;
        case VNIC_DEV_INTR_MODE_MSIX:
+               if (ecmd->rx_coalesce_usecs_high &&
+                   (rx_coalesce_usecs_high <
+                    rx_coalesce_usecs_low + ENIC_AIC_LARGE_PKT_DIFF))
+                               return -EINVAL;
+
                for (i = 0; i < enic->wq_count; i++) {
                        intr = enic_msix_wq_intr(enic, i);
                        vnic_intr_coalescing_timer_set(&enic->intr[intr],
                                tx_coalesce_usecs);
                }
 
-               if (rxcoal->use_adaptive_rx_coalesce) {
-                       if (!ecmd->use_adaptive_rx_coalesce) {
-                               rxcoal->use_adaptive_rx_coalesce = 0;
-                               enic_intr_coal_set_rx(enic, rx_coalesce_usecs);
-                       }
-               } else {
-                       if (ecmd->use_adaptive_rx_coalesce)
-                               rxcoal->use_adaptive_rx_coalesce = 1;
-                       else
-                               enic_intr_coal_set_rx(enic, rx_coalesce_usecs);
-               }
+               rxcoal->use_adaptive_rx_coalesce =
+                                       !!ecmd->use_adaptive_rx_coalesce;
+               if (!rxcoal->use_adaptive_rx_coalesce)
+                       enic_intr_coal_set_rx(enic, rx_coalesce_usecs);
 
                if (ecmd->rx_coalesce_usecs_high) {
-                       if (rx_coalesce_usecs_high <
-                           (rx_coalesce_usecs_low + ENIC_AIC_LARGE_PKT_DIFF))
-                               return -EINVAL;
                        rxcoal->range_end = rx_coalesce_usecs_high;
                        rxcoal->small_pkt_range_start = rx_coalesce_usecs_low;
                        rxcoal->large_pkt_range_start = rx_coalesce_usecs_low +