1
2
3
4
5
6
7#ifndef __ECORE_VF_PF_IF_H__
8#define __ECORE_VF_PF_IF_H__
9
10
11#define T_ETH_INDIRECTION_TABLE_SIZE 128
12#define T_ETH_RSS_KEY_SIZE 10
13
14
15
16
17
18
19struct vf_pf_resc_request {
20 u8 num_rxqs;
21 u8 num_txqs;
22 u8 num_sbs;
23 u8 num_mac_filters;
24 u8 num_vlan_filters;
25 u8 num_mc_filters;
26 u8 num_cids;
27 u8 padding;
28};
29
30struct hw_sb_info {
31 u16 hw_sb_id;
32 u8 sb_qid;
33 u8 padding[5];
34};
35
36
37
38
39
40
41
42
43#define TLV_BUFFER_SIZE 1024
44
45
46
47struct channel_tlv {
48 u16 type;
49 u16 length;
50};
51
52
53
54
55struct vfpf_first_tlv {
56 struct channel_tlv tl;
57 u32 padding;
58 u64 reply_address;
59};
60
61
62struct pfvf_tlv {
63 struct channel_tlv tl;
64 u8 status;
65 u8 padding[3];
66};
67
68
69struct pfvf_def_resp_tlv {
70 struct pfvf_tlv hdr;
71};
72
73
74struct channel_list_end_tlv {
75 struct channel_tlv tl;
76 u8 padding[4];
77};
78
79
80struct vfpf_acquire_tlv {
81 struct vfpf_first_tlv first_tlv;
82
83 struct vf_pf_vfdev_info {
84#ifndef LINUX_REMOVE
85
86
87
88
89
90#endif
91
92#define VFPF_ACQUIRE_CAP_PRE_FP_HSI (1 << 0)
93#define VFPF_ACQUIRE_CAP_100G (1 << 1)
94
95
96
97
98
99
100
101#define VFPF_ACQUIRE_CAP_QUEUE_QIDS (1 << 2)
102
103
104
105
106
107#define VFPF_ACQUIRE_CAP_PHYSICAL_BAR (1 << 3)
108 u64 capabilities;
109 u8 fw_major;
110 u8 fw_minor;
111 u8 fw_revision;
112 u8 fw_engineering;
113 u32 driver_version;
114 u16 opaque_fid;
115 u8 os_type;
116 u8 eth_fp_hsi_major;
117 u8 eth_fp_hsi_minor;
118 u8 padding[3];
119 } vfdev_info;
120
121 struct vf_pf_resc_request resc_request;
122
123 u64 bulletin_addr;
124 u32 bulletin_size;
125 u32 padding;
126};
127
128
129struct vfpf_vport_update_rss_tlv {
130 struct channel_tlv tl;
131
132 u8 update_rss_flags;
133 #define VFPF_UPDATE_RSS_CONFIG_FLAG (1 << 0)
134 #define VFPF_UPDATE_RSS_CAPS_FLAG (1 << 1)
135 #define VFPF_UPDATE_RSS_IND_TABLE_FLAG (1 << 2)
136 #define VFPF_UPDATE_RSS_KEY_FLAG (1 << 3)
137
138 u8 rss_enable;
139 u8 rss_caps;
140 u8 rss_table_size_log;
141 u16 rss_ind_table[T_ETH_INDIRECTION_TABLE_SIZE];
142 u32 rss_key[T_ETH_RSS_KEY_SIZE];
143};
144
145struct pfvf_storm_stats {
146 u32 address;
147 u32 len;
148};
149
150struct pfvf_stats_info {
151 struct pfvf_storm_stats mstats;
152 struct pfvf_storm_stats pstats;
153 struct pfvf_storm_stats tstats;
154 struct pfvf_storm_stats ustats;
155};
156
157
158struct pfvf_acquire_resp_tlv {
159 struct pfvf_tlv hdr;
160
161 struct pf_vf_pfdev_info {
162 u32 chip_num;
163 u32 mfw_ver;
164
165 u16 fw_major;
166 u16 fw_minor;
167 u16 fw_rev;
168 u16 fw_eng;
169
170 u64 capabilities;
171#define PFVF_ACQUIRE_CAP_DEFAULT_UNTAGGED (1 << 0)
172#define PFVF_ACQUIRE_CAP_100G (1 << 1)
173
174
175
176
177
178
179#ifndef LINUX_REMOVE
180
181
182
183#endif
184#define PFVF_ACQUIRE_CAP_POST_FW_OVERRIDE (1 << 2)
185
186
187#define PFVF_ACQUIRE_CAP_QUEUE_QIDS (1 << 3)
188
189 u16 db_size;
190 u8 indices_per_sb;
191 u8 os_type;
192
193
194 u16 chip_rev;
195 u8 dev_type;
196
197
198 u8 bar_size;
199
200 struct pfvf_stats_info stats_info;
201
202 u8 port_mac[ETH_ALEN];
203
204
205
206
207
208
209 u8 major_fp_hsi;
210 u8 minor_fp_hsi;
211 } pfdev_info;
212
213 struct pf_vf_resc {
214
215
216
217
218 #define PFVF_MAX_QUEUES_PER_VF 16
219 #define PFVF_MAX_SBS_PER_VF 16
220 struct hw_sb_info hw_sbs[PFVF_MAX_SBS_PER_VF];
221 u8 hw_qid[PFVF_MAX_QUEUES_PER_VF];
222 u8 cid[PFVF_MAX_QUEUES_PER_VF];
223
224 u8 num_rxqs;
225 u8 num_txqs;
226 u8 num_sbs;
227 u8 num_mac_filters;
228 u8 num_vlan_filters;
229 u8 num_mc_filters;
230 u8 num_cids;
231 u8 padding;
232 } resc;
233
234 u32 bulletin_size;
235 u32 padding;
236};
237
238struct pfvf_start_queue_resp_tlv {
239 struct pfvf_tlv hdr;
240 u32 offset;
241 u8 padding[4];
242};
243
244
245
246
247
248struct vfpf_qid_tlv {
249 struct channel_tlv tl;
250 u8 qid;
251 u8 padding[3];
252};
253
254
255struct vfpf_soft_flr_tlv {
256 struct vfpf_first_tlv first_tlv;
257 u32 reserved1;
258 u32 reserved2;
259};
260
261
262struct vfpf_start_rxq_tlv {
263 struct vfpf_first_tlv first_tlv;
264
265
266 u64 rxq_addr;
267 u64 deprecated_sge_addr;
268 u64 cqe_pbl_addr;
269
270 u16 cqe_pbl_size;
271 u16 hw_sb;
272 u16 rx_qid;
273 u16 hc_rate;
274
275 u16 bd_max_bytes;
276 u16 stat_id;
277 u8 sb_index;
278 u8 padding[3];
279
280};
281
282struct vfpf_start_txq_tlv {
283 struct vfpf_first_tlv first_tlv;
284
285
286 u64 pbl_addr;
287 u16 pbl_size;
288 u16 stat_id;
289 u16 tx_qid;
290 u16 hw_sb;
291
292 u32 flags;
293 u16 hc_rate;
294 u8 sb_index;
295 u8 padding[3];
296};
297
298
299struct vfpf_stop_rxqs_tlv {
300 struct vfpf_first_tlv first_tlv;
301
302 u16 rx_qid;
303
304
305
306
307
308
309
310 u8 num_rxqs;
311
312 u8 cqe_completion;
313 u8 padding[4];
314};
315
316
317struct vfpf_stop_txqs_tlv {
318 struct vfpf_first_tlv first_tlv;
319
320 u16 tx_qid;
321
322
323
324
325
326
327
328 u8 num_txqs;
329 u8 padding[5];
330};
331
332struct vfpf_update_rxq_tlv {
333 struct vfpf_first_tlv first_tlv;
334
335 u64 deprecated_sge_addr[PFVF_MAX_QUEUES_PER_VF];
336
337 u16 rx_qid;
338 u8 num_rxqs;
339 u8 flags;
340 #define VFPF_RXQ_UPD_INIT_SGE_DEPRECATE_FLAG (1 << 0)
341 #define VFPF_RXQ_UPD_COMPLETE_CQE_FLAG (1 << 1)
342 #define VFPF_RXQ_UPD_COMPLETE_EVENT_FLAG (1 << 2)
343
344 u8 padding[4];
345};
346
347
348struct vfpf_q_mac_vlan_filter {
349 u32 flags;
350 #define VFPF_Q_FILTER_DEST_MAC_VALID 0x01
351 #define VFPF_Q_FILTER_VLAN_TAG_VALID 0x02
352 #define VFPF_Q_FILTER_SET_MAC 0x100
353
354 u8 mac[ETH_ALEN];
355 u16 vlan_tag;
356
357 u8 padding[4];
358};
359
360
361struct vfpf_vport_start_tlv {
362 struct vfpf_first_tlv first_tlv;
363
364 u64 sb_addr[PFVF_MAX_SBS_PER_VF];
365
366 u32 tpa_mode;
367 u16 dep1;
368 u16 mtu;
369
370 u8 vport_id;
371 u8 inner_vlan_removal;
372
373 u8 only_untagged;
374 u8 max_buffers_per_cqe;
375
376 u8 padding[4];
377};
378
379
380struct vfpf_vport_update_activate_tlv {
381 struct channel_tlv tl;
382 u8 update_rx;
383 u8 update_tx;
384 u8 active_rx;
385 u8 active_tx;
386};
387
388struct vfpf_vport_update_tx_switch_tlv {
389 struct channel_tlv tl;
390 u8 tx_switching;
391 u8 padding[3];
392};
393
394struct vfpf_vport_update_vlan_strip_tlv {
395 struct channel_tlv tl;
396 u8 remove_vlan;
397 u8 padding[3];
398};
399
400struct vfpf_vport_update_mcast_bin_tlv {
401 struct channel_tlv tl;
402 u8 padding[4];
403
404
405
406
407
408
409 u64 bins[4];
410 u64 obsolete_bins[4];
411};
412
413struct vfpf_vport_update_accept_param_tlv {
414 struct channel_tlv tl;
415 u8 update_rx_mode;
416 u8 update_tx_mode;
417 u8 rx_accept_filter;
418 u8 tx_accept_filter;
419};
420
421struct vfpf_vport_update_accept_any_vlan_tlv {
422 struct channel_tlv tl;
423 u8 update_accept_any_vlan_flg;
424 u8 accept_any_vlan;
425
426 u8 padding[2];
427};
428
429struct vfpf_vport_update_sge_tpa_tlv {
430 struct channel_tlv tl;
431
432 u16 sge_tpa_flags;
433 #define VFPF_TPA_IPV4_EN_FLAG (1 << 0)
434 #define VFPF_TPA_IPV6_EN_FLAG (1 << 1)
435 #define VFPF_TPA_PKT_SPLIT_FLAG (1 << 2)
436 #define VFPF_TPA_HDR_DATA_SPLIT_FLAG (1 << 3)
437 #define VFPF_TPA_GRO_CONSIST_FLAG (1 << 4)
438 #define VFPF_TPA_TUNN_IPV4_EN_FLAG (1 << 5)
439 #define VFPF_TPA_TUNN_IPV6_EN_FLAG (1 << 6)
440
441 u8 update_sge_tpa_flags;
442 #define VFPF_UPDATE_SGE_DEPRECATED_FLAG (1 << 0)
443 #define VFPF_UPDATE_TPA_EN_FLAG (1 << 1)
444 #define VFPF_UPDATE_TPA_PARAM_FLAG (1 << 2)
445
446 u8 max_buffers_per_cqe;
447
448 u16 deprecated_sge_buff_size;
449 u16 tpa_max_size;
450 u16 tpa_min_size_to_start;
451 u16 tpa_min_size_to_cont;
452
453 u8 tpa_max_aggs_num;
454 u8 padding[7];
455
456};
457
458
459
460
461struct vfpf_vport_update_tlv {
462 struct vfpf_first_tlv first_tlv;
463};
464
465struct vfpf_ucast_filter_tlv {
466 struct vfpf_first_tlv first_tlv;
467
468 u8 opcode;
469 u8 type;
470
471 u8 mac[ETH_ALEN];
472
473 u16 vlan;
474 u16 padding[3];
475};
476
477
478struct vfpf_update_tunn_param_tlv {
479 struct vfpf_first_tlv first_tlv;
480
481 u8 tun_mode_update_mask;
482 u8 tunn_mode;
483 u8 update_tun_cls;
484 u8 vxlan_clss;
485 u8 l2gre_clss;
486 u8 ipgre_clss;
487 u8 l2geneve_clss;
488 u8 ipgeneve_clss;
489 u8 update_geneve_port;
490 u8 update_vxlan_port;
491 u16 geneve_port;
492 u16 vxlan_port;
493 u8 padding[2];
494};
495
496struct pfvf_update_tunn_param_tlv {
497 struct pfvf_tlv hdr;
498
499 u16 tunn_feature_mask;
500 u8 vxlan_mode;
501 u8 l2geneve_mode;
502 u8 ipgeneve_mode;
503 u8 l2gre_mode;
504 u8 ipgre_mode;
505 u8 vxlan_clss;
506 u8 l2gre_clss;
507 u8 ipgre_clss;
508 u8 l2geneve_clss;
509 u8 ipgeneve_clss;
510 u16 vxlan_udp_port;
511 u16 geneve_udp_port;
512};
513
514struct tlv_buffer_size {
515 u8 tlv_buffer[TLV_BUFFER_SIZE];
516};
517
518struct vfpf_update_coalesce {
519 struct vfpf_first_tlv first_tlv;
520 u16 rx_coal;
521 u16 tx_coal;
522 u16 qid;
523 u8 padding[2];
524};
525
526struct vfpf_read_coal_req_tlv {
527 struct vfpf_first_tlv first_tlv;
528 u16 qid;
529 u8 is_rx;
530 u8 padding[5];
531};
532
533struct pfvf_read_coal_resp_tlv {
534 struct pfvf_tlv hdr;
535 u16 coal;
536 u8 padding[6];
537};
538
539struct vfpf_bulletin_update_mac_tlv {
540 struct vfpf_first_tlv first_tlv;
541 u8 mac[ETH_ALEN];
542 u8 padding[2];
543};
544
545struct vfpf_update_mtu_tlv {
546 struct vfpf_first_tlv first_tlv;
547 u16 mtu;
548 u8 padding[6];
549};
550
551union vfpf_tlvs {
552 struct vfpf_first_tlv first_tlv;
553 struct vfpf_acquire_tlv acquire;
554 struct vfpf_start_rxq_tlv start_rxq;
555 struct vfpf_start_txq_tlv start_txq;
556 struct vfpf_stop_rxqs_tlv stop_rxqs;
557 struct vfpf_stop_txqs_tlv stop_txqs;
558 struct vfpf_update_rxq_tlv update_rxq;
559 struct vfpf_vport_start_tlv start_vport;
560 struct vfpf_vport_update_tlv vport_update;
561 struct vfpf_ucast_filter_tlv ucast_filter;
562 struct vfpf_update_tunn_param_tlv tunn_param_update;
563 struct vfpf_update_coalesce update_coalesce;
564 struct vfpf_read_coal_req_tlv read_coal_req;
565 struct vfpf_bulletin_update_mac_tlv bulletin_update_mac;
566 struct vfpf_update_mtu_tlv update_mtu;
567 struct vfpf_soft_flr_tlv soft_flr;
568 struct tlv_buffer_size tlv_buf_size;
569};
570
571union pfvf_tlvs {
572 struct pfvf_def_resp_tlv default_resp;
573 struct pfvf_acquire_resp_tlv acquire_resp;
574 struct tlv_buffer_size tlv_buf_size;
575 struct pfvf_start_queue_resp_tlv queue_start;
576 struct pfvf_update_tunn_param_tlv tunn_param_resp;
577 struct pfvf_read_coal_resp_tlv read_coal_resp;
578};
579
580
581
582
583
584
585enum ecore_bulletin_bit {
586
587 MAC_ADDR_FORCED = 0,
588
589
590 VFPF_CHANNEL_INVALID = 1,
591
592
593 VLAN_ADDR_FORCED = 2,
594
595
596 VFPF_BULLETIN_UNTAGGED_DEFAULT = 3,
597 VFPF_BULLETIN_UNTAGGED_DEFAULT_FORCED = 4,
598
599
600
601
602 VFPF_BULLETIN_MAC_ADDR = 5
603};
604
605struct ecore_bulletin_content {
606
607 u32 crc;
608
609 u32 version;
610
611
612 u64 valid_bitmap;
613
614
615 u8 mac[ETH_ALEN];
616
617
618 u8 default_only_untagged;
619 u8 padding;
620
621
622
623
624
625
626 u8 req_autoneg;
627 u8 req_autoneg_pause;
628 u8 req_forced_rx;
629 u8 req_forced_tx;
630 u8 padding2[4];
631
632 u32 req_adv_speed;
633 u32 req_forced_speed;
634 u32 req_loopback;
635 u32 padding3;
636
637 u8 link_up;
638 u8 full_duplex;
639 u8 autoneg;
640 u8 autoneg_complete;
641 u8 parallel_detection;
642 u8 pfc_enabled;
643 u8 partner_tx_flow_ctrl_en;
644 u8 partner_rx_flow_ctrl_en;
645
646 u8 partner_adv_pause;
647 u8 sfp_tx_fault;
648 u16 vxlan_udp_port;
649 u16 geneve_udp_port;
650 u8 padding4[2];
651
652 u32 speed;
653 u32 partner_adv_speed;
654
655 u32 capability_speed;
656
657
658 u16 pvid;
659 u16 padding5;
660};
661
662struct ecore_bulletin {
663 dma_addr_t phys;
664 struct ecore_bulletin_content *p_virt;
665 u32 size;
666};
667
668enum {
669
670
671 CHANNEL_TLV_NONE,
672 CHANNEL_TLV_ACQUIRE,
673 CHANNEL_TLV_VPORT_START,
674 CHANNEL_TLV_VPORT_UPDATE,
675 CHANNEL_TLV_VPORT_TEARDOWN,
676 CHANNEL_TLV_START_RXQ,
677 CHANNEL_TLV_START_TXQ,
678 CHANNEL_TLV_STOP_RXQS,
679 CHANNEL_TLV_STOP_TXQS,
680 CHANNEL_TLV_UPDATE_RXQ,
681 CHANNEL_TLV_INT_CLEANUP,
682 CHANNEL_TLV_CLOSE,
683 CHANNEL_TLV_RELEASE,
684 CHANNEL_TLV_LIST_END,
685 CHANNEL_TLV_UCAST_FILTER,
686 CHANNEL_TLV_VPORT_UPDATE_ACTIVATE,
687 CHANNEL_TLV_VPORT_UPDATE_TX_SWITCH,
688 CHANNEL_TLV_VPORT_UPDATE_VLAN_STRIP,
689 CHANNEL_TLV_VPORT_UPDATE_MCAST,
690 CHANNEL_TLV_VPORT_UPDATE_ACCEPT_PARAM,
691 CHANNEL_TLV_VPORT_UPDATE_RSS,
692 CHANNEL_TLV_VPORT_UPDATE_ACCEPT_ANY_VLAN,
693 CHANNEL_TLV_VPORT_UPDATE_SGE_TPA,
694 CHANNEL_TLV_UPDATE_TUNN_PARAM,
695 CHANNEL_TLV_COALESCE_UPDATE,
696 CHANNEL_TLV_QID,
697 CHANNEL_TLV_COALESCE_READ,
698 CHANNEL_TLV_BULLETIN_UPDATE_MAC,
699 CHANNEL_TLV_UPDATE_MTU,
700 CHANNEL_TLV_RDMA_ACQUIRE,
701 CHANNEL_TLV_RDMA_START,
702 CHANNEL_TLV_RDMA_STOP,
703 CHANNEL_TLV_RDMA_ADD_USER,
704 CHANNEL_TLV_RDMA_REMOVE_USER,
705 CHANNEL_TLV_RDMA_QUERY_COUNTERS,
706 CHANNEL_TLV_RDMA_ALLOC_TID,
707 CHANNEL_TLV_RDMA_REGISTER_TID,
708 CHANNEL_TLV_RDMA_DEREGISTER_TID,
709 CHANNEL_TLV_RDMA_FREE_TID,
710 CHANNEL_TLV_RDMA_CREATE_CQ,
711 CHANNEL_TLV_RDMA_RESIZE_CQ,
712 CHANNEL_TLV_RDMA_DESTROY_CQ,
713 CHANNEL_TLV_RDMA_CREATE_QP,
714 CHANNEL_TLV_RDMA_MODIFY_QP,
715 CHANNEL_TLV_RDMA_QUERY_QP,
716 CHANNEL_TLV_RDMA_DESTROY_QP,
717 CHANNEL_TLV_RDMA_QUERY_PORT,
718 CHANNEL_TLV_RDMA_QUERY_DEVICE,
719 CHANNEL_TLV_RDMA_IWARP_CONNECT,
720 CHANNEL_TLV_RDMA_IWARP_ACCEPT,
721 CHANNEL_TLV_RDMA_IWARP_CREATE_LISTEN,
722 CHANNEL_TLV_RDMA_IWARP_DESTROY_LISTEN,
723 CHANNEL_TLV_RDMA_IWARP_PAUSE_LISTEN,
724 CHANNEL_TLV_RDMA_IWARP_REJECT,
725 CHANNEL_TLV_RDMA_IWARP_SEND_RTR,
726 CHANNEL_TLV_ESTABLISH_LL2_CONN,
727 CHANNEL_TLV_TERMINATE_LL2_CONN,
728 CHANNEL_TLV_ASYNC_EVENT,
729 CHANNEL_TLV_RDMA_CREATE_SRQ,
730 CHANNEL_TLV_RDMA_MODIFY_SRQ,
731 CHANNEL_TLV_RDMA_DESTROY_SRQ,
732 CHANNEL_TLV_SOFT_FLR,
733 CHANNEL_TLV_MAX,
734
735
736
737
738 CHANNEL_TLV_VPORT_UPDATE_MAX = CHANNEL_TLV_VPORT_UPDATE_SGE_TPA + 1,
739
740
741};
742extern const char *qede_ecore_channel_tlvs_string[];
743
744#endif
745