static const struct net_device_ops iavf_netdev_ops;
 struct workqueue_struct *iavf_wq;
 
+int iavf_status_to_errno(enum iavf_status status)
+{
+       switch (status) {
+       case IAVF_SUCCESS:
+               return 0;
+       case IAVF_ERR_PARAM:
+       case IAVF_ERR_MAC_TYPE:
+       case IAVF_ERR_INVALID_MAC_ADDR:
+       case IAVF_ERR_INVALID_LINK_SETTINGS:
+       case IAVF_ERR_INVALID_PD_ID:
+       case IAVF_ERR_INVALID_QP_ID:
+       case IAVF_ERR_INVALID_CQ_ID:
+       case IAVF_ERR_INVALID_CEQ_ID:
+       case IAVF_ERR_INVALID_AEQ_ID:
+       case IAVF_ERR_INVALID_SIZE:
+       case IAVF_ERR_INVALID_ARP_INDEX:
+       case IAVF_ERR_INVALID_FPM_FUNC_ID:
+       case IAVF_ERR_QP_INVALID_MSG_SIZE:
+       case IAVF_ERR_INVALID_FRAG_COUNT:
+       case IAVF_ERR_INVALID_ALIGNMENT:
+       case IAVF_ERR_INVALID_PUSH_PAGE_INDEX:
+       case IAVF_ERR_INVALID_IMM_DATA_SIZE:
+       case IAVF_ERR_INVALID_VF_ID:
+       case IAVF_ERR_INVALID_HMCFN_ID:
+       case IAVF_ERR_INVALID_PBLE_INDEX:
+       case IAVF_ERR_INVALID_SD_INDEX:
+       case IAVF_ERR_INVALID_PAGE_DESC_INDEX:
+       case IAVF_ERR_INVALID_SD_TYPE:
+       case IAVF_ERR_INVALID_HMC_OBJ_INDEX:
+       case IAVF_ERR_INVALID_HMC_OBJ_COUNT:
+       case IAVF_ERR_INVALID_SRQ_ARM_LIMIT:
+               return -EINVAL;
+       case IAVF_ERR_NVM:
+       case IAVF_ERR_NVM_CHECKSUM:
+       case IAVF_ERR_PHY:
+       case IAVF_ERR_CONFIG:
+       case IAVF_ERR_UNKNOWN_PHY:
+       case IAVF_ERR_LINK_SETUP:
+       case IAVF_ERR_ADAPTER_STOPPED:
+       case IAVF_ERR_MASTER_REQUESTS_PENDING:
+       case IAVF_ERR_AUTONEG_NOT_COMPLETE:
+       case IAVF_ERR_RESET_FAILED:
+       case IAVF_ERR_BAD_PTR:
+       case IAVF_ERR_SWFW_SYNC:
+       case IAVF_ERR_QP_TOOMANY_WRS_POSTED:
+       case IAVF_ERR_QUEUE_EMPTY:
+       case IAVF_ERR_FLUSHED_QUEUE:
+       case IAVF_ERR_OPCODE_MISMATCH:
+       case IAVF_ERR_CQP_COMPL_ERROR:
+       case IAVF_ERR_BACKING_PAGE_ERROR:
+       case IAVF_ERR_NO_PBLCHUNKS_AVAILABLE:
+       case IAVF_ERR_MEMCPY_FAILED:
+       case IAVF_ERR_SRQ_ENABLED:
+       case IAVF_ERR_ADMIN_QUEUE_ERROR:
+       case IAVF_ERR_ADMIN_QUEUE_FULL:
+       case IAVF_ERR_BAD_IWARP_CQE:
+       case IAVF_ERR_NVM_BLANK_MODE:
+       case IAVF_ERR_PE_DOORBELL_NOT_ENABLED:
+       case IAVF_ERR_DIAG_TEST_FAILED:
+       case IAVF_ERR_FIRMWARE_API_VERSION:
+       case IAVF_ERR_ADMIN_QUEUE_CRITICAL_ERROR:
+               return -EIO;
+       case IAVF_ERR_DEVICE_NOT_SUPPORTED:
+               return -ENODEV;
+       case IAVF_ERR_NO_AVAILABLE_VSI:
+       case IAVF_ERR_RING_FULL:
+               return -ENOSPC;
+       case IAVF_ERR_NO_MEMORY:
+               return -ENOMEM;
+       case IAVF_ERR_TIMEOUT:
+       case IAVF_ERR_ADMIN_QUEUE_TIMEOUT:
+               return -ETIMEDOUT;
+       case IAVF_ERR_NOT_IMPLEMENTED:
+       case IAVF_NOT_SUPPORTED:
+               return -EOPNOTSUPP;
+       case IAVF_ERR_ADMIN_QUEUE_NO_WORK:
+               return -EALREADY;
+       case IAVF_ERR_NOT_READY:
+               return -EBUSY;
+       case IAVF_ERR_BUF_TOO_SHORT:
+               return -EMSGSIZE;
+       }
+
+       return -EIO;
+}
+
+int virtchnl_status_to_errno(enum virtchnl_status_code v_status)
+{
+       switch (v_status) {
+       case VIRTCHNL_STATUS_SUCCESS:
+               return 0;
+       case VIRTCHNL_STATUS_ERR_PARAM:
+       case VIRTCHNL_STATUS_ERR_INVALID_VF_ID:
+               return -EINVAL;
+       case VIRTCHNL_STATUS_ERR_NO_MEMORY:
+               return -ENOMEM;
+       case VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH:
+       case VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR:
+       case VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR:
+               return -EIO;
+       case VIRTCHNL_STATUS_ERR_NOT_SUPPORTED:
+               return -EOPNOTSUPP;
+       }
+
+       return -EIO;
+}
+
 /**
  * iavf_pdev_to_adapter - go from pci_dev to adapter
  * @pdev: pci_dev pointer
        struct iavf_aqc_get_set_rss_key_data *rss_key =
                (struct iavf_aqc_get_set_rss_key_data *)adapter->rss_key;
        struct iavf_hw *hw = &adapter->hw;
-       int ret = 0;
+       enum iavf_status status;
 
        if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) {
                /* bail because we already have a command pending */
                return -EBUSY;
        }
 
