ibmvnic: create send_query_ip_offload
authorLijun Pan <ljp@linux.ibm.com>
Mon, 28 Sep 2020 01:13:29 +0000 (20:13 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Sep 2020 23:06:08 +0000 (16:06 -0700)
Factor send_query_ip_offload out of handle_request_cap_rsp to
pair with handle_query_ip_offload_rsp.

Signed-off-by: Lijun Pan <ljp@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c

index b6a9b7e..7fba486 100644 (file)
@@ -3953,6 +3953,34 @@ static void send_query_cap(struct ibmvnic_adapter *adapter)
        ibmvnic_send_crq(adapter, &crq);
 }
 
+static void send_query_ip_offload(struct ibmvnic_adapter *adapter)
+{
+       int buf_sz = sizeof(struct ibmvnic_query_ip_offload_buffer);
+       struct device *dev = &adapter->vdev->dev;
+       union ibmvnic_crq crq;
+
+       adapter->ip_offload_tok =
+               dma_map_single(dev,
+                              &adapter->ip_offload_buf,
+                              buf_sz,
+                              DMA_FROM_DEVICE);
+
+       if (dma_mapping_error(dev, adapter->ip_offload_tok)) {
+               if (!firmware_has_feature(FW_FEATURE_CMO))
+                       dev_err(dev, "Couldn't map offload buffer\n");
+               return;
+       }
+
+       memset(&crq, 0, sizeof(crq));
+       crq.query_ip_offload.first = IBMVNIC_CRQ_CMD;
+       crq.query_ip_offload.cmd = QUERY_IP_OFFLOAD;
+       crq.query_ip_offload.len = cpu_to_be32(buf_sz);
+       crq.query_ip_offload.ioba =
+           cpu_to_be32(adapter->ip_offload_tok);
+
+       ibmvnic_send_crq(adapter, &crq);
+}
+
 static void handle_vpd_size_rsp(union ibmvnic_crq *crq,
                                struct ibmvnic_adapter *adapter)
 {
@@ -4276,30 +4304,8 @@ static void handle_request_cap_rsp(union ibmvnic_crq *crq,
 
        /* Done receiving requested capabilities, query IP offload support */
        if (atomic_read(&adapter->running_cap_crqs) == 0) {
-               union ibmvnic_crq newcrq;
-               int buf_sz = sizeof(struct ibmvnic_query_ip_offload_buffer);
-               struct ibmvnic_query_ip_offload_buffer *ip_offload_buf =
-                   &adapter->ip_offload_buf;
-
                adapter->wait_capability = false;
-               adapter->ip_offload_tok = dma_map_single(dev, ip_offload_buf,
-                                                        buf_sz,
-                                                        DMA_FROM_DEVICE);
-
-               if (dma_mapping_error(dev, adapter->ip_offload_tok)) {
-                       if (!firmware_has_feature(FW_FEATURE_CMO))
-                               dev_err(dev, "Couldn't map offload buffer\n");
-                       return;
-               }
-
-               memset(&newcrq, 0, sizeof(newcrq));
-               newcrq.query_ip_offload.first = IBMVNIC_CRQ_CMD;
-               newcrq.query_ip_offload.cmd = QUERY_IP_OFFLOAD;
-               newcrq.query_ip_offload.len = cpu_to_be32(buf_sz);
-               newcrq.query_ip_offload.ioba =
-                   cpu_to_be32(adapter->ip_offload_tok);
-
-               ibmvnic_send_crq(adapter, &newcrq);
+               send_query_ip_offload(adapter);
        }
 }