]>
Commit | Line | Data |
---|---|---|
26b3f3cc NK |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* Marvell OcteonTx2 RVU Admin Function driver | |
021e2e53 AM |
3 | * |
4 | * Copyright (C) 2018 Marvell International Ltd. | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 as | |
8 | * published by the Free Software Foundation. | |
9 | */ | |
10 | ||
11 | #ifndef MBOX_H | |
12 | #define MBOX_H | |
13 | ||
14 | #include <linux/etherdevice.h> | |
15 | #include <linux/sizes.h> | |
16 | ||
17 | #include "rvu_struct.h" | |
a3e7121c | 18 | #include "common.h" |
021e2e53 AM |
19 | |
20 | #define MBOX_SIZE SZ_64K | |
21 | ||
22 | /* AF/PF: PF initiated, PF/VF VF initiated */ | |
23 | #define MBOX_DOWN_RX_START 0 | |
24 | #define MBOX_DOWN_RX_SIZE (46 * SZ_1K) | |
25 | #define MBOX_DOWN_TX_START (MBOX_DOWN_RX_START + MBOX_DOWN_RX_SIZE) | |
26 | #define MBOX_DOWN_TX_SIZE (16 * SZ_1K) | |
27 | /* AF/PF: AF initiated, PF/VF PF initiated */ | |
28 | #define MBOX_UP_RX_START (MBOX_DOWN_TX_START + MBOX_DOWN_TX_SIZE) | |
29 | #define MBOX_UP_RX_SIZE SZ_1K | |
30 | #define MBOX_UP_TX_START (MBOX_UP_RX_START + MBOX_UP_RX_SIZE) | |
31 | #define MBOX_UP_TX_SIZE SZ_1K | |
32 | ||
33 | #if MBOX_UP_TX_SIZE + MBOX_UP_TX_START != MBOX_SIZE | |
34 | # error "incorrect mailbox area sizes" | |
35 | #endif | |
36 | ||
7304ac45 SG |
37 | #define INTR_MASK(pfvfs) ((pfvfs < 64) ? (BIT_ULL(pfvfs) - 1) : (~0ull)) |
38 | ||
fdb90298 | 39 | #define MBOX_RSP_TIMEOUT 2000 /* Time(ms) to wait for mbox response */ |
021e2e53 AM |
40 | |
41 | #define MBOX_MSG_ALIGN 16 /* Align mbox msg start to 16bytes */ | |
42 | ||
43 | /* Mailbox directions */ | |
44 | #define MBOX_DIR_AFPF 0 /* AF replies to PF */ | |
45 | #define MBOX_DIR_PFAF 1 /* PF sends messages to AF */ | |
46 | #define MBOX_DIR_PFVF 2 /* PF replies to VF */ | |
47 | #define MBOX_DIR_VFPF 3 /* VF sends messages to PF */ | |
48 | #define MBOX_DIR_AFPF_UP 4 /* AF sends messages to PF */ | |
49 | #define MBOX_DIR_PFAF_UP 5 /* PF replies to AF */ | |
50 | #define MBOX_DIR_PFVF_UP 6 /* PF sends messages to VF */ | |
51 | #define MBOX_DIR_VFPF_UP 7 /* VF replies to PF */ | |
52 | ||
53 | struct otx2_mbox_dev { | |
54 | void *mbase; /* This dev's mbox region */ | |
55 | spinlock_t mbox_lock; | |
56 | u16 msg_size; /* Total msg size to be sent */ | |
57 | u16 rsp_size; /* Total rsp size to be sure the reply is ok */ | |
58 | u16 num_msgs; /* No of msgs sent or waiting for response */ | |
59 | u16 msgs_acked; /* No of msgs for which response is received */ | |
60 | }; | |
61 | ||
62 | struct otx2_mbox { | |
63 | struct pci_dev *pdev; | |
64 | void *hwbase; /* Mbox region advertised by HW */ | |
65 | void *reg_base;/* CSR base for this dev */ | |
66 | u64 trigger; /* Trigger mbox notification */ | |
67 | u16 tr_shift; /* Mbox trigger shift */ | |
68 | u64 rx_start; /* Offset of Rx region in mbox memory */ | |
69 | u64 tx_start; /* Offset of Tx region in mbox memory */ | |
70 | u16 rx_size; /* Size of Rx region */ | |
71 | u16 tx_size; /* Size of Tx region */ | |
72 | u16 ndevs; /* The number of peers */ | |
73 | struct otx2_mbox_dev *dev; | |
74 | }; | |
75 | ||
76 | /* Header which preceeds all mbox messages */ | |
77 | struct mbox_hdr { | |
fdb90298 | 78 | u64 msg_size; /* Total msgs size embedded */ |
021e2e53 AM |
79 | u16 num_msgs; /* No of msgs embedded */ |
80 | }; | |
81 | ||
82 | /* Header which preceeds every msg and is also part of it */ | |
83 | struct mbox_msghdr { | |
84 | u16 pcifunc; /* Who's sending this msg */ | |
85 | u16 id; /* Mbox message ID */ | |
86 | #define OTX2_MBOX_REQ_SIG (0xdead) | |
87 | #define OTX2_MBOX_RSP_SIG (0xbeef) | |
88 | u16 sig; /* Signature, for validating corrupted msgs */ | |
89 | #define OTX2_MBOX_VERSION (0x0001) | |
90 | u16 ver; /* Version of msg's structure for this ID */ | |
91 | u16 next_msgoff; /* Offset of next msg within mailbox region */ | |
92 | int rc; /* Msg process'ed response code */ | |
93 | }; | |
94 | ||
95 | void otx2_mbox_reset(struct otx2_mbox *mbox, int devid); | |
96 | void otx2_mbox_destroy(struct otx2_mbox *mbox); | |
7304ac45 SG |
97 | int otx2_mbox_init(struct otx2_mbox *mbox, void __force *hwbase, |
98 | struct pci_dev *pdev, void __force *reg_base, | |
99 | int direction, int ndevs); | |
021e2e53 AM |
100 | void otx2_mbox_msg_send(struct otx2_mbox *mbox, int devid); |
101 | int otx2_mbox_wait_for_rsp(struct otx2_mbox *mbox, int devid); | |
102 | int otx2_mbox_busy_poll_for_rsp(struct otx2_mbox *mbox, int devid); | |
103 | struct mbox_msghdr *otx2_mbox_alloc_msg_rsp(struct otx2_mbox *mbox, int devid, | |
104 | int size, int size_rsp); | |
105 | struct mbox_msghdr *otx2_mbox_get_rsp(struct otx2_mbox *mbox, int devid, | |
106 | struct mbox_msghdr *msg); | |
a36740f6 | 107 | int otx2_mbox_check_rsp_msgs(struct otx2_mbox *mbox, int devid); |
021e2e53 AM |
108 | int otx2_reply_invalid_msg(struct otx2_mbox *mbox, int devid, |
109 | u16 pcifunc, u16 id); | |
110 | bool otx2_mbox_nonempty(struct otx2_mbox *mbox, int devid); | |
111 | const char *otx2_mbox_id2name(u16 id); | |
112 | static inline struct mbox_msghdr *otx2_mbox_alloc_msg(struct otx2_mbox *mbox, | |
113 | int devid, int size) | |
114 | { | |
115 | return otx2_mbox_alloc_msg_rsp(mbox, devid, size, 0); | |
116 | } | |
117 | ||
118 | /* Mailbox message types */ | |
119 | #define MBOX_MSG_MASK 0xFFFF | |
120 | #define MBOX_MSG_INVALID 0xFFFE | |
121 | #define MBOX_MSG_MAX 0xFFFF | |
122 | ||
123 | #define MBOX_MESSAGES \ | |
746ea742 | 124 | /* Generic mbox IDs (range 0x000 - 0x1FF) */ \ |
eac66686 SG |
125 | M(READY, 0x001, ready, msg_req, ready_msg_rsp) \ |
126 | M(ATTACH_RESOURCES, 0x002, attach_resources, rsrc_attach, msg_rsp) \ | |
127 | M(DETACH_RESOURCES, 0x003, detach_resources, rsrc_detach, msg_rsp) \ | |
27150bc4 | 128 | M(MSIX_OFFSET, 0x005, msix_offset, msg_req, msix_offset_rsp) \ |
c554f9c1 | 129 | M(VF_FLR, 0x006, vf_flr, msg_req, msg_rsp) \ |
5d9b976d | 130 | M(GET_HW_CAP, 0x008, get_hw_cap, msg_req, get_hw_cap_rsp) \ |
746ea742 | 131 | /* CGX mbox IDs (range 0x200 - 0x3FF) */ \ |
eac66686 SG |
132 | M(CGX_START_RXTX, 0x200, cgx_start_rxtx, msg_req, msg_rsp) \ |
133 | M(CGX_STOP_RXTX, 0x201, cgx_stop_rxtx, msg_req, msg_rsp) \ | |
134 | M(CGX_STATS, 0x202, cgx_stats, msg_req, cgx_stats_rsp) \ | |
135 | M(CGX_MAC_ADDR_SET, 0x203, cgx_mac_addr_set, cgx_mac_addr_set_or_get, \ | |
96be2e0d | 136 | cgx_mac_addr_set_or_get) \ |
eac66686 | 137 | M(CGX_MAC_ADDR_GET, 0x204, cgx_mac_addr_get, cgx_mac_addr_set_or_get, \ |
96be2e0d | 138 | cgx_mac_addr_set_or_get) \ |
eac66686 SG |
139 | M(CGX_PROMISC_ENABLE, 0x205, cgx_promisc_enable, msg_req, msg_rsp) \ |
140 | M(CGX_PROMISC_DISABLE, 0x206, cgx_promisc_disable, msg_req, msg_rsp) \ | |
141 | M(CGX_START_LINKEVENTS, 0x207, cgx_start_linkevents, msg_req, msg_rsp) \ | |
142 | M(CGX_STOP_LINKEVENTS, 0x208, cgx_stop_linkevents, msg_req, msg_rsp) \ | |
143 | M(CGX_GET_LINKINFO, 0x209, cgx_get_linkinfo, msg_req, cgx_link_info_msg) \ | |
144 | M(CGX_INTLBK_ENABLE, 0x20A, cgx_intlbk_enable, msg_req, msg_rsp) \ | |
145 | M(CGX_INTLBK_DISABLE, 0x20B, cgx_intlbk_disable, msg_req, msg_rsp) \ | |
42157217 ZS |
146 | M(CGX_PTP_RX_ENABLE, 0x20C, cgx_ptp_rx_enable, msg_req, msg_rsp) \ |
147 | M(CGX_PTP_RX_DISABLE, 0x20D, cgx_ptp_rx_disable, msg_req, msg_rsp) \ | |
f7e086e7 G |
148 | M(CGX_CFG_PAUSE_FRM, 0x20E, cgx_cfg_pause_frm, cgx_pause_frm_cfg, \ |
149 | cgx_pause_frm_cfg) \ | |
746ea742 | 150 | /* NPA mbox IDs (range 0x400 - 0x5FF) */ \ |
eac66686 SG |
151 | M(NPA_LF_ALLOC, 0x400, npa_lf_alloc, \ |
152 | npa_lf_alloc_req, npa_lf_alloc_rsp) \ | |
153 | M(NPA_LF_FREE, 0x401, npa_lf_free, msg_req, msg_rsp) \ | |
154 | M(NPA_AQ_ENQ, 0x402, npa_aq_enq, npa_aq_enq_req, npa_aq_enq_rsp) \ | |
155 | M(NPA_HWCTX_DISABLE, 0x403, npa_hwctx_disable, hwctx_disable_req, msg_rsp)\ | |
746ea742 SG |
156 | /* SSO/SSOW mbox IDs (range 0x600 - 0x7FF) */ \ |
157 | /* TIM mbox IDs (range 0x800 - 0x9FF) */ \ | |
158 | /* CPT mbox IDs (range 0xA00 - 0xBFF) */ \ | |
159 | /* NPC mbox IDs (range 0x6000 - 0x7FFF) */ \ | |
f9274958 SG |
160 | M(NPC_MCAM_ALLOC_ENTRY, 0x6000, npc_mcam_alloc_entry, npc_mcam_alloc_entry_req,\ |
161 | npc_mcam_alloc_entry_rsp) \ | |
162 | M(NPC_MCAM_FREE_ENTRY, 0x6001, npc_mcam_free_entry, \ | |
163 | npc_mcam_free_entry_req, msg_rsp) \ | |
651cd265 SG |
164 | M(NPC_MCAM_WRITE_ENTRY, 0x6002, npc_mcam_write_entry, \ |
165 | npc_mcam_write_entry_req, msg_rsp) \ | |
166 | M(NPC_MCAM_ENA_ENTRY, 0x6003, npc_mcam_ena_entry, \ | |
167 | npc_mcam_ena_dis_entry_req, msg_rsp) \ | |
168 | M(NPC_MCAM_DIS_ENTRY, 0x6004, npc_mcam_dis_entry, \ | |
169 | npc_mcam_ena_dis_entry_req, msg_rsp) \ | |
170 | M(NPC_MCAM_SHIFT_ENTRY, 0x6005, npc_mcam_shift_entry, npc_mcam_shift_entry_req,\ | |
171 | npc_mcam_shift_entry_rsp) \ | |
7fbb3f23 SG |
172 | M(NPC_MCAM_ALLOC_COUNTER, 0x6006, npc_mcam_alloc_counter, \ |
173 | npc_mcam_alloc_counter_req, \ | |
174 | npc_mcam_alloc_counter_rsp) \ | |
175 | M(NPC_MCAM_FREE_COUNTER, 0x6007, npc_mcam_free_counter, \ | |
176 | npc_mcam_oper_counter_req, msg_rsp) \ | |
a958dd59 SG |
177 | M(NPC_MCAM_UNMAP_COUNTER, 0x6008, npc_mcam_unmap_counter, \ |
178 | npc_mcam_unmap_counter_req, msg_rsp) \ | |
7fbb3f23 SG |
179 | M(NPC_MCAM_CLEAR_COUNTER, 0x6009, npc_mcam_clear_counter, \ |
180 | npc_mcam_oper_counter_req, msg_rsp) \ | |
181 | M(NPC_MCAM_COUNTER_STATS, 0x600a, npc_mcam_counter_stats, \ | |
182 | npc_mcam_oper_counter_req, \ | |
183 | npc_mcam_oper_counter_rsp) \ | |
63be91c8 SG |
184 | M(NPC_MCAM_ALLOC_AND_WRITE_ENTRY, 0x600b, npc_mcam_alloc_and_write_entry, \ |
185 | npc_mcam_alloc_and_write_entry_req, \ | |
186 | npc_mcam_alloc_and_write_entry_rsp) \ | |
631e70bb SS |
187 | M(NPC_GET_KEX_CFG, 0x600c, npc_get_kex_cfg, \ |
188 | msg_req, npc_get_kex_cfg_rsp) \ | |
746ea742 | 189 | /* NIX mbox IDs (range 0x8000 - 0xFFFF) */ \ |
eac66686 SG |
190 | M(NIX_LF_ALLOC, 0x8000, nix_lf_alloc, \ |
191 | nix_lf_alloc_req, nix_lf_alloc_rsp) \ | |
192 | M(NIX_LF_FREE, 0x8001, nix_lf_free, msg_req, msg_rsp) \ | |
193 | M(NIX_AQ_ENQ, 0x8002, nix_aq_enq, nix_aq_enq_req, nix_aq_enq_rsp) \ | |
194 | M(NIX_HWCTX_DISABLE, 0x8003, nix_hwctx_disable, \ | |
195 | hwctx_disable_req, msg_rsp) \ | |
196 | M(NIX_TXSCH_ALLOC, 0x8004, nix_txsch_alloc, \ | |
197 | nix_txsch_alloc_req, nix_txsch_alloc_rsp) \ | |
198 | M(NIX_TXSCH_FREE, 0x8005, nix_txsch_free, nix_txsch_free_req, msg_rsp) \ | |
199 | M(NIX_TXSCHQ_CFG, 0x8006, nix_txschq_cfg, nix_txschq_config, msg_rsp) \ | |
200 | M(NIX_STATS_RST, 0x8007, nix_stats_rst, msg_req, msg_rsp) \ | |
201 | M(NIX_VTAG_CFG, 0x8008, nix_vtag_cfg, nix_vtag_config, msg_rsp) \ | |
202 | M(NIX_RSS_FLOWKEY_CFG, 0x8009, nix_rss_flowkey_cfg, \ | |
bd522d68 JJ |
203 | nix_rss_flowkey_cfg, \ |
204 | nix_rss_flowkey_cfg_rsp) \ | |
eac66686 | 205 | M(NIX_SET_MAC_ADDR, 0x800a, nix_set_mac_addr, nix_set_mac_addr, msg_rsp) \ |
9b7dd87a | 206 | M(NIX_SET_RX_MODE, 0x800b, nix_set_rx_mode, nix_rx_mode, msg_rsp) \ |
40df309e SG |
207 | M(NIX_SET_HW_FRS, 0x800c, nix_set_hw_frs, nix_frs_cfg, msg_rsp) \ |
208 | M(NIX_LF_START_RX, 0x800d, nix_lf_start_rx, msg_req, msg_rsp) \ | |
86cea61d | 209 | M(NIX_LF_STOP_RX, 0x800e, nix_lf_stop_rx, msg_req, msg_rsp) \ |
a27d7659 KK |
210 | M(NIX_MARK_FORMAT_CFG, 0x800f, nix_mark_format_cfg, \ |
211 | nix_mark_format_cfg, \ | |
212 | nix_mark_format_cfg_rsp) \ | |
159a8a67 | 213 | M(NIX_SET_RX_CFG, 0x8010, nix_set_rx_cfg, nix_rx_cfg, msg_rsp) \ |
da5d32e1 ND |
214 | M(NIX_LSO_FORMAT_CFG, 0x8011, nix_lso_format_cfg, \ |
215 | nix_lso_format_cfg, \ | |
216 | nix_lso_format_cfg_rsp) \ | |
34bfe0eb | 217 | M(NIX_RXVLAN_ALLOC, 0x8012, nix_rxvlan_alloc, msg_req, msg_rsp) \ |
42157217 ZS |
218 | M(NIX_LF_PTP_TX_ENABLE, 0x8013, nix_lf_ptp_tx_enable, msg_req, msg_rsp) \ |
219 | M(NIX_LF_PTP_TX_DISABLE, 0x8014, nix_lf_ptp_tx_disable, msg_req, msg_rsp) \ | |
27150bc4 G |
220 | M(NIX_BP_ENABLE, 0x8016, nix_bp_enable, nix_bp_cfg_req, \ |
221 | nix_bp_cfg_rsp) \ | |
222 | M(NIX_BP_DISABLE, 0x8017, nix_bp_disable, nix_bp_cfg_req, msg_rsp) \ | |
34bfe0eb | 223 | M(NIX_GET_MAC_ADDR, 0x8018, nix_get_mac_addr, msg_req, nix_get_mac_addr_rsp) \ |
021e2e53 | 224 | |
61071a87 LC |
225 | /* Messages initiated by AF (range 0xC00 - 0xDFF) */ |
226 | #define MBOX_UP_CGX_MESSAGES \ | |
eac66686 | 227 | M(CGX_LINK_EVENT, 0xC00, cgx_link_event, cgx_link_info_msg, msg_rsp) |
61071a87 | 228 | |
021e2e53 | 229 | enum { |
eac66686 | 230 | #define M(_name, _id, _1, _2, _3) MBOX_MSG_ ## _name = _id, |
021e2e53 | 231 | MBOX_MESSAGES |
61071a87 | 232 | MBOX_UP_CGX_MESSAGES |
021e2e53 AM |
233 | #undef M |
234 | }; | |
235 | ||
236 | /* Mailbox message formats */ | |
237 | ||
cb30711a SG |
238 | #define RVU_DEFAULT_PF_FUNC 0xFFFF |
239 | ||
021e2e53 AM |
240 | /* Generic request msg used for those mbox messages which |
241 | * don't send any data in the request. | |
242 | */ | |
243 | struct msg_req { | |
244 | struct mbox_msghdr hdr; | |
245 | }; | |
246 | ||
247 | /* Generic rsponse msg used a ack or response for those mbox | |
248 | * messages which doesn't have a specific rsp msg format. | |
249 | */ | |
250 | struct msg_rsp { | |
251 | struct mbox_msghdr hdr; | |
252 | }; | |
253 | ||
c554f9c1 G |
254 | /* RVU mailbox error codes |
255 | * Range 256 - 300. | |
256 | */ | |
257 | enum rvu_af_status { | |
258 | RVU_INVALID_VF_ID = -256, | |
259 | }; | |
260 | ||
7304ac45 SG |
261 | struct ready_msg_rsp { |
262 | struct mbox_msghdr hdr; | |
4f4eebf2 LC |
263 | u16 sclk_freq; /* SCLK frequency (in MHz) */ |
264 | u16 rclk_freq; /* RCLK frequency (in MHz) */ | |
7304ac45 SG |
265 | }; |
266 | ||
746ea742 SG |
267 | /* Structure for requesting resource provisioning. |
268 | * 'modify' flag to be used when either requesting more | |
269 | * or to detach partial of a cetain resource type. | |
270 | * Rest of the fields specify how many of what type to | |
271 | * be attached. | |
272 | */ | |
273 | struct rsrc_attach { | |
274 | struct mbox_msghdr hdr; | |
275 | u8 modify:1; | |
276 | u8 npalf:1; | |
277 | u8 nixlf:1; | |
278 | u16 sso; | |
279 | u16 ssow; | |
280 | u16 timlfs; | |
281 | u16 cptlfs; | |
282 | }; | |
283 | ||
284 | /* Structure for relinquishing resources. | |
285 | * 'partial' flag to be used when relinquishing all resources | |
286 | * but only of a certain type. If not set, all resources of all | |
287 | * types provisioned to the RVU function will be detached. | |
288 | */ | |
289 | struct rsrc_detach { | |
290 | struct mbox_msghdr hdr; | |
291 | u8 partial:1; | |
292 | u8 npalf:1; | |
293 | u8 nixlf:1; | |
294 | u8 sso:1; | |
295 | u8 ssow:1; | |
296 | u8 timlfs:1; | |
297 | u8 cptlfs:1; | |
298 | }; | |
299 | ||
756051e2 SG |
300 | #define MSIX_VECTOR_INVALID 0xFFFF |
301 | #define MAX_RVU_BLKLF_CNT 256 | |
302 | ||
303 | struct msix_offset_rsp { | |
304 | struct mbox_msghdr hdr; | |
305 | u16 npa_msixoff; | |
306 | u16 nix_msixoff; | |
307 | u8 sso; | |
308 | u8 ssow; | |
309 | u8 timlfs; | |
310 | u8 cptlfs; | |
311 | u16 sso_msixoff[MAX_RVU_BLKLF_CNT]; | |
312 | u16 ssow_msixoff[MAX_RVU_BLKLF_CNT]; | |
313 | u16 timlf_msixoff[MAX_RVU_BLKLF_CNT]; | |
314 | u16 cptlf_msixoff[MAX_RVU_BLKLF_CNT]; | |
315 | }; | |
316 | ||
5d9b976d SG |
317 | struct get_hw_cap_rsp { |
318 | struct mbox_msghdr hdr; | |
319 | u8 nix_fixed_txschq_mapping; /* Schq mapping fixed or flexible */ | |
320 | u8 nix_shaping; /* Is shaping and coloring supported */ | |
321 | }; | |
322 | ||
66208910 CJ |
323 | /* CGX mbox message formats */ |
324 | ||
325 | struct cgx_stats_rsp { | |
326 | struct mbox_msghdr hdr; | |
327 | #define CGX_RX_STATS_COUNT 13 | |
328 | #define CGX_TX_STATS_COUNT 18 | |
329 | u64 rx_stats[CGX_RX_STATS_COUNT]; | |
330 | u64 tx_stats[CGX_TX_STATS_COUNT]; | |
331 | }; | |
332 | ||
96be2e0d VR |
333 | /* Structure for requesting the operation for |
334 | * setting/getting mac address in the CGX interface | |
335 | */ | |
336 | struct cgx_mac_addr_set_or_get { | |
337 | struct mbox_msghdr hdr; | |
338 | u8 mac_addr[ETH_ALEN]; | |
339 | }; | |
61071a87 LC |
340 | |
341 | struct cgx_link_user_info { | |
342 | uint64_t link_up:1; | |
343 | uint64_t full_duplex:1; | |
344 | uint64_t lmac_type_id:4; | |
345 | uint64_t speed:20; /* speed in Mbps */ | |
346 | #define LMACTYPE_STR_LEN 16 | |
347 | char lmac_type[LMACTYPE_STR_LEN]; | |
348 | }; | |
349 | ||
350 | struct cgx_link_info_msg { | |
351 | struct mbox_msghdr hdr; | |
352 | struct cgx_link_user_info link_info; | |
353 | }; | |
3fa4c323 | 354 | |
f7e086e7 G |
355 | struct cgx_pause_frm_cfg { |
356 | struct mbox_msghdr hdr; | |
357 | u8 set; | |
358 | /* set = 1 if the request is to config pause frames */ | |
359 | /* set = 0 if the request is to fetch pause frames config */ | |
360 | u8 rx_pause; | |
361 | u8 tx_pause; | |
362 | }; | |
363 | ||
3fa4c323 SG |
364 | /* NPA mbox message formats */ |
365 | ||
366 | /* NPA mailbox error codes | |
367 | * Range 301 - 400. | |
368 | */ | |
369 | enum npa_af_status { | |
370 | NPA_AF_ERR_PARAM = -301, | |
371 | NPA_AF_ERR_AQ_FULL = -302, | |
372 | NPA_AF_ERR_AQ_ENQUEUE = -303, | |
373 | NPA_AF_ERR_AF_LF_INVALID = -304, | |
374 | NPA_AF_ERR_AF_LF_ALLOC = -305, | |
375 | NPA_AF_ERR_LF_RESET = -306, | |
376 | }; | |
377 | ||
378 | /* For NPA LF context alloc and init */ | |
379 | struct npa_lf_alloc_req { | |
380 | struct mbox_msghdr hdr; | |
381 | int node; | |
382 | int aura_sz; /* No of auras */ | |
383 | u32 nr_pools; /* No of pools */ | |
ee1e7591 | 384 | u64 way_mask; |
3fa4c323 SG |
385 | }; |
386 | ||
387 | struct npa_lf_alloc_rsp { | |
388 | struct mbox_msghdr hdr; | |
389 | u32 stack_pg_ptrs; /* No of ptrs per stack page */ | |
390 | u32 stack_pg_bytes; /* Size of stack page */ | |
391 | u16 qints; /* NPA_AF_CONST::QINTS */ | |
392 | }; | |
393 | ||
4a3581cd SG |
394 | /* NPA AQ enqueue msg */ |
395 | struct npa_aq_enq_req { | |
396 | struct mbox_msghdr hdr; | |
397 | u32 aura_id; | |
398 | u8 ctype; | |
399 | u8 op; | |
400 | union { | |
401 | /* Valid when op == WRITE/INIT and ctype == AURA. | |
402 | * LF fills the pool_id in aura.pool_addr. AF will translate | |
403 | * the pool_id to pool context pointer. | |
404 | */ | |
405 | struct npa_aura_s aura; | |
406 | /* Valid when op == WRITE/INIT and ctype == POOL */ | |
407 | struct npa_pool_s pool; | |
408 | }; | |
409 | /* Mask data when op == WRITE (1=write, 0=don't write) */ | |
410 | union { | |
411 | /* Valid when op == WRITE and ctype == AURA */ | |
412 | struct npa_aura_s aura_mask; | |
413 | /* Valid when op == WRITE and ctype == POOL */ | |
414 | struct npa_pool_s pool_mask; | |
415 | }; | |
416 | }; | |
417 | ||
418 | struct npa_aq_enq_rsp { | |
419 | struct mbox_msghdr hdr; | |
420 | union { | |
421 | /* Valid when op == READ and ctype == AURA */ | |
422 | struct npa_aura_s aura; | |
423 | /* Valid when op == READ and ctype == POOL */ | |
424 | struct npa_pool_s pool; | |
425 | }; | |
426 | }; | |
427 | ||
57856dde G |
428 | /* Disable all contexts of type 'ctype' */ |
429 | struct hwctx_disable_req { | |
430 | struct mbox_msghdr hdr; | |
431 | u8 ctype; | |
432 | }; | |
433 | ||
f9274958 SG |
434 | /* NIX mbox message formats */ |
435 | ||
cb30711a SG |
436 | /* NIX mailbox error codes |
437 | * Range 401 - 500. | |
438 | */ | |
439 | enum nix_af_status { | |
440 | NIX_AF_ERR_PARAM = -401, | |
441 | NIX_AF_ERR_AQ_FULL = -402, | |
442 | NIX_AF_ERR_AQ_ENQUEUE = -403, | |
443 | NIX_AF_ERR_AF_LF_INVALID = -404, | |
444 | NIX_AF_ERR_AF_LF_ALLOC = -405, | |
445 | NIX_AF_ERR_TLX_ALLOC_FAIL = -406, | |
446 | NIX_AF_ERR_TLX_INVALID = -407, | |
447 | NIX_AF_ERR_RSS_SIZE_INVALID = -408, | |
448 | NIX_AF_ERR_RSS_GRPS_INVALID = -409, | |
449 | NIX_AF_ERR_FRS_INVALID = -410, | |
450 | NIX_AF_ERR_RX_LINK_INVALID = -411, | |
451 | NIX_AF_INVAL_TXSCHQ_CFG = -412, | |
452 | NIX_AF_SMQ_FLUSH_FAILED = -413, | |
453 | NIX_AF_ERR_LF_RESET = -414, | |
b648366c | 454 | NIX_AF_ERR_RSS_NOSPC_FIELD = -415, |
7ee74697 | 455 | NIX_AF_ERR_RSS_NOSPC_ALGO = -416, |
a27d7659 | 456 | NIX_AF_ERR_MARK_CFG_FAIL = -417, |
da5d32e1 | 457 | NIX_AF_ERR_LSO_CFG_FAIL = -418, |
f325d3f4 SG |
458 | NIX_AF_INVAL_NPA_PF_FUNC = -419, |
459 | NIX_AF_INVAL_SSO_PF_FUNC = -420, | |
cb30711a SG |
460 | }; |
461 | ||
462 | /* For NIX LF context alloc and init */ | |
463 | struct nix_lf_alloc_req { | |
464 | struct mbox_msghdr hdr; | |
465 | int node; | |
466 | u32 rq_cnt; /* No of receive queues */ | |
467 | u32 sq_cnt; /* No of send queues */ | |
468 | u32 cq_cnt; /* No of completion queues */ | |
469 | u8 xqe_sz; | |
470 | u16 rss_sz; | |
471 | u8 rss_grps; | |
472 | u16 npa_func; | |
473 | u16 sso_func; | |
474 | u64 rx_cfg; /* See NIX_AF_LF(0..127)_RX_CFG */ | |
ee1e7591 | 475 | u64 way_mask; |
cb30711a SG |
476 | }; |
477 | ||
478 | struct nix_lf_alloc_rsp { | |
479 | struct mbox_msghdr hdr; | |
480 | u16 sqb_size; | |
f5721f76 SK |
481 | u16 rx_chan_base; |
482 | u16 tx_chan_base; | |
483 | u8 rx_chan_cnt; /* total number of RX channels */ | |
484 | u8 tx_chan_cnt; /* total number of TX channels */ | |
59360e98 SG |
485 | u8 lso_tsov4_idx; |
486 | u8 lso_tsov6_idx; | |
cb30711a | 487 | u8 mac_addr[ETH_ALEN]; |
34425e8c KK |
488 | u8 lf_rx_stats; /* NIX_AF_CONST1::LF_RX_STATS */ |
489 | u8 lf_tx_stats; /* NIX_AF_CONST1::LF_TX_STATS */ | |
490 | u16 cints; /* NIX_AF_CONST2::CINTS */ | |
491 | u16 qints; /* NIX_AF_CONST2::QINTS */ | |
cb30711a SG |
492 | }; |
493 | ||
ffb0abd7 SG |
494 | /* NIX AQ enqueue msg */ |
495 | struct nix_aq_enq_req { | |
496 | struct mbox_msghdr hdr; | |
497 | u32 qidx; | |
498 | u8 ctype; | |
499 | u8 op; | |
500 | union { | |
501 | struct nix_rq_ctx_s rq; | |
502 | struct nix_sq_ctx_s sq; | |
503 | struct nix_cq_ctx_s cq; | |
504 | struct nix_rsse_s rss; | |
505 | struct nix_rx_mce_s mce; | |
506 | }; | |
507 | union { | |
508 | struct nix_rq_ctx_s rq_mask; | |
509 | struct nix_sq_ctx_s sq_mask; | |
510 | struct nix_cq_ctx_s cq_mask; | |
511 | struct nix_rsse_s rss_mask; | |
512 | struct nix_rx_mce_s mce_mask; | |
513 | }; | |
514 | }; | |
515 | ||
516 | struct nix_aq_enq_rsp { | |
517 | struct mbox_msghdr hdr; | |
518 | union { | |
519 | struct nix_rq_ctx_s rq; | |
520 | struct nix_sq_ctx_s sq; | |
521 | struct nix_cq_ctx_s cq; | |
522 | struct nix_rsse_s rss; | |
523 | struct nix_rx_mce_s mce; | |
524 | }; | |
525 | }; | |
526 | ||
a3e7121c SG |
527 | /* Tx scheduler/shaper mailbox messages */ |
528 | ||
529 | #define MAX_TXSCHQ_PER_FUNC 128 | |
530 | ||
531 | struct nix_txsch_alloc_req { | |
532 | struct mbox_msghdr hdr; | |
533 | /* Scheduler queue count request at each level */ | |
534 | u16 schq_contig[NIX_TXSCH_LVL_CNT]; /* No of contiguous queues */ | |
535 | u16 schq[NIX_TXSCH_LVL_CNT]; /* No of non-contiguous queues */ | |
536 | }; | |
537 | ||
538 | struct nix_txsch_alloc_rsp { | |
539 | struct mbox_msghdr hdr; | |
540 | /* Scheduler queue count allocated at each level */ | |
541 | u16 schq_contig[NIX_TXSCH_LVL_CNT]; | |
542 | u16 schq[NIX_TXSCH_LVL_CNT]; | |
543 | /* Scheduler queue list allocated at each level */ | |
544 | u16 schq_contig_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC]; | |
545 | u16 schq_list[NIX_TXSCH_LVL_CNT][MAX_TXSCHQ_PER_FUNC]; | |
5d9b976d SG |
546 | u8 aggr_level; /* Traffic aggregation scheduler level */ |
547 | u8 aggr_lvl_rr_prio; /* Aggregation lvl's RR_PRIO config */ | |
548 | u8 link_cfg_lvl; /* LINKX_CFG CSRs mapped to TL3 or TL2's index ? */ | |
a3e7121c SG |
549 | }; |
550 | ||
551 | struct nix_txsch_free_req { | |
552 | struct mbox_msghdr hdr; | |
553 | #define TXSCHQ_FREE_ALL BIT_ULL(0) | |
554 | u16 flags; | |
555 | /* Scheduler queue level to be freed */ | |
556 | u16 schq_lvl; | |
557 | /* List of scheduler queues to be freed */ | |
558 | u16 schq; | |
559 | }; | |
560 | ||
b279bbb3 SG |
561 | struct nix_txschq_config { |
562 | struct mbox_msghdr hdr; | |
563 | u8 lvl; /* SMQ/MDQ/TL4/TL3/TL2/TL1 */ | |
564 | #define TXSCHQ_IDX_SHIFT 16 | |
565 | #define TXSCHQ_IDX_MASK (BIT_ULL(10) - 1) | |
566 | #define TXSCHQ_IDX(reg, shift) (((reg) >> (shift)) & TXSCHQ_IDX_MASK) | |
567 | u8 num_regs; | |
568 | #define MAX_REGS_PER_MBOX_MSG 20 | |
569 | u64 reg[MAX_REGS_PER_MBOX_MSG]; | |
570 | u64 regval[MAX_REGS_PER_MBOX_MSG]; | |
571 | }; | |
572 | ||
d02913d9 VA |
573 | struct nix_vtag_config { |
574 | struct mbox_msghdr hdr; | |
86cea61d | 575 | /* '0' for 4 octet VTAG, '1' for 8 octet VTAG */ |
d02913d9 VA |
576 | u8 vtag_size; |
577 | /* cfg_type is '0' for tx vlan cfg | |
578 | * cfg_type is '1' for rx vlan cfg | |
579 | */ | |
580 | u8 cfg_type; | |
581 | union { | |
582 | /* valid when cfg_type is '0' */ | |
583 | struct { | |
584 | /* tx vlan0 tag(C-VLAN) */ | |
585 | u64 vlan0; | |
586 | /* tx vlan1 tag(S-VLAN) */ | |
587 | u64 vlan1; | |
588 | /* insert tx vlan tag */ | |
589 | u8 insert_vlan :1; | |
590 | /* insert tx double vlan tag */ | |
591 | u8 double_vlan :1; | |
592 | } tx; | |
593 | ||
594 | /* valid when cfg_type is '1' */ | |
595 | struct { | |
86cea61d | 596 | /* rx vtag type index, valid values are in 0..7 range */ |
d02913d9 VA |
597 | u8 vtag_type; |
598 | /* rx vtag strip */ | |
599 | u8 strip_vtag :1; | |
600 | /* rx vtag capture */ | |
601 | u8 capture_vtag :1; | |
602 | } rx; | |
603 | }; | |
604 | }; | |
605 | ||
cc96b0e9 SG |
606 | struct nix_rss_flowkey_cfg { |
607 | struct mbox_msghdr hdr; | |
608 | int mcam_index; /* MCAM entry index to modify */ | |
bd522d68 JJ |
609 | #define NIX_FLOW_KEY_TYPE_PORT BIT(0) |
610 | #define NIX_FLOW_KEY_TYPE_IPV4 BIT(1) | |
611 | #define NIX_FLOW_KEY_TYPE_IPV6 BIT(2) | |
612 | #define NIX_FLOW_KEY_TYPE_TCP BIT(3) | |
613 | #define NIX_FLOW_KEY_TYPE_UDP BIT(4) | |
614 | #define NIX_FLOW_KEY_TYPE_SCTP BIT(5) | |
206ff848 KK |
615 | #define NIX_FLOW_KEY_TYPE_NVGRE BIT(6) |
616 | #define NIX_FLOW_KEY_TYPE_VXLAN BIT(7) | |
617 | #define NIX_FLOW_KEY_TYPE_GENEVE BIT(8) | |
618 | #define NIX_FLOW_KEY_TYPE_ETH_DMAC BIT(9) | |
619 | #define NIX_FLOW_KEY_TYPE_IPV6_EXT BIT(10) | |
620 | #define NIX_FLOW_KEY_TYPE_GTPU BIT(11) | |
621 | #define NIX_FLOW_KEY_TYPE_INNR_IPV4 BIT(12) | |
622 | #define NIX_FLOW_KEY_TYPE_INNR_IPV6 BIT(13) | |
623 | #define NIX_FLOW_KEY_TYPE_INNR_TCP BIT(14) | |
624 | #define NIX_FLOW_KEY_TYPE_INNR_UDP BIT(15) | |
625 | #define NIX_FLOW_KEY_TYPE_INNR_SCTP BIT(16) | |
626 | #define NIX_FLOW_KEY_TYPE_INNR_ETH_DMAC BIT(17) | |
cc96b0e9 SG |
627 | u32 flowkey_cfg; /* Flowkey types selected */ |
628 | u8 group; /* RSS context or group */ | |
629 | }; | |
630 | ||
bd522d68 JJ |
631 | struct nix_rss_flowkey_cfg_rsp { |
632 | struct mbox_msghdr hdr; | |
633 | u8 alg_idx; /* Selected algo index */ | |
634 | }; | |
635 | ||
6f03cf10 SG |
636 | struct nix_set_mac_addr { |
637 | struct mbox_msghdr hdr; | |
638 | u8 mac_addr[ETH_ALEN]; /* MAC address to be set for this pcifunc */ | |
639 | }; | |
640 | ||
34bfe0eb SG |
641 | struct nix_get_mac_addr_rsp { |
642 | struct mbox_msghdr hdr; | |
643 | u8 mac_addr[ETH_ALEN]; | |
644 | }; | |
645 | ||
a27d7659 KK |
646 | struct nix_mark_format_cfg { |
647 | struct mbox_msghdr hdr; | |
648 | u8 offset; | |
649 | u8 y_mask; | |
650 | u8 y_val; | |
651 | u8 r_mask; | |
652 | u8 r_val; | |
653 | }; | |
654 | ||
655 | struct nix_mark_format_cfg_rsp { | |
656 | struct mbox_msghdr hdr; | |
657 | u8 mark_format_idx; | |
658 | }; | |
659 | ||
d6f092ca SG |
660 | struct nix_rx_mode { |
661 | struct mbox_msghdr hdr; | |
662 | #define NIX_RX_MODE_UCAST BIT(0) | |
663 | #define NIX_RX_MODE_PROMISC BIT(1) | |
664 | #define NIX_RX_MODE_ALLMULTI BIT(2) | |
665 | u16 mode; | |
666 | }; | |
667 | ||
159a8a67 VR |
668 | struct nix_rx_cfg { |
669 | struct mbox_msghdr hdr; | |
670 | #define NIX_RX_OL3_VERIFY BIT(0) | |
671 | #define NIX_RX_OL4_VERIFY BIT(1) | |
672 | u8 len_verify; /* Outer L3/L4 len check */ | |
673 | #define NIX_RX_CSUM_OL4_VERIFY BIT(0) | |
674 | u8 csum_verify; /* Outer L4 checksum verification */ | |
675 | }; | |
676 | ||
9b7dd87a SG |
677 | struct nix_frs_cfg { |
678 | struct mbox_msghdr hdr; | |
679 | u8 update_smq; /* Update SMQ's min/max lens */ | |
680 | u8 update_minlen; /* Set minlen also */ | |
681 | u8 sdp_link; /* Set SDP RX link */ | |
682 | u16 maxlen; | |
683 | u16 minlen; | |
684 | }; | |
685 | ||
da5d32e1 ND |
686 | struct nix_lso_format_cfg { |
687 | struct mbox_msghdr hdr; | |
688 | u64 field_mask; | |
689 | #define NIX_LSO_FIELD_MAX 8 | |
690 | u64 fields[NIX_LSO_FIELD_MAX]; | |
691 | }; | |
692 | ||
693 | struct nix_lso_format_cfg_rsp { | |
694 | struct mbox_msghdr hdr; | |
695 | u8 lso_format_idx; | |
696 | }; | |
697 | ||
27150bc4 G |
698 | struct nix_bp_cfg_req { |
699 | struct mbox_msghdr hdr; | |
700 | u16 chan_base; /* Starting channel number */ | |
701 | u8 chan_cnt; /* Number of channels */ | |
702 | u8 bpid_per_chan; | |
703 | /* bpid_per_chan = 0 assigns single bp id for range of channels */ | |
704 | /* bpid_per_chan = 1 assigns separate bp id for each channel */ | |
705 | }; | |
706 | ||
707 | /* PF can be mapped to either CGX or LBK interface, | |
708 | * so maximum 64 channels are possible. | |
709 | */ | |
710 | #define NIX_MAX_BPID_CHAN 64 | |
711 | struct nix_bp_cfg_rsp { | |
712 | struct mbox_msghdr hdr; | |
713 | u16 chan_bpid[NIX_MAX_BPID_CHAN]; /* Channel and bpid mapping */ | |
714 | u8 chan_cnt; /* Number of channel for which bpids are assigned */ | |
715 | }; | |
716 | ||
f9274958 SG |
717 | /* NPC mbox message structs */ |
718 | ||
719 | #define NPC_MCAM_ENTRY_INVALID 0xFFFF | |
720 | #define NPC_MCAM_INVALID_MAP 0xFFFF | |
721 | ||
722 | /* NPC mailbox error codes | |
723 | * Range 701 - 800. | |
724 | */ | |
725 | enum npc_af_status { | |
726 | NPC_MCAM_INVALID_REQ = -701, | |
727 | NPC_MCAM_ALLOC_DENIED = -702, | |
728 | NPC_MCAM_ALLOC_FAILED = -703, | |
729 | NPC_MCAM_PERM_DENIED = -704, | |
730 | }; | |
731 | ||
732 | struct npc_mcam_alloc_entry_req { | |
733 | struct mbox_msghdr hdr; | |
734 | #define NPC_MAX_NONCONTIG_ENTRIES 256 | |
735 | u8 contig; /* Contiguous entries ? */ | |
736 | #define NPC_MCAM_ANY_PRIO 0 | |
737 | #define NPC_MCAM_LOWER_PRIO 1 | |
738 | #define NPC_MCAM_HIGHER_PRIO 2 | |
739 | u8 priority; /* Lower or higher w.r.t ref_entry */ | |
740 | u16 ref_entry; | |
741 | u16 count; /* Number of entries requested */ | |
742 | }; | |
743 | ||
744 | struct npc_mcam_alloc_entry_rsp { | |
745 | struct mbox_msghdr hdr; | |
746 | u16 entry; /* Entry allocated or start index if contiguous. | |
747 | * Invalid incase of non-contiguous. | |
748 | */ | |
749 | u16 count; /* Number of entries allocated */ | |
750 | u16 free_count; /* Number of entries available */ | |
751 | u16 entry_list[NPC_MAX_NONCONTIG_ENTRIES]; | |
752 | }; | |
753 | ||
754 | struct npc_mcam_free_entry_req { | |
755 | struct mbox_msghdr hdr; | |
756 | u16 entry; /* Entry index to be freed */ | |
757 | u8 all; /* If all entries allocated to this PFVF to be freed */ | |
758 | }; | |
759 | ||
651cd265 SG |
760 | struct mcam_entry { |
761 | #define NPC_MAX_KWS_IN_KEY 7 /* Number of keywords in max keywidth */ | |
762 | u64 kw[NPC_MAX_KWS_IN_KEY]; | |
763 | u64 kw_mask[NPC_MAX_KWS_IN_KEY]; | |
764 | u64 action; | |
765 | u64 vtag_action; | |
766 | }; | |
767 | ||
768 | struct npc_mcam_write_entry_req { | |
769 | struct mbox_msghdr hdr; | |
770 | struct mcam_entry entry_data; | |
771 | u16 entry; /* MCAM entry to write this match key */ | |
772 | u16 cntr; /* Counter for this MCAM entry */ | |
773 | u8 intf; /* Rx or Tx interface */ | |
774 | u8 enable_entry;/* Enable this MCAM entry ? */ | |
775 | u8 set_cntr; /* Set counter for this entry ? */ | |
776 | }; | |
777 | ||
778 | /* Enable/Disable a given entry */ | |
779 | struct npc_mcam_ena_dis_entry_req { | |
780 | struct mbox_msghdr hdr; | |
781 | u16 entry; | |
782 | }; | |
783 | ||
784 | struct npc_mcam_shift_entry_req { | |
785 | struct mbox_msghdr hdr; | |
786 | #define NPC_MCAM_MAX_SHIFTS 64 | |
787 | u16 curr_entry[NPC_MCAM_MAX_SHIFTS]; | |
788 | u16 new_entry[NPC_MCAM_MAX_SHIFTS]; | |
789 | u16 shift_count; /* Number of entries to shift */ | |
790 | }; | |
791 | ||
792 | struct npc_mcam_shift_entry_rsp { | |
793 | struct mbox_msghdr hdr; | |
794 | u16 failed_entry_idx; /* Index in 'curr_entry', not entry itself */ | |
795 | }; | |
796 | ||
7fbb3f23 SG |
797 | struct npc_mcam_alloc_counter_req { |
798 | struct mbox_msghdr hdr; | |
799 | u8 contig; /* Contiguous counters ? */ | |
800 | #define NPC_MAX_NONCONTIG_COUNTERS 64 | |
801 | u16 count; /* Number of counters requested */ | |
802 | }; | |
803 | ||
804 | struct npc_mcam_alloc_counter_rsp { | |
805 | struct mbox_msghdr hdr; | |
806 | u16 cntr; /* Counter allocated or start index if contiguous. | |
807 | * Invalid incase of non-contiguous. | |
808 | */ | |
809 | u16 count; /* Number of counters allocated */ | |
810 | u16 cntr_list[NPC_MAX_NONCONTIG_COUNTERS]; | |
811 | }; | |
812 | ||
813 | struct npc_mcam_oper_counter_req { | |
814 | struct mbox_msghdr hdr; | |
815 | u16 cntr; /* Free a counter or clear/fetch it's stats */ | |
816 | }; | |
817 | ||
818 | struct npc_mcam_oper_counter_rsp { | |
819 | struct mbox_msghdr hdr; | |
820 | u64 stat; /* valid only while fetching counter's stats */ | |
821 | }; | |
822 | ||
a958dd59 SG |
823 | struct npc_mcam_unmap_counter_req { |
824 | struct mbox_msghdr hdr; | |
825 | u16 cntr; | |
826 | u16 entry; /* Entry and counter to be unmapped */ | |
827 | u8 all; /* Unmap all entries using this counter ? */ | |
828 | }; | |
829 | ||
63be91c8 SG |
830 | struct npc_mcam_alloc_and_write_entry_req { |
831 | struct mbox_msghdr hdr; | |
832 | struct mcam_entry entry_data; | |
833 | u16 ref_entry; | |
834 | u8 priority; /* Lower or higher w.r.t ref_entry */ | |
835 | u8 intf; /* Rx or Tx interface */ | |
836 | u8 enable_entry;/* Enable this MCAM entry ? */ | |
837 | u8 alloc_cntr; /* Allocate counter and map ? */ | |
838 | }; | |
839 | ||
840 | struct npc_mcam_alloc_and_write_entry_rsp { | |
841 | struct mbox_msghdr hdr; | |
842 | u16 entry; | |
843 | u16 cntr; | |
844 | }; | |
845 | ||
631e70bb SS |
846 | struct npc_get_kex_cfg_rsp { |
847 | struct mbox_msghdr hdr; | |
848 | u64 rx_keyx_cfg; /* NPC_AF_INTF(0)_KEX_CFG */ | |
849 | u64 tx_keyx_cfg; /* NPC_AF_INTF(1)_KEX_CFG */ | |
850 | #define NPC_MAX_INTF 2 | |
851 | #define NPC_MAX_LID 8 | |
852 | #define NPC_MAX_LT 16 | |
853 | #define NPC_MAX_LD 2 | |
854 | #define NPC_MAX_LFL 16 | |
855 | /* NPC_AF_KEX_LDATA(0..1)_FLAGS_CFG */ | |
856 | u64 kex_ld_flags[NPC_MAX_LD]; | |
857 | /* NPC_AF_INTF(0..1)_LID(0..7)_LT(0..15)_LD(0..1)_CFG */ | |
858 | u64 intf_lid_lt_ld[NPC_MAX_INTF][NPC_MAX_LID][NPC_MAX_LT][NPC_MAX_LD]; | |
859 | /* NPC_AF_INTF(0..1)_LDATA(0..1)_FLAGS(0..15)_CFG */ | |
860 | u64 intf_ld_flags[NPC_MAX_INTF][NPC_MAX_LD][NPC_MAX_LFL]; | |
23705adb VA |
861 | #define MKEX_NAME_LEN 128 |
862 | u8 mkex_pfl_name[MKEX_NAME_LEN]; | |
631e70bb SS |
863 | }; |
864 | ||
021e2e53 | 865 | #endif /* MBOX_H */ |