net/ice/base: add more capability to admin queue
[dpdk.git] / drivers / baseband / acc100 / rte_acc100_cfg.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2020 Intel Corporation
3  */
4
5 #ifndef _RTE_ACC100_CFG_H_
6 #define _RTE_ACC100_CFG_H_
7
8 /**
9  * @file rte_acc100_cfg.h
10  *
11  * Functions for configuring ACC100 HW, exposed directly to applications.
12  * Configuration related to encoding/decoding is done through the
13  * librte_bbdev library.
14  *
15  * @warning
16  * @b EXPERIMENTAL: this API may change without prior notice
17  */
18
19 #include <stdint.h>
20 #include <stdbool.h>
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 /**< Number of Virtual Functions ACC100 supports */
26 #define RTE_ACC100_NUM_VFS 16
27
28 /**
29  * Definition of Queue Topology for ACC100 Configuration
30  * Some level of details is abstracted out to expose a clean interface
31  * given that comprehensive flexibility is not required
32  */
33 struct rte_acc100_queue_topology {
34         /** Number of QGroups in incremental order of priority */
35         uint16_t num_qgroups;
36         /**
37          * All QGroups have the same number of AQs here.
38          * Note : Could be made a 16-array if more flexibility is really
39          * required
40          */
41         uint16_t num_aqs_per_groups;
42         /**
43          * Depth of the AQs is the same of all QGroups here. Log2 Enum : 2^N
44          * Note : Could be made a 16-array if more flexibility is really
45          * required
46          */
47         uint16_t aq_depth_log2;
48         /**
49          * Index of the first Queue Group Index - assuming contiguity
50          * Initialized as -1
51          */
52         int8_t first_qgroup_index;
53 };
54
55 /**
56  * Definition of Arbitration related parameters for ACC100 Configuration
57  */
58 struct rte_acc100_arbitration {
59         /** Default Weight for VF Fairness Arbitration */
60         uint16_t round_robin_weight;
61         uint32_t gbr_threshold1; /**< Guaranteed Bitrate Threshold 1 */
62         uint32_t gbr_threshold2; /**< Guaranteed Bitrate Threshold 2 */
63 };
64
65 /**
66  * Structure to pass ACC100 configuration.
67  * Note: all VF Bundles will have the same configuration.
68  */
69 struct rte_acc100_conf {
70         bool pf_mode_en; /**< 1 if PF is used for dataplane, 0 for VFs */
71         /** 1 if input '1' bit is represented by a positive LLR value, 0 if '1'
72          * bit is represented by a negative value.
73          */
74         bool input_pos_llr_1_bit;
75         /** 1 if output '1' bit is represented by a positive value, 0 if '1'
76          * bit is represented by a negative value.
77          */
78         bool output_pos_llr_1_bit;
79         uint16_t num_vf_bundles; /**< Number of VF bundles to setup */
80         /** Queue topology for each operation type */
81         struct rte_acc100_queue_topology q_ul_4g;
82         struct rte_acc100_queue_topology q_dl_4g;
83         struct rte_acc100_queue_topology q_ul_5g;
84         struct rte_acc100_queue_topology q_dl_5g;
85         /** Arbitration configuration for each operation type */
86         struct rte_acc100_arbitration arb_ul_4g[RTE_ACC100_NUM_VFS];
87         struct rte_acc100_arbitration arb_dl_4g[RTE_ACC100_NUM_VFS];
88         struct rte_acc100_arbitration arb_ul_5g[RTE_ACC100_NUM_VFS];
89         struct rte_acc100_arbitration arb_dl_5g[RTE_ACC100_NUM_VFS];
90 };
91
92 /**
93  * Configure a ACC100 device
94  *
95  * @param dev_name
96  *   The name of the device. This is the short form of PCI BDF, e.g. 00:01.0.
97  *   It can also be retrieved for a bbdev device from the dev_name field in the
98  *   rte_bbdev_info structure returned by rte_bbdev_info_get().
99  * @param conf
100  *   Configuration to apply to ACC100 HW.
101  *
102  * @return
103  *   Zero on success, negative value on failure.
104  */
105 __rte_experimental
106 int
107 rte_acc100_configure(const char *dev_name, struct rte_acc100_conf *conf);
108
109 #ifdef __cplusplus
110 }
111 #endif
112
113 #endif /* _RTE_ACC100_CFG_H_ */