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: Lijun Pan <ljp@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
69980d021c
commit
16e811fe0f
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user