xref: /f-stack/dpdk/drivers/net/bnxt/tf_core/hwrm_tf.h (revision 2d9fd380)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Broadcom
3  * All rights reserved.
4  */
5 #ifndef _HWRM_TF_H_
6 #define _HWRM_TF_H_
7 
8 #include "tf_core.h"
9 
10 typedef enum tf_type {
11 	TF_TYPE_TRUFLOW,
12 	TF_TYPE_LAST = TF_TYPE_TRUFLOW,
13 } tf_type_t;
14 
15 typedef enum tf_subtype {
16 	HWRM_TFT_GET_GLOBAL_CFG = 821,
17 	HWRM_TFT_SET_GLOBAL_CFG = 822,
18 	HWRM_TFT_TBL_TYPE_BULK_GET = 825,
19 	HWRM_TFT_IF_TBL_SET = 827,
20 	HWRM_TFT_IF_TBL_GET = 828,
21 	TF_SUBTYPE_LAST = HWRM_TFT_IF_TBL_GET,
22 } tf_subtype_t;
23 
24 /* Request and Response compile time checking */
25 /* u32_t	tlv_req_value[26]; */
26 #define TF_MAX_REQ_SIZE 104
27 /* u32_t	tlv_resp_value[170]; */
28 #define TF_MAX_RESP_SIZE 680
29 
30 /* Use this to allocate/free any kind of
31  * indexes over HWRM and fill the parms pointer
32  */
33 #define TF_BULK_RECV	 128
34 #define TF_BULK_SEND	  16
35 
36 /* EM Key value */
37 #define TF_DEV_DATA_TYPE_TF_EM_RULE_INSERT_KEY_DATA 0x2e30UL
38 /* EM Key value */
39 #define TF_DEV_DATA_TYPE_TF_EM_RULE_DELETE_KEY_DATA 0x2e40UL
40 /* L2 Context DMA Address Type */
41 #define TF_DEV_DATA_TYPE_TF_L2_CTX_DMA_ADDR		0x2fe0UL
42 /* L2 Context Entry */
43 #define TF_DEV_DATA_TYPE_TF_L2_CTX_ENTRY		0x2fe1UL
44 /* Prof tcam DMA Address Type */
45 #define TF_DEV_DATA_TYPE_TF_PROF_TCAM_DMA_ADDR		0x3030UL
46 /* Prof tcam Entry */
47 #define TF_DEV_DATA_TYPE_TF_PROF_TCAM_ENTRY		0x3031UL
48 /* WC DMA Address Type */
49 #define TF_DEV_DATA_TYPE_TF_WC_DMA_ADDR			0x30d0UL
50 /* WC Entry */
51 #define TF_DEV_DATA_TYPE_TF_WC_ENTRY				0x30d1UL
52 /* SPIF DFLT L2 CTXT Entry */
53 #define TF_DEV_DATA_TYPE_SPIF_DFLT_L2_CTXT		  0x3131UL
54 /* PARIF DFLT ACT REC PTR Entry */
55 #define TF_DEV_DATA_TYPE_PARIF_DFLT_ACT_REC		0x3132UL
56 /* PARIF ERR DFLT ACT REC PTR Entry */
57 #define TF_DEV_DATA_TYPE_PARIF_ERR_DFLT_ACT_REC	 0x3133UL
58 /* ILT Entry */
59 #define TF_DEV_DATA_TYPE_ILT				0x3134UL
60 /* VNIC SVIF entry */
61 #define TF_DEV_DATA_TYPE_VNIC_SVIF			0x3135UL
62 /* Action Data */
63 #define TF_DEV_DATA_TYPE_TF_ACTION_DATA			0x3170UL
64 #define TF_DEV_DATA_TYPE_LAST   TF_DEV_DATA_TYPE_TF_ACTION_DATA
65 
66 #define TF_BITS2BYTES(x) (((x) + 7) >> 3)
67 #define TF_BITS2BYTES_WORD_ALIGN(x) ((((x) + 31) >> 5) * 4)
68 
69 struct tf_set_global_cfg_input;
70 struct tf_get_global_cfg_input;
71 struct tf_get_global_cfg_output;
72 struct tf_tbl_type_bulk_get_input;
73 struct tf_tbl_type_bulk_get_output;
74 struct tf_if_tbl_set_input;
75 struct tf_if_tbl_get_input;
76 struct tf_if_tbl_get_output;
77 /* Input params for global config set */
78 typedef struct tf_set_global_cfg_input {
79 	/* Session Id */
80 	uint32_t			 fw_session_id;
81 	/* flags */
82 	uint32_t			 flags;
83 	/* When set to 0, indicates the query apply to RX */
84 #define TF_SET_GLOBAL_CFG_INPUT_FLAGS_DIR_RX		  (0x0)
85 	/* When set to 1, indicates the query apply to TX */
86 #define TF_SET_GLOBAL_CFG_INPUT_FLAGS_DIR_TX		  (0x1)
87 	/* Config type */
88 	uint32_t			 type;
89 	/* Offset of the type */
90 	uint32_t			 offset;
91 	/* Size of the data to set in bytes */
92 	uint16_t			 size;
93 	/* Data to set */
94 	uint8_t			  data[TF_BULK_SEND];
95 } tf_set_global_cfg_input_t, *ptf_set_global_cfg_input_t;
96 
97 /* Input params for global config to get */
98 typedef struct tf_get_global_cfg_input {
99 	/* Session Id */
100 	uint32_t			 fw_session_id;
101 	/* flags */
102 	uint32_t			 flags;
103 	/* When set to 0, indicates the query apply to RX */
104 #define TF_GET_GLOBAL_CFG_INPUT_FLAGS_DIR_RX		  (0x0)
105 	/* When set to 1, indicates the query apply to TX */
106 #define TF_GET_GLOBAL_CFG_INPUT_FLAGS_DIR_TX		  (0x1)
107 	/* Config to retrieve */
108 	uint32_t			 type;
109 	/* Offset to retrieve */
110 	uint32_t			 offset;
111 	/* Size of the data to set in bytes */
112 	uint16_t			 size;
113 } tf_get_global_cfg_input_t, *ptf_get_global_cfg_input_t;
114 
115 /* Output params for global config */
116 typedef struct tf_get_global_cfg_output {
117 	/* Size of the total data read in bytes */
118 	uint16_t			 size;
119 	/* Data to get */
120 	uint8_t			  data[TF_BULK_SEND];
121 } tf_get_global_cfg_output_t, *ptf_get_global_cfg_output_t;
122 
123 /* Input params for table type get */
124 typedef struct tf_tbl_type_bulk_get_input {
125 	/* Session Id */
126 	uint32_t			 fw_session_id;
127 	/* flags */
128 	uint32_t			 flags;
129 	/* When set to 0, indicates the get apply to RX */
130 #define TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX	   (0x0)
131 	/* When set to 1, indicates the get apply to TX */
132 #define TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX	   (0x1)
133 	/* When set to 1, indicates the clear entry on read */
134 #define TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_CLEAR_ON_READ	  (0x2)
135 	/* Type of the object to set */
136 	uint32_t			 type;
137 	/* Starting index to get from */
138 	uint32_t			 start_index;
139 	/* Number of entries to get */
140 	uint32_t			 num_entries;
141 	/* Host memory where data will be stored */
142 	uint64_t			 host_addr;
143 } tf_tbl_type_bulk_get_input_t, *ptf_tbl_type_bulk_get_input_t;
144 
145 /* Output params for table type get */
146 typedef struct tf_tbl_type_bulk_get_output {
147 	/* Size of the total data read in bytes */
148 	uint16_t			 size;
149 } tf_tbl_type_bulk_get_output_t, *ptf_tbl_type_bulk_get_output_t;
150 
151 /* Input params for if tbl set */
152 typedef struct tf_if_tbl_set_input {
153 	/* Session Id */
154 	uint32_t			 fw_session_id;
155 	/* flags */
156 	uint16_t			 flags;
157 	/* When set to 0, indicates the query apply to RX */
158 #define TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX			  (0x0)
159 	/* When set to 1, indicates the query apply to TX */
160 #define TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX			  (0x1)
161 	/* if table type */
162 	uint16_t			 tf_if_tbl_type;
163 	/* index of table entry */
164 	uint16_t			 idx;
165 	/* size of the data write to table entry */
166 	uint32_t			 data_sz_in_bytes;
167 	/* data to write into table entry */
168 	uint32_t			 data[2];
169 } tf_if_tbl_set_input_t, *ptf_if_tbl_set_input_t;
170 
171 /* Input params for if tbl get */
172 typedef struct tf_if_tbl_get_input {
173 	/* Session Id */
174 	uint32_t			 fw_session_id;
175 	/* flags */
176 	uint16_t			 flags;
177 	/* When set to 0, indicates the query apply to RX */
178 #define TF_IF_TBL_GET_INPUT_FLAGS_DIR_RX			  (0x0)
179 	/* When set to 1, indicates the query apply to TX */
180 #define TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX			  (0x1)
181 	/* if table type */
182 	uint16_t			 tf_if_tbl_type;
183 	/* size of the data get from table entry */
184 	uint32_t			 data_sz_in_bytes;
185 	/* index of table entry */
186 	uint16_t			 idx;
187 } tf_if_tbl_get_input_t, *ptf_if_tbl_get_input_t;
188 
189 /* output params for if tbl get */
190 typedef struct tf_if_tbl_get_output {
191 	/* Value read from table entry */
192 	uint32_t			 data[2];
193 } tf_if_tbl_get_output_t, *ptf_if_tbl_get_output_t;
194 
195 #endif /* _HWRM_TF_H_ */
196