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_hw/qat_c4xxx/adf_c4xxx_ae_config.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 "adf_c4xxx_hw_data.h"
    5 #include <linux/kernel.h>
    6 #include <linux/types.h>
    7 #include <linux/fs.h>
    8 #include <linux/errno.h>
    9 #include <linux/device.h>
   10 #include <linux/io.h>
   11 #include <sys/sbuf.h>
   12 #include <sys/sysctl.h>
   13 #include <adf_accel_devices.h>
   14 #include <adf_common_drv.h>
   15 #include <adf_cfg.h>
   16 
   17 /* String buffer size */
   18 #define AE_INFO_BUFFER_SIZE 50
   19 
   20 #define AE_CONFIG_DBG_FILE "ae_config"
   21 
   22 static u8
   23 find_first_me_index(const u32 au_mask)
   24 {
   25         u8 i;
   26         u32 mask = au_mask;
   27 
   28         /* Retrieve the index of the first ME of an accel unit */
   29         for (i = 0; i < ADF_C4XXX_MAX_ACCELENGINES; i++) {
   30                 if (mask & BIT(i))
   31                         return i;
   32         }
   33 
   34         return 0;
   35 }
   36 
   37 static u8
   38 get_au_index(u8 au_mask)
   39 {
   40         u8 au_index = 0;
   41 
   42         while (au_mask) {
   43                 if (au_mask == BIT(0))
   44                         return au_index;
   45                 au_index++;
   46                 au_mask = au_mask >> 1;
   47         }
   48 
   49         return 0;
   50 }
   51 
   52 static int adf_ae_config_show(SYSCTL_HANDLER_ARGS)
   53 {
   54         struct sbuf sb;
   55         struct adf_accel_dev *accel_dev = arg1;
   56         struct adf_hw_device_data *hw_data = accel_dev->hw_device;
   57         struct adf_accel_unit *accel_unit = accel_dev->au_info->au;
   58         u8 i, j;
   59         u8 au_index;
   60         u8 ae_index;
   61         u8 num_aes;
   62         int ret = 0;
   63         u32 num_au = hw_data->get_num_accel_units(hw_data);
   64 
   65         sbuf_new_for_sysctl(&sb, NULL, 2048, req);
   66 
   67         sbuf_printf(&sb, "\n");
   68         for (i = 0; i < num_au; i++) {
   69                 /* Retrieve accel unit index */
   70                 au_index = get_au_index(accel_unit[i].au_mask);
   71 
   72                 /* Retrieve index of fist ME in current accel unit */
   73                 ae_index = find_first_me_index(accel_unit[i].ae_mask);
   74                 num_aes = accel_unit[i].num_ae;
   75 
   76                 /* Retrieve accel unit type */
   77                 switch (accel_unit[i].services) {
   78                 case ADF_ACCEL_CRYPTO:
   79                         sbuf_printf(&sb,
   80                                     "\tAccel unit %d - CRYPTO\n",
   81                                     au_index);
   82                         /* Display ME assignment for a particular accel unit */
   83                         for (j = ae_index; j < (num_aes + ae_index); j++)
   84                                 sbuf_printf(&sb, "\t\tAE[%d]: crypto\n", j);
   85                         break;
   86                 case ADF_ACCEL_COMPRESSION:
   87                         sbuf_printf(&sb,
   88                                     "\tAccel unit %d - COMPRESSION\n",
   89                                     au_index);
   90                         /* Display ME assignment for a particular accel unit */
   91                         for (j = ae_index; j < (num_aes + ae_index); j++)
   92                                 sbuf_printf(&sb,
   93                                             "\t\tAE[%d]: compression\n",
   94                                             j);
   95                         break;
   96                 case ADF_ACCEL_SERVICE_NULL:
   97                 default:
   98                         break;
   99                 }
  100         }
  101 
  102         sbuf_finish(&sb);
  103         ret = SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
  104         sbuf_delete(&sb);
  105 
  106         return ret;
  107 }
  108 
  109 static int
  110 c4xxx_add_debugfs_ae_config(struct adf_accel_dev *accel_dev)
  111 {
  112         struct sysctl_ctx_list *qat_sysctl_ctx = NULL;
  113         struct sysctl_oid *qat_sysctl_tree = NULL;
  114         struct sysctl_oid *ae_conf_ctl = NULL;
  115 
  116         qat_sysctl_ctx =
  117             device_get_sysctl_ctx(accel_dev->accel_pci_dev.pci_dev);
  118         qat_sysctl_tree =
  119             device_get_sysctl_tree(accel_dev->accel_pci_dev.pci_dev);
  120 
  121         ae_conf_ctl = SYSCTL_ADD_PROC(qat_sysctl_ctx,
  122                                       SYSCTL_CHILDREN(qat_sysctl_tree),
  123                                       OID_AUTO,
  124                                       AE_CONFIG_DBG_FILE,
  125                                       CTLTYPE_STRING | CTLFLAG_RD,
  126                                       accel_dev,
  127                                       0,
  128                                       adf_ae_config_show,
  129                                       "A",
  130                                       "AE config");
  131         accel_dev->debugfs_ae_config = ae_conf_ctl;
  132         if (!accel_dev->debugfs_ae_config) {
  133                 device_printf(GET_DEV(accel_dev),
  134                               "Could not create debug ae config entry.\n");
  135                 return EFAULT;
  136         }
  137         return 0;
  138 }
  139 
  140 int
  141 c4xxx_init_ae_config(struct adf_accel_dev *accel_dev)
  142 {
  143         int ret = 0;
  144 
  145         /* Add a new file in debug file system with h/w version. */
  146         ret = c4xxx_add_debugfs_ae_config(accel_dev);
  147         if (ret) {
  148                 c4xxx_exit_ae_config(accel_dev);
  149                 device_printf(GET_DEV(accel_dev),
  150                               "Could not create debugfs ae config file\n");
  151                 return EINVAL;
  152         }
  153 
  154         return 0;
  155 }
  156 
  157 void
  158 c4xxx_exit_ae_config(struct adf_accel_dev *accel_dev)
  159 {
  160         if (!accel_dev->debugfs_ae_config)
  161                 return;
  162 
  163         /* Delete ae configuration file */
  164         remove_oid(accel_dev, accel_dev->debugfs_ae_config);
  165 
  166         accel_dev->debugfs_ae_config = NULL;
  167 }

Cache object: d4b546118ba261056d76b777412806fe


[ 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.