]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/openzfs/module/os/linux/zfs/qat.c
ZFS: MFV 2.0-rc1-ga00c61
[FreeBSD/FreeBSD.git] / sys / contrib / openzfs / module / os / linux / zfs / qat.c
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 http://www.opensolaris.org/os/licensing.
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 #if defined(_KERNEL) && defined(HAVE_QAT)
23 #include <sys/zfs_context.h>
24 #include <sys/qat.h>
25
26 qat_stats_t qat_stats = {
27         { "comp_requests",                      KSTAT_DATA_UINT64 },
28         { "comp_total_in_bytes",                KSTAT_DATA_UINT64 },
29         { "comp_total_out_bytes",               KSTAT_DATA_UINT64 },
30         { "decomp_requests",                    KSTAT_DATA_UINT64 },
31         { "decomp_total_in_bytes",              KSTAT_DATA_UINT64 },
32         { "decomp_total_out_bytes",             KSTAT_DATA_UINT64 },
33         { "dc_fails",                           KSTAT_DATA_UINT64 },
34         { "encrypt_requests",                   KSTAT_DATA_UINT64 },
35         { "encrypt_total_in_bytes",             KSTAT_DATA_UINT64 },
36         { "encrypt_total_out_bytes",            KSTAT_DATA_UINT64 },
37         { "decrypt_requests",                   KSTAT_DATA_UINT64 },
38         { "decrypt_total_in_bytes",             KSTAT_DATA_UINT64 },
39         { "decrypt_total_out_bytes",            KSTAT_DATA_UINT64 },
40         { "crypt_fails",                        KSTAT_DATA_UINT64 },
41         { "cksum_requests",                     KSTAT_DATA_UINT64 },
42         { "cksum_total_in_bytes",               KSTAT_DATA_UINT64 },
43         { "cksum_fails",                        KSTAT_DATA_UINT64 },
44 };
45
46 static kstat_t *qat_ksp = NULL;
47
48 CpaStatus
49 qat_mem_alloc_contig(void **pp_mem_addr, Cpa32U size_bytes)
50 {
51         *pp_mem_addr = kmalloc(size_bytes, GFP_KERNEL);
52         if (*pp_mem_addr == NULL)
53                 return (CPA_STATUS_RESOURCE);
54         return (CPA_STATUS_SUCCESS);
55 }
56
57 void
58 qat_mem_free_contig(void **pp_mem_addr)
59 {
60         if (*pp_mem_addr != NULL) {
61                 kfree(*pp_mem_addr);
62                 *pp_mem_addr = NULL;
63         }
64 }
65
66 int
67 qat_init(void)
68 {
69         qat_ksp = kstat_create("zfs", 0, "qat", "misc",
70             KSTAT_TYPE_NAMED, sizeof (qat_stats) / sizeof (kstat_named_t),
71             KSTAT_FLAG_VIRTUAL);
72         if (qat_ksp != NULL) {
73                 qat_ksp->ks_data = &qat_stats;
74                 kstat_install(qat_ksp);
75         }
76
77         /*
78          * Just set the disable flag when qat init failed, qat can be
79          * turned on again in post-process after zfs module is loaded, e.g.:
80          * echo 0 > /sys/module/zfs/parameters/zfs_qat_compress_disable
81          */
82         if (qat_dc_init() != 0)
83                 zfs_qat_compress_disable = 1;
84
85         if (qat_cy_init() != 0) {
86                 zfs_qat_checksum_disable = 1;
87                 zfs_qat_encrypt_disable = 1;
88         }
89
90         return (0);
91 }
92
93 void
94 qat_fini(void)
95 {
96         if (qat_ksp != NULL) {
97                 kstat_delete(qat_ksp);
98                 qat_ksp = NULL;
99         }
100
101         qat_cy_fini();
102         qat_dc_fini();
103 }
104
105 #endif