1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 #include <linux/device.h>
5 #include "adf_accel_devices.h"
6 #include "adf_common_drv.h"
7 #include "adf_pf2vf_msg.h"
8 #include "adf_cfg.h"
9
10 #define ADF_VF2PF_RING_TO_SVC_VERSION 1
11 #define ADF_VF2PF_RING_TO_SVC_LENGTH 2
12
13 int
14 adf_pf_ring_to_svc_msg_provider(struct adf_accel_dev *accel_dev,
15 u8 **buffer,
16 u8 *length,
17 u8 *block_version,
18 u8 compatibility,
19 u8 byte_num)
20 {
21 static u8 data[ADF_VF2PF_RING_TO_SVC_LENGTH] = { 0 };
22 struct adf_hw_device_data *hw_data = GET_HW_DATA(accel_dev);
23 u16 ring_to_svc_map = hw_data->ring_to_svc_map;
24 u16 byte = 0;
25
26 for (byte = 0; byte < ADF_VF2PF_RING_TO_SVC_LENGTH; byte++) {
27 data[byte] = (ring_to_svc_map >> (byte * ADF_PFVF_DATA_SHIFT)) &
28 ADF_PFVF_DATA_MASK;
29 }
30
31 *length = ADF_VF2PF_RING_TO_SVC_LENGTH;
32 *block_version = ADF_VF2PF_RING_TO_SVC_VERSION;
33 *buffer = data;
34
35 return 0;
36 }
37
38 int
39 adf_pf_vf_ring_to_svc_init(struct adf_accel_dev *accel_dev)
40 {
41 u8 data[ADF_VF2PF_RING_TO_SVC_LENGTH] = { 0 };
42 u8 len = ADF_VF2PF_RING_TO_SVC_LENGTH;
43 u8 version = ADF_VF2PF_RING_TO_SVC_VERSION;
44 u16 ring_to_svc_map = 0;
45 u16 byte = 0;
46
47 if (!accel_dev->is_vf) {
48 /* on the pf */
49 if (!adf_iov_is_block_provider_registered(
50 ADF_VF2PF_BLOCK_MSG_GET_RING_TO_SVC_REQ))
51 adf_iov_block_provider_register(
52 ADF_VF2PF_BLOCK_MSG_GET_RING_TO_SVC_REQ,
53 adf_pf_ring_to_svc_msg_provider);
54 } else if (accel_dev->u1.vf.pf_version >=
55 ADF_PFVF_COMPATIBILITY_RING_TO_SVC_MAP) {
56 /* on the vf */
57 if (adf_iov_block_get(accel_dev,
58 ADF_VF2PF_BLOCK_MSG_GET_RING_TO_SVC_REQ,
59 &version,
60 data,
61 &len)) {
62 device_printf(GET_DEV(accel_dev),
63 "QAT: Failed adf_iov_block_get\n");
64 return EFAULT;
65 }
66 for (byte = 0; byte < ADF_VF2PF_RING_TO_SVC_LENGTH; byte++) {
67 ring_to_svc_map |= data[byte]
68 << (byte * ADF_PFVF_DATA_SHIFT);
69 }
70 GET_HW_DATA(accel_dev)->ring_to_svc_map = ring_to_svc_map;
71 }
72
73 return 0;
74 }
Cache object: c10f017a13bc4f984c5cc9acfef952be
|