forked from Minki/linux
crypto: qat - extract send and wait from adf_vf2pf_request_version()
In the function adf_vf2pf_request_version(), the VF sends a request to the PF and waits for a response before parsing and handling it. Since this pattern will be used by other requests, define a new function, adf_send_vf2pf_req(), that only deals with sending a VF2PF request and waiting for a response. Signed-off-by: Marco Chiappero <marco.chiappero@intel.com> Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
7a73c4622a
commit
aa3c68634d
@ -181,6 +181,42 @@ int adf_send_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 msg)
|
|||||||
return adf_iov_putmsg(accel_dev, msg, 0);
|
return adf_iov_putmsg(accel_dev, msg, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adf_send_vf2pf_req() - send VF2PF request message
|
||||||
|
* @accel_dev: Pointer to acceleration device.
|
||||||
|
* @msg: Request message to send
|
||||||
|
*
|
||||||
|
* This function sends a message that requires a response from the VF to the PF
|
||||||
|
* and waits for a reply.
|
||||||
|
*
|
||||||
|
* Return: 0 on success, error code otherwise.
|
||||||
|
*/
|
||||||
|
static int adf_send_vf2pf_req(struct adf_accel_dev *accel_dev, u32 msg)
|
||||||
|
{
|
||||||
|
unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
reinit_completion(&accel_dev->vf.iov_msg_completion);
|
||||||
|
|
||||||
|
/* Send request from VF to PF */
|
||||||
|
ret = adf_send_vf2pf_msg(accel_dev, msg);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(&GET_DEV(accel_dev),
|
||||||
|
"Failed to send request msg to PF\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait for response */
|
||||||
|
if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
|
||||||
|
timeout)) {
|
||||||
|
dev_err(&GET_DEV(accel_dev),
|
||||||
|
"PFVF request/response message timeout expired\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
|
void adf_vf2pf_req_hndl(struct adf_accel_vf_info *vf_info)
|
||||||
{
|
{
|
||||||
struct adf_accel_dev *accel_dev = vf_info->accel_dev;
|
struct adf_accel_dev *accel_dev = vf_info->accel_dev;
|
||||||
@ -306,7 +342,6 @@ void adf_pf2vf_notify_restarting(struct adf_accel_dev *accel_dev)
|
|||||||
|
|
||||||
static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
|
static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
|
||||||
{
|
{
|
||||||
unsigned long timeout = msecs_to_jiffies(ADF_PFVF_MSG_RESP_TIMEOUT);
|
|
||||||
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
||||||
u32 msg = 0;
|
u32 msg = 0;
|
||||||
int ret;
|
int ret;
|
||||||
@ -316,24 +351,13 @@ static int adf_vf2pf_request_version(struct adf_accel_dev *accel_dev)
|
|||||||
msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
|
msg |= ADF_PFVF_COMPAT_THIS_VERSION << ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
|
||||||
BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
|
BUILD_BUG_ON(ADF_PFVF_COMPAT_THIS_VERSION > 255);
|
||||||
|
|
||||||
reinit_completion(&accel_dev->vf.iov_msg_completion);
|
ret = adf_send_vf2pf_req(accel_dev, msg);
|
||||||
|
|
||||||
/* Send request from VF to PF */
|
|
||||||
ret = adf_send_vf2pf_msg(accel_dev, msg);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&GET_DEV(accel_dev),
|
dev_err(&GET_DEV(accel_dev),
|
||||||
"Failed to send Compatibility Version Request.\n");
|
"Failed to send Compatibility Version Request.\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for response */
|
|
||||||
if (!wait_for_completion_timeout(&accel_dev->vf.iov_msg_completion,
|
|
||||||
timeout)) {
|
|
||||||
dev_err(&GET_DEV(accel_dev),
|
|
||||||
"IOV request/response message timeout expired\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Response from PF received, check compatibility */
|
/* Response from PF received, check compatibility */
|
||||||
switch (accel_dev->vf.compatible) {
|
switch (accel_dev->vf.compatible) {
|
||||||
case ADF_PF2VF_VF_COMPATIBLE:
|
case ADF_PF2VF_VF_COMPATIBLE:
|
||||||
|
Loading…
Reference in New Issue
Block a user