0cb370c728be58443e25a675c83c8cee23eda36f
[dpdk.git] / drivers / crypto / qat / qat_device.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4 #ifndef _QAT_DEVICE_H_
5 #define _QAT_DEVICE_H_
6
7 #include <rte_bus_pci.h>
8
9 #include "qat_common.h"
10 #include "qat_logs.h"
11 #include "adf_transport_access_macros.h"
12 #include "qat_qp.h"
13
14 #define QAT_DETACHED  (0)
15 #define QAT_ATTACHED  (1)
16
17 #define QAT_DEV_NAME_MAX_LEN    64
18
19 /*
20  * This struct holds all the data about a QAT pci device
21  * including data about all services it supports.
22  * It contains
23  *  - hw_data
24  *  - config data
25  *  - runtime data
26  */
27 struct qat_sym_dev_private;
28 struct qat_pci_device {
29
30         /* Data used by all services */
31         char name[QAT_DEV_NAME_MAX_LEN];
32         /**< Name of qat pci device */
33         uint8_t qat_dev_id;
34         /**< Device instance for this qat pci device */
35         struct rte_pci_device *pci_dev;
36         /**< PCI information. */
37         enum qat_device_gen qat_dev_gen;
38         /**< QAT device generation */
39         rte_spinlock_t arb_csr_lock;
40         /**< lock to protect accesses to the arbiter CSR */
41         __extension__
42         uint8_t attached : 1;
43         /**< Flag indicating the device is attached */
44
45         struct qat_qp *qps_in_use[QAT_MAX_SERVICES][ADF_MAX_QPS_ON_ANY_SERVICE];
46         /**< links to qps set up for each service, index same as on API */
47
48         /* Data relating to symmetric crypto service */
49         struct qat_sym_dev_private *sym_dev;
50         /**< link back to cryptodev private data */
51         struct rte_device sym_rte_dev;
52         /**< This represents the crypto subset of this pci device.
53          * Register with this rather than with the one in
54          * pci_dev so that its driver can have a crypto-specific name
55          */
56
57         /* Data relating to compression service */
58
59         /* Data relating to asymmetric crypto service */
60
61 };
62
63 struct qat_gen_hw_data {
64         enum qat_device_gen dev_gen;
65         const struct qat_qp_hw_data (*qp_hw_data)[ADF_MAX_QPS_ON_ANY_SERVICE];
66 };
67
68 extern struct qat_gen_hw_data qat_gen_config[];
69
70 struct qat_pci_device *
71 qat_pci_device_allocate(struct rte_pci_device *pci_dev);
72
73 int
74 qat_pci_device_release(struct rte_pci_device *pci_dev);
75
76 struct qat_pci_device *
77 qat_get_qat_dev_from_pci_dev(struct rte_pci_device *pci_dev);
78
79 /* declaration needed for weak functions */
80 int
81 qat_sym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
82
83 int
84 qat_asym_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
85
86 int
87 qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
88
89 int
90 qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
91
92 int
93 qat_comp_dev_create(struct qat_pci_device *qat_pci_dev __rte_unused);
94
95 int
96 qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev __rte_unused);
97
98 #endif /* _QAT_DEVICE_H_ */