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/contrib/openzfs/include/sys/qat.h

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 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 
   22 #ifndef _SYS_QAT_H
   23 #define _SYS_QAT_H
   24 
   25 typedef enum qat_compress_dir {
   26         QAT_DECOMPRESS = 0,
   27         QAT_COMPRESS = 1,
   28 } qat_compress_dir_t;
   29 
   30 typedef enum qat_encrypt_dir {
   31         QAT_DECRYPT = 0,
   32         QAT_ENCRYPT = 1,
   33 } qat_encrypt_dir_t;
   34 
   35 
   36 #if defined(_KERNEL) && defined(HAVE_QAT)
   37 #include <sys/zio.h>
   38 #include <sys/crypto/api.h>
   39 #include "cpa.h"
   40 #include "dc/cpa_dc.h"
   41 #include "lac/cpa_cy_sym.h"
   42 
   43 /*
   44  * The minimal and maximal buffer size which are not restricted
   45  * in the QAT hardware, but with the input buffer size between 4KB
   46  * and 128KB the hardware can provide the optimal performance.
   47  */
   48 #define QAT_MIN_BUF_SIZE        (4*1024)
   49 #define QAT_MAX_BUF_SIZE        (128*1024)
   50 
   51 /*
   52  * Used for QAT kstat.
   53  */
   54 typedef struct qat_stats {
   55         /*
   56          * Number of jobs submitted to QAT compression engine.
   57          */
   58         kstat_named_t comp_requests;
   59         /*
   60          * Total bytes sent to QAT compression engine.
   61          */
   62         kstat_named_t comp_total_in_bytes;
   63         /*
   64          * Total bytes output from QAT compression engine.
   65          */
   66         kstat_named_t comp_total_out_bytes;
   67         /*
   68          * Number of jobs submitted to QAT de-compression engine.
   69          */
   70         kstat_named_t decomp_requests;
   71         /*
   72          * Total bytes sent to QAT de-compression engine.
   73          */
   74         kstat_named_t decomp_total_in_bytes;
   75         /*
   76          * Total bytes output from QAT de-compression engine.
   77          */
   78         kstat_named_t decomp_total_out_bytes;
   79         /*
   80          * Number of fails in the QAT compression / decompression engine.
   81          * Note: when a QAT error happens, it doesn't necessarily indicate a
   82          * critical hardware issue. Sometimes it is because the output buffer
   83          * is not big enough. The compression job will be transferred to the
   84          * gzip software implementation so the functionality of ZFS is not
   85          * impacted.
   86          */
   87         kstat_named_t dc_fails;
   88 
   89         /*
   90          * Number of jobs submitted to QAT encryption engine.
   91          */
   92         kstat_named_t encrypt_requests;
   93         /*
   94          * Total bytes sent to QAT encryption engine.
   95          */
   96         kstat_named_t encrypt_total_in_bytes;
   97         /*
   98          * Total bytes output from QAT encryption engine.
   99          */
  100         kstat_named_t encrypt_total_out_bytes;
  101         /*
  102          * Number of jobs submitted to QAT decryption engine.
  103          */
  104         kstat_named_t decrypt_requests;
  105         /*
  106          * Total bytes sent to QAT decryption engine.
  107          */
  108         kstat_named_t decrypt_total_in_bytes;
  109         /*
  110          * Total bytes output from QAT decryption engine.
  111          */
  112         kstat_named_t decrypt_total_out_bytes;
  113         /*
  114          * Number of fails in the QAT encryption / decryption engine.
  115          * Note: when a QAT error happens, it doesn't necessarily indicate a
  116          * critical hardware issue. The encryption job will be transferred
  117          * to the software implementation so the functionality of ZFS is
  118          * not impacted.
  119          */
  120         kstat_named_t crypt_fails;
  121 
  122         /*
  123          * Number of jobs submitted to QAT checksum engine.
  124          */
  125         kstat_named_t cksum_requests;
  126         /*
  127          * Total bytes sent to QAT checksum engine.
  128          */
  129         kstat_named_t cksum_total_in_bytes;
  130         /*
  131          * Number of fails in the QAT checksum engine.
  132          * Note: when a QAT error happens, it doesn't necessarily indicate a
  133          * critical hardware issue. The checksum job will be transferred to the
  134          * software implementation so the functionality of ZFS is not impacted.
  135          */
  136         kstat_named_t cksum_fails;
  137 } qat_stats_t;
  138 
  139 #define QAT_STAT_INCR(stat, val) \
  140         atomic_add_64(&qat_stats.stat.value.ui64, (val))
  141 #define QAT_STAT_BUMP(stat) \
  142         QAT_STAT_INCR(stat, 1)
  143 
  144 extern qat_stats_t qat_stats;
  145 extern int zfs_qat_compress_disable;
  146 extern int zfs_qat_checksum_disable;
  147 extern int zfs_qat_encrypt_disable;
  148 
  149 /* inlined for performance */
  150 static inline struct page *
  151 qat_mem_to_page(void *addr)
  152 {
  153         if (!is_vmalloc_addr(addr))
  154                 return (virt_to_page(addr));
  155 
  156         return (vmalloc_to_page(addr));
  157 }
  158 
  159 CpaStatus qat_mem_alloc_contig(void **pp_mem_addr, Cpa32U size_bytes);
  160 void qat_mem_free_contig(void **pp_mem_addr);
  161 #define QAT_PHYS_CONTIG_ALLOC(pp_mem_addr, size_bytes)  \
  162         qat_mem_alloc_contig((void *)(pp_mem_addr), (size_bytes))
  163 #define QAT_PHYS_CONTIG_FREE(p_mem_addr)        \
  164         qat_mem_free_contig((void *)&(p_mem_addr))
  165 
  166 extern int qat_dc_init(void);
  167 extern void qat_dc_fini(void);
  168 extern int qat_cy_init(void);
  169 extern void qat_cy_fini(void);
  170 extern int qat_init(void);
  171 extern void qat_fini(void);
  172 
  173 /* fake CpaStatus used to indicate data was not compressible */
  174 #define CPA_STATUS_INCOMPRESSIBLE               (-127)
  175 
  176 extern boolean_t qat_dc_use_accel(size_t s_len);
  177 extern boolean_t qat_crypt_use_accel(size_t s_len);
  178 extern boolean_t qat_checksum_use_accel(size_t s_len);
  179 extern int qat_compress(qat_compress_dir_t dir, char *src, int src_len,
  180     char *dst, int dst_len, size_t *c_len);
  181 extern int qat_crypt(qat_encrypt_dir_t dir, uint8_t *src_buf, uint8_t *dst_buf,
  182     uint8_t *aad_buf, uint32_t aad_len, uint8_t *iv_buf, uint8_t *digest_buf,
  183     crypto_key_t *key, uint64_t crypt, uint32_t enc_len);
  184 extern int qat_checksum(uint64_t cksum, uint8_t *buf, uint64_t size,
  185     zio_cksum_t *zcp);
  186 #else
  187 #define CPA_STATUS_SUCCESS                      0
  188 #define CPA_STATUS_INCOMPRESSIBLE               (-127)
  189 #define qat_init()
  190 #define qat_fini()
  191 #define qat_dc_use_accel(s_len)                 ((void) sizeof (s_len), 0)
  192 #define qat_crypt_use_accel(s_len)              ((void) sizeof (s_len), 0)
  193 #define qat_checksum_use_accel(s_len)           ((void) sizeof (s_len), 0)
  194 #define qat_compress(dir, s, sl, d, dl, cl)                     \
  195         ((void) sizeof (dir), (void) sizeof (s), (void) sizeof (sl), \
  196             (void) sizeof (d), (void) sizeof (dl), (void) sizeof (cl), 0)
  197 #define qat_crypt(dir, s, d, a, al, i, db, k, c, el)            \
  198         ((void) sizeof (dir), (void) sizeof (s), (void) sizeof (d), \
  199             (void) sizeof (a),  (void) sizeof (al), (void) sizeof (i), \
  200             (void) sizeof (db), (void) sizeof (k), (void) sizeof (c), \
  201             (void) sizeof (el), 0)
  202 #define qat_checksum(c, buf, s, z)                              \
  203         ((void) sizeof (c), (void) sizeof (buf), (void) sizeof (s), \
  204             (void) sizeof (z), 0)
  205 #endif
  206 
  207 #endif /* _SYS_QAT_H */

Cache object: a89a1ceac9a34a7d7d911af536e114af


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