Commit 16e811fe authored by Lijun Pan's avatar Lijun Pan Committed by David S. Miller

ibmvnic: create send_query_ip_offload

Factor send_query_ip_offload out of handle_request_cap_rsp to
pair with handle_query_ip_offload_rsp.
Signed-off-by: default avatarLijun Pan <ljp@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 69980d02
...@@ -3953,6 +3953,34 @@ static void send_query_cap(struct ibmvnic_adapter *adapter) ...@@ -3953,6 +3953,34 @@ static void send_query_cap(struct ibmvnic_adapter *adapter)
ibmvnic_send_crq(adapter, &crq); 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, static void handle_vpd_size_rsp(union ibmvnic_crq *crq,
struct ibmvnic_adapter *adapter) struct ibmvnic_adapter *adapter)
{ {
...@@ -4276,30 +4304,8 @@ static void handle_request_cap_rsp(union ibmvnic_crq *crq, ...@@ -4276,30 +4304,8 @@ static void handle_request_cap_rsp(union ibmvnic_crq *crq,
/* Done receiving requested capabilities, query IP offload support */ /* Done receiving requested capabilities, query IP offload support */
if (atomic_read(&adapter->running_cap_crqs) == 0) { 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->wait_capability = false;
adapter->ip_offload_tok = dma_map_single(dev, ip_offload_buf, send_query_ip_offload(adapter);
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);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment