The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/qat/qat_common/adf_pf2vf_ring_to_svc_map.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.