-       ret = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key);
-       if (ret) {
+       status = iavf_aq_set_rss_key(hw, adapter->vsi.id, rss_key);
+       if (status) {
                dev_err(&adapter->pdev->dev, "Cannot set RSS key, err %s aq_err %s\n",
-                       iavf_stat_str(hw, ret),
+                       iavf_stat_str(hw, status),
                        iavf_aq_str(hw, hw->aq.asq_last_status));
-               return ret;
+               return iavf_status_to_errno(status);
 
        }
 
-       ret = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false,
-                                 adapter->rss_lut, adapter->rss_lut_size);
-       if (ret) {
+       status = iavf_aq_set_rss_lut(hw, adapter->vsi.id, false,
+                                    adapter->rss_lut, adapter->rss_lut_size);
+       if (status) {
                dev_err(&adapter->pdev->dev, "Cannot set RSS lut, err %s aq_err %s\n",
-                       iavf_stat_str(hw, ret),
+                       iavf_stat_str(hw, status),
                        iavf_aq_str(hw, hw->aq.asq_last_status));
+               return iavf_status_to_errno(status);
        }
 
-       return ret;
+       return 0;
 
 }
 
 {
        struct pci_dev *pdev = adapter->pdev;
        struct iavf_hw *hw = &adapter->hw;
-       int err;
+       enum iavf_status status;
+       int ret;
 
        WARN_ON(adapter->state != __IAVF_STARTUP);
 
        /* driver loaded, probe complete */
        adapter->flags &= ~IAVF_FLAG_PF_COMMS_FAILED;
        adapter->flags &= ~IAVF_FLAG_RESET_PENDING;
-       err = iavf_set_mac_type(hw);
-       if (err) {
-               dev_err(&pdev->dev, "Failed to set MAC type (%d)\n", err);
+       status = iavf_set_mac_type(hw);
+       if (status) {
+               dev_err(&pdev->dev, "Failed to set MAC type (%d)\n", status);
                goto err;
        }
 
-       err = iavf_check_reset_complete(hw);
-       if (err) {
+       ret = iavf_check_reset_complete(hw);
+       if (ret) {
                dev_info(&pdev->dev, "Device is still in reset (%d), retrying\n",
-                        err);
+                        ret);
                goto err;
        }
        hw->aq.num_arq_entries = IAVF_AQ_LEN;
        hw->aq.arq_buf_size = IAVF_MAX_AQ_BUF_SIZE;
        hw->aq.asq_buf_size = IAVF_MAX_AQ_BUF_SIZE;
 
-       err = iavf_init_adminq(hw);
-       if (err) {
-               dev_err(&pdev->dev, "Failed to init Admin Queue (%d)\n", err);
+       status = iavf_init_adminq(hw);
+       if (status) {
+               dev_err(&pdev->dev, "Failed to init Admin Queue (%d)\n",
+                       status);
                goto err;
        }
-       err = iavf_send_api_ver(adapter);
-       if (err) {
-               dev_err(&pdev->dev, "Unable to send to PF (%d)\n", err);
+       ret = iavf_send_api_ver(adapter);
+       if (ret) {
+               dev_err(&pdev->dev, "Unable to send to PF (%d)\n", ret);
                iavf_shutdown_adminq(hw);
                goto err;
        }
        /* aq msg sent, awaiting reply */
        err = iavf_verify_api_ver(adapter);
        if (err) {
-               if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK)
+               if (err == -EALREADY)
                        err = iavf_send_api_ver(adapter);
                else
                        dev_err(&pdev->dev, "Unsupported PF API version %d.%d, expected %d.%d\n",
                }
        }
        err = iavf_get_vf_config(adapter);
-       if (err == IAVF_ERR_ADMIN_QUEUE_NO_WORK) {
+       if (err == -EALREADY) {
                err = iavf_send_vf_config_msg(adapter);
                goto err_alloc;
-       } else if (err == IAVF_ERR_PARAM) {
-               /* We only get ERR_PARAM if the device is in a very bad
+       } else if (err == -EINVAL) {
+               /* We only get -EINVAL if the device is in a very bad
                 * state or if we've been disabled for previous bad
                 * behavior. Either way, we're done now.
                 */
        struct iavf_hw *hw = &adapter->hw;
        struct iavf_mac_filter *f, *ftmp;
        struct iavf_cloud_filter *cf;
+       enum iavf_status status;
        u32 reg_val;
        int i = 0, err;
        bool running;
        /* kill and reinit the admin queue */
        iavf_shutdown_adminq(hw);
        adapter->current_op = VIRTCHNL_OP_UNKNOWN;
-       err = iavf_init_adminq(hw);
-       if (err)
+       status = iavf_init_adminq(hw);
+       if (status) {
                dev_info(&adapter->pdev->dev, "Failed to init adminq: %d\n",
-                        err);
+                        status);
+               goto reset_err;
+       }
        adapter->aq_required = 0;
 
        if (adapter->flags & IAVF_FLAG_REINIT_ITR_NEEDED) {
 
                            enum virtchnl_ops op, u8 *msg, u16 len)
 {
        struct iavf_hw *hw = &adapter->hw;
-       enum iavf_status err;
+       enum iavf_status status;
 
        if (adapter->flags & IAVF_FLAG_PF_COMMS_FAILED)
                return 0; /* nothing to see here, move along */
 
-       err = iavf_aq_send_msg_to_pf(hw, op, 0, msg, len, NULL);
-       if (err)
-               dev_dbg(&adapter->pdev->dev, "Unable to send opcode %d to PF, err %s, aq_err %s\n",
-                       op, iavf_stat_str(hw, err),
+       status = iavf_aq_send_msg_to_pf(hw, op, 0, msg, len, NULL);
+       if (status)
+               dev_dbg(&adapter->pdev->dev, "Unable to send opcode %d to PF, status %s, aq_err %s\n",
+                       op, iavf_stat_str(hw, status),
                        iavf_aq_str(hw, hw->aq.asq_last_status));
-       return err;
+       return iavf_status_to_errno(status);
 }
 
 /**
  *
  * Request that the PF reset this VF. No response is expected.
  **/
-void iavf_request_reset(struct iavf_adapter *adapter)
+int iavf_request_reset(struct iavf_adapter *adapter)
 {
+       int err;
        /* Don't check CURRENT_OP - this is always higher priority */
-       iavf_send_pf_msg(adapter, VIRTCHNL_OP_RESET_VF, NULL, 0);
+       err = iavf_send_pf_msg(adapter, VIRTCHNL_OP_RESET_VF, NULL, 0);
        adapter->current_op = VIRTCHNL_OP_UNKNOWN;
+       return err;
 }
 
 /**