.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ |
---|
1 | 2 | /* QLogic qed NIC Driver |
---|
2 | 3 | * Copyright (c) 2015-2017 QLogic Corporation |
---|
3 | | - * |
---|
4 | | - * This software is available to you under a choice of one of two |
---|
5 | | - * licenses. You may choose to be licensed under the terms of the GNU |
---|
6 | | - * General Public License (GPL) Version 2, available from the file |
---|
7 | | - * COPYING in the main directory of this source tree, or the |
---|
8 | | - * OpenIB.org BSD license below: |
---|
9 | | - * |
---|
10 | | - * Redistribution and use in source and binary forms, with or |
---|
11 | | - * without modification, are permitted provided that the following |
---|
12 | | - * conditions are met: |
---|
13 | | - * |
---|
14 | | - * - Redistributions of source code must retain the above |
---|
15 | | - * copyright notice, this list of conditions and the following |
---|
16 | | - * disclaimer. |
---|
17 | | - * |
---|
18 | | - * - Redistributions in binary form must reproduce the above |
---|
19 | | - * copyright notice, this list of conditions and the following |
---|
20 | | - * disclaimer in the documentation and /or other materials |
---|
21 | | - * provided with the distribution. |
---|
22 | | - * |
---|
23 | | - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
---|
24 | | - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
---|
25 | | - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
---|
26 | | - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
---|
27 | | - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
---|
28 | | - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
---|
29 | | - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
---|
30 | | - * SOFTWARE. |
---|
| 4 | + * Copyright (c) 2019-2020 Marvell International Ltd. |
---|
31 | 5 | */ |
---|
32 | 6 | |
---|
33 | 7 | #ifndef _QED_H |
---|
.. | .. |
---|
53 | 27 | extern const struct qed_common_ops qed_common_ops_pass; |
---|
54 | 28 | |
---|
55 | 29 | #define QED_MAJOR_VERSION 8 |
---|
56 | | -#define QED_MINOR_VERSION 33 |
---|
| 30 | +#define QED_MINOR_VERSION 37 |
---|
57 | 31 | #define QED_REVISION_VERSION 0 |
---|
58 | 32 | #define QED_ENGINEERING_VERSION 20 |
---|
59 | 33 | |
---|
.. | .. |
---|
140 | 114 | struct qed_sb_sp_info; |
---|
141 | 115 | struct qed_ll2_info; |
---|
142 | 116 | struct qed_mcp_info; |
---|
| 117 | +struct qed_llh_info; |
---|
143 | 118 | |
---|
144 | 119 | struct qed_rt_data { |
---|
145 | 120 | u32 *init_val; |
---|
.. | .. |
---|
252 | 227 | QED_VLAN, |
---|
253 | 228 | QED_RDMA_CNQ_RAM, |
---|
254 | 229 | QED_ILT, |
---|
255 | | - QED_LL2_QUEUE, |
---|
| 230 | + QED_LL2_RAM_QUEUE, |
---|
| 231 | + QED_LL2_CTX_QUEUE, |
---|
256 | 232 | QED_CMDQS_CQS, |
---|
257 | 233 | QED_RDMA_STATS_QUEUE, |
---|
258 | 234 | QED_BDQ, |
---|
.. | .. |
---|
269 | 245 | QED_MAX_FEATURES, |
---|
270 | 246 | }; |
---|
271 | 247 | |
---|
272 | | -enum QED_PORT_MODE { |
---|
273 | | - QED_PORT_MODE_DE_2X40G, |
---|
274 | | - QED_PORT_MODE_DE_2X50G, |
---|
275 | | - QED_PORT_MODE_DE_1X100G, |
---|
276 | | - QED_PORT_MODE_DE_4X10G_F, |
---|
277 | | - QED_PORT_MODE_DE_4X10G_E, |
---|
278 | | - QED_PORT_MODE_DE_4X20G, |
---|
279 | | - QED_PORT_MODE_DE_1X40G, |
---|
280 | | - QED_PORT_MODE_DE_2X25G, |
---|
281 | | - QED_PORT_MODE_DE_1X25G, |
---|
282 | | - QED_PORT_MODE_DE_4X25G, |
---|
283 | | - QED_PORT_MODE_DE_2X10G, |
---|
284 | | -}; |
---|
285 | | - |
---|
286 | 248 | enum qed_dev_cap { |
---|
287 | 249 | QED_DEV_CAP_ETH, |
---|
288 | 250 | QED_DEV_CAP_FCOE, |
---|
.. | .. |
---|
296 | 258 | QED_WOL_SUPPORT_PME, |
---|
297 | 259 | }; |
---|
298 | 260 | |
---|
| 261 | +enum qed_db_rec_exec { |
---|
| 262 | + DB_REC_DRY_RUN, |
---|
| 263 | + DB_REC_REAL_DEAL, |
---|
| 264 | + DB_REC_ONCE, |
---|
| 265 | +}; |
---|
| 266 | + |
---|
299 | 267 | struct qed_hw_info { |
---|
300 | 268 | /* PCI personality */ |
---|
301 | | - enum qed_pci_personality personality; |
---|
302 | | -#define QED_IS_RDMA_PERSONALITY(dev) \ |
---|
303 | | - ((dev)->hw_info.personality == QED_PCI_ETH_ROCE || \ |
---|
304 | | - (dev)->hw_info.personality == QED_PCI_ETH_IWARP || \ |
---|
| 269 | + enum qed_pci_personality personality; |
---|
| 270 | +#define QED_IS_RDMA_PERSONALITY(dev) \ |
---|
| 271 | + ((dev)->hw_info.personality == QED_PCI_ETH_ROCE || \ |
---|
| 272 | + (dev)->hw_info.personality == QED_PCI_ETH_IWARP || \ |
---|
305 | 273 | (dev)->hw_info.personality == QED_PCI_ETH_RDMA) |
---|
306 | | -#define QED_IS_ROCE_PERSONALITY(dev) \ |
---|
307 | | - ((dev)->hw_info.personality == QED_PCI_ETH_ROCE || \ |
---|
| 274 | +#define QED_IS_ROCE_PERSONALITY(dev) \ |
---|
| 275 | + ((dev)->hw_info.personality == QED_PCI_ETH_ROCE || \ |
---|
308 | 276 | (dev)->hw_info.personality == QED_PCI_ETH_RDMA) |
---|
309 | | -#define QED_IS_IWARP_PERSONALITY(dev) \ |
---|
310 | | - ((dev)->hw_info.personality == QED_PCI_ETH_IWARP || \ |
---|
| 277 | +#define QED_IS_IWARP_PERSONALITY(dev) \ |
---|
| 278 | + ((dev)->hw_info.personality == QED_PCI_ETH_IWARP || \ |
---|
311 | 279 | (dev)->hw_info.personality == QED_PCI_ETH_RDMA) |
---|
312 | | -#define QED_IS_L2_PERSONALITY(dev) \ |
---|
313 | | - ((dev)->hw_info.personality == QED_PCI_ETH || \ |
---|
| 280 | +#define QED_IS_L2_PERSONALITY(dev) \ |
---|
| 281 | + ((dev)->hw_info.personality == QED_PCI_ETH || \ |
---|
314 | 282 | QED_IS_RDMA_PERSONALITY(dev)) |
---|
315 | | -#define QED_IS_FCOE_PERSONALITY(dev) \ |
---|
| 283 | +#define QED_IS_FCOE_PERSONALITY(dev) \ |
---|
316 | 284 | ((dev)->hw_info.personality == QED_PCI_FCOE) |
---|
317 | | -#define QED_IS_ISCSI_PERSONALITY(dev) \ |
---|
| 285 | +#define QED_IS_ISCSI_PERSONALITY(dev) \ |
---|
318 | 286 | ((dev)->hw_info.personality == QED_PCI_ISCSI) |
---|
319 | 287 | |
---|
320 | 288 | /* Resource Allocation scheme results */ |
---|
321 | 289 | u32 resc_start[QED_MAX_RESC]; |
---|
322 | 290 | u32 resc_num[QED_MAX_RESC]; |
---|
323 | | - u32 feat_num[QED_MAX_FEATURES]; |
---|
| 291 | +#define RESC_START(_p_hwfn, resc) ((_p_hwfn)->hw_info.resc_start[resc]) |
---|
| 292 | +#define RESC_NUM(_p_hwfn, resc) ((_p_hwfn)->hw_info.resc_num[resc]) |
---|
| 293 | +#define RESC_END(_p_hwfn, resc) (RESC_START(_p_hwfn, resc) + \ |
---|
| 294 | + RESC_NUM(_p_hwfn, resc)) |
---|
324 | 295 | |
---|
325 | | -#define RESC_START(_p_hwfn, resc) ((_p_hwfn)->hw_info.resc_start[resc]) |
---|
326 | | -#define RESC_NUM(_p_hwfn, resc) ((_p_hwfn)->hw_info.resc_num[resc]) |
---|
327 | | -#define RESC_END(_p_hwfn, resc) (RESC_START(_p_hwfn, resc) + \ |
---|
328 | | - RESC_NUM(_p_hwfn, resc)) |
---|
329 | | -#define FEAT_NUM(_p_hwfn, resc) ((_p_hwfn)->hw_info.feat_num[resc]) |
---|
| 296 | + u32 feat_num[QED_MAX_FEATURES]; |
---|
| 297 | +#define FEAT_NUM(_p_hwfn, resc) ((_p_hwfn)->hw_info.feat_num[resc]) |
---|
330 | 298 | |
---|
331 | 299 | /* Amount of traffic classes HW supports */ |
---|
332 | | - u8 num_hw_tc; |
---|
| 300 | + u8 num_hw_tc; |
---|
333 | 301 | |
---|
334 | 302 | /* Amount of TCs which should be active according to DCBx or upper |
---|
335 | 303 | * layer driver configuration. |
---|
336 | 304 | */ |
---|
337 | | - u8 num_active_tc; |
---|
| 305 | + u8 num_active_tc; |
---|
| 306 | + |
---|
338 | 307 | u8 offload_tc; |
---|
339 | 308 | bool offload_tc_set; |
---|
340 | 309 | |
---|
341 | 310 | bool multi_tc_roce_en; |
---|
342 | | -#define IS_QED_MULTI_TC_ROCE(p_hwfn) (((p_hwfn)->hw_info.multi_tc_roce_en)) |
---|
| 311 | +#define IS_QED_MULTI_TC_ROCE(p_hwfn) ((p_hwfn)->hw_info.multi_tc_roce_en) |
---|
343 | 312 | |
---|
344 | 313 | u32 concrete_fid; |
---|
345 | 314 | u16 opaque_fid; |
---|
.. | .. |
---|
354 | 323 | |
---|
355 | 324 | struct qed_igu_info *p_igu_info; |
---|
356 | 325 | |
---|
357 | | - u32 port_mode; |
---|
358 | 326 | u32 hw_mode; |
---|
359 | | - unsigned long device_capabilities; |
---|
| 327 | + unsigned long device_capabilities; |
---|
360 | 328 | u16 mtu; |
---|
361 | 329 | |
---|
362 | | - enum qed_wol_support b_wol_support; |
---|
| 330 | + enum qed_wol_support b_wol_support; |
---|
363 | 331 | }; |
---|
364 | 332 | |
---|
365 | 333 | /* maximun size of read/write commands (HW limit) */ |
---|
.. | .. |
---|
425 | 393 | u8 num_pf_rls; |
---|
426 | 394 | }; |
---|
427 | 395 | |
---|
| 396 | +#define QED_OVERFLOW_BIT 1 |
---|
| 397 | + |
---|
| 398 | +struct qed_db_recovery_info { |
---|
| 399 | + struct list_head list; |
---|
| 400 | + |
---|
| 401 | + /* Lock to protect the doorbell recovery mechanism list */ |
---|
| 402 | + spinlock_t lock; |
---|
| 403 | + bool dorq_attn; |
---|
| 404 | + u32 db_recovery_counter; |
---|
| 405 | + unsigned long overflow; |
---|
| 406 | +}; |
---|
| 407 | + |
---|
428 | 408 | struct storm_stats { |
---|
429 | 409 | u32 address; |
---|
430 | 410 | u32 len; |
---|
.. | .. |
---|
442 | 422 | const u8 *modes_tree_buf; |
---|
443 | 423 | union init_op *init_ops; |
---|
444 | 424 | const u32 *arr_data; |
---|
| 425 | + const u32 *fw_overlays; |
---|
| 426 | + u32 fw_overlays_len; |
---|
445 | 427 | u32 init_ops_size; |
---|
446 | 428 | }; |
---|
447 | 429 | |
---|
.. | .. |
---|
478 | 460 | |
---|
479 | 461 | /* Allow DSCP to TC mapping */ |
---|
480 | 462 | QED_MF_DSCP_TO_TC_MAP, |
---|
| 463 | + |
---|
| 464 | + /* Do not insert a vlan tag with id 0 */ |
---|
| 465 | + QED_MF_DONT_ADD_VLAN0_TAG, |
---|
481 | 466 | }; |
---|
482 | 467 | |
---|
483 | 468 | enum qed_ufp_mode { |
---|
.. | .. |
---|
509 | 494 | bool valid; |
---|
510 | 495 | }; |
---|
511 | 496 | |
---|
| 497 | +enum qed_hsi_def_type { |
---|
| 498 | + QED_HSI_DEF_MAX_NUM_VFS, |
---|
| 499 | + QED_HSI_DEF_MAX_NUM_L2_QUEUES, |
---|
| 500 | + QED_HSI_DEF_MAX_NUM_PORTS, |
---|
| 501 | + QED_HSI_DEF_MAX_SB_PER_PATH, |
---|
| 502 | + QED_HSI_DEF_MAX_NUM_PFS, |
---|
| 503 | + QED_HSI_DEF_MAX_NUM_VPORTS, |
---|
| 504 | + QED_HSI_DEF_NUM_ETH_RSS_ENGINE, |
---|
| 505 | + QED_HSI_DEF_MAX_QM_TX_QUEUES, |
---|
| 506 | + QED_HSI_DEF_NUM_PXP_ILT_RECORDS, |
---|
| 507 | + QED_HSI_DEF_NUM_RDMA_STATISTIC_COUNTERS, |
---|
| 508 | + QED_HSI_DEF_MAX_QM_GLOBAL_RLS, |
---|
| 509 | + QED_HSI_DEF_MAX_PBF_CMD_LINES, |
---|
| 510 | + QED_HSI_DEF_MAX_BTB_BLOCKS, |
---|
| 511 | + QED_NUM_HSI_DEFS |
---|
| 512 | +}; |
---|
| 513 | + |
---|
512 | 514 | #define DRV_MODULE_VERSION \ |
---|
513 | 515 | __stringify(QED_MAJOR_VERSION) "." \ |
---|
514 | 516 | __stringify(QED_MINOR_VERSION) "." \ |
---|
.. | .. |
---|
522 | 524 | |
---|
523 | 525 | enum qed_slowpath_wq_flag { |
---|
524 | 526 | QED_SLOWPATH_MFW_TLV_REQ, |
---|
| 527 | + QED_SLOWPATH_PERIODIC_DB_REC, |
---|
525 | 528 | }; |
---|
526 | 529 | |
---|
527 | 530 | struct qed_hwfn { |
---|
.. | .. |
---|
539 | 542 | u8 dp_level; |
---|
540 | 543 | char name[NAME_SIZE]; |
---|
541 | 544 | |
---|
542 | | - bool first_on_engine; |
---|
543 | 545 | bool hw_init_done; |
---|
544 | 546 | |
---|
545 | 547 | u8 num_funcs_on_engine; |
---|
.. | .. |
---|
570 | 572 | struct qed_consq *p_consq; |
---|
571 | 573 | |
---|
572 | 574 | /* Slow-Path definitions */ |
---|
573 | | - struct tasklet_struct *sp_dpc; |
---|
| 575 | + struct tasklet_struct sp_dpc; |
---|
574 | 576 | bool b_sp_dpc_enabled; |
---|
575 | 577 | |
---|
576 | 578 | struct qed_ptt *p_main_ptt; |
---|
.. | .. |
---|
623 | 625 | void *unzip_buf; |
---|
624 | 626 | |
---|
625 | 627 | struct dbg_tools_data dbg_info; |
---|
| 628 | + void *dbg_user_info; |
---|
| 629 | + struct virt_mem_desc dbg_arrays[MAX_BIN_DBG_BUFFER_TYPE]; |
---|
626 | 630 | |
---|
627 | 631 | /* PWM region specific data */ |
---|
628 | 632 | u16 wid_count; |
---|
.. | .. |
---|
639 | 643 | /* L2-related */ |
---|
640 | 644 | struct qed_l2_info *p_l2_info; |
---|
641 | 645 | |
---|
| 646 | + /* Mechanism for recovering from doorbell drop */ |
---|
| 647 | + struct qed_db_recovery_info db_recovery_info; |
---|
| 648 | + |
---|
642 | 649 | /* Nvm images number and attributes */ |
---|
643 | 650 | struct qed_nvm_image_info nvm_info; |
---|
644 | 651 | |
---|
| 652 | + struct phys_mem_desc *fw_overlay_mem; |
---|
645 | 653 | struct qed_ptt *p_arfs_ptt; |
---|
646 | 654 | |
---|
647 | 655 | struct qed_simd_fp_handler simd_proto_handler[64]; |
---|
.. | .. |
---|
651 | 659 | struct delayed_work iov_task; |
---|
652 | 660 | unsigned long iov_task_flags; |
---|
653 | 661 | #endif |
---|
654 | | - |
---|
655 | | - struct z_stream_s *stream; |
---|
| 662 | + struct z_stream_s *stream; |
---|
| 663 | + bool slowpath_wq_active; |
---|
656 | 664 | struct workqueue_struct *slowpath_wq; |
---|
657 | 665 | struct delayed_work slowpath_task; |
---|
658 | 666 | unsigned long slowpath_task_flags; |
---|
| 667 | + u32 periodic_db_rec_count; |
---|
659 | 668 | }; |
---|
660 | 669 | |
---|
661 | 670 | struct pci_params { |
---|
.. | .. |
---|
691 | 700 | u32 dumped_dwords; |
---|
692 | 701 | }; |
---|
693 | 702 | |
---|
694 | | -struct qed_dbg_params { |
---|
695 | | - struct qed_dbg_feature features[DBG_FEATURE_NUM]; |
---|
696 | | - u8 engine_for_debug; |
---|
697 | | - bool print_data; |
---|
698 | | -}; |
---|
699 | | - |
---|
700 | 703 | struct qed_dev { |
---|
701 | | - u32 dp_module; |
---|
702 | | - u8 dp_level; |
---|
703 | | - char name[NAME_SIZE]; |
---|
| 704 | + u32 dp_module; |
---|
| 705 | + u8 dp_level; |
---|
| 706 | + char name[NAME_SIZE]; |
---|
704 | 707 | |
---|
705 | | - enum qed_dev_type type; |
---|
706 | | -/* Translate type/revision combo into the proper conditions */ |
---|
707 | | -#define QED_IS_BB(dev) ((dev)->type == QED_DEV_TYPE_BB) |
---|
708 | | -#define QED_IS_BB_B0(dev) (QED_IS_BB(dev) && \ |
---|
709 | | - CHIP_REV_IS_B0(dev)) |
---|
710 | | -#define QED_IS_AH(dev) ((dev)->type == QED_DEV_TYPE_AH) |
---|
711 | | -#define QED_IS_K2(dev) QED_IS_AH(dev) |
---|
| 708 | + enum qed_dev_type type; |
---|
| 709 | + /* Translate type/revision combo into the proper conditions */ |
---|
| 710 | +#define QED_IS_BB(dev) ((dev)->type == QED_DEV_TYPE_BB) |
---|
| 711 | +#define QED_IS_BB_B0(dev) (QED_IS_BB(dev) && CHIP_REV_IS_B0(dev)) |
---|
| 712 | +#define QED_IS_AH(dev) ((dev)->type == QED_DEV_TYPE_AH) |
---|
| 713 | +#define QED_IS_K2(dev) QED_IS_AH(dev) |
---|
| 714 | +#define QED_IS_E4(dev) (QED_IS_BB(dev) || QED_IS_AH(dev)) |
---|
| 715 | +#define QED_IS_E5(dev) ((dev)->type == QED_DEV_TYPE_E5) |
---|
712 | 716 | |
---|
713 | | - u16 vendor_id; |
---|
714 | | - u16 device_id; |
---|
715 | | -#define QED_DEV_ID_MASK 0xff00 |
---|
716 | | -#define QED_DEV_ID_MASK_BB 0x1600 |
---|
717 | | -#define QED_DEV_ID_MASK_AH 0x8000 |
---|
| 717 | + u16 vendor_id; |
---|
718 | 718 | |
---|
719 | | - u16 chip_num; |
---|
720 | | -#define CHIP_NUM_MASK 0xffff |
---|
721 | | -#define CHIP_NUM_SHIFT 16 |
---|
| 719 | + u16 device_id; |
---|
| 720 | +#define QED_DEV_ID_MASK 0xff00 |
---|
| 721 | +#define QED_DEV_ID_MASK_BB 0x1600 |
---|
| 722 | +#define QED_DEV_ID_MASK_AH 0x8000 |
---|
722 | 723 | |
---|
723 | | - u16 chip_rev; |
---|
724 | | -#define CHIP_REV_MASK 0xf |
---|
725 | | -#define CHIP_REV_SHIFT 12 |
---|
726 | | -#define CHIP_REV_IS_B0(_cdev) ((_cdev)->chip_rev == 1) |
---|
| 724 | + u16 chip_num; |
---|
| 725 | +#define CHIP_NUM_MASK 0xffff |
---|
| 726 | +#define CHIP_NUM_SHIFT 16 |
---|
| 727 | + |
---|
| 728 | + u16 chip_rev; |
---|
| 729 | +#define CHIP_REV_MASK 0xf |
---|
| 730 | +#define CHIP_REV_SHIFT 12 |
---|
| 731 | +#define CHIP_REV_IS_B0(_cdev) ((_cdev)->chip_rev == 1) |
---|
727 | 732 | |
---|
728 | 733 | u16 chip_metal; |
---|
729 | | -#define CHIP_METAL_MASK 0xff |
---|
730 | | -#define CHIP_METAL_SHIFT 4 |
---|
| 734 | +#define CHIP_METAL_MASK 0xff |
---|
| 735 | +#define CHIP_METAL_SHIFT 4 |
---|
731 | 736 | |
---|
732 | 737 | u16 chip_bond_id; |
---|
733 | | -#define CHIP_BOND_ID_MASK 0xf |
---|
734 | | -#define CHIP_BOND_ID_SHIFT 0 |
---|
| 738 | +#define CHIP_BOND_ID_MASK 0xf |
---|
| 739 | +#define CHIP_BOND_ID_SHIFT 0 |
---|
735 | 740 | |
---|
736 | 741 | u8 num_engines; |
---|
| 742 | + u8 num_ports; |
---|
737 | 743 | u8 num_ports_in_engine; |
---|
738 | 744 | u8 num_funcs_in_port; |
---|
739 | 745 | |
---|
.. | .. |
---|
767 | 773 | u8 cache_shift; |
---|
768 | 774 | |
---|
769 | 775 | /* Init */ |
---|
770 | | - const struct iro *iro_arr; |
---|
771 | | -#define IRO (p_hwfn->cdev->iro_arr) |
---|
| 776 | + const u32 *iro_arr; |
---|
| 777 | +#define IRO ((const struct iro *)p_hwfn->cdev->iro_arr) |
---|
772 | 778 | |
---|
773 | 779 | /* HW functions */ |
---|
774 | 780 | u8 num_hwfns; |
---|
775 | 781 | struct qed_hwfn hwfns[MAX_HWFNS_PER_DEVICE]; |
---|
| 782 | + |
---|
| 783 | + /* Engine affinity */ |
---|
| 784 | + u8 l2_affin_hint; |
---|
| 785 | + u8 fir_affin; |
---|
| 786 | + u8 iwarp_affin; |
---|
776 | 787 | |
---|
777 | 788 | /* SRIOV */ |
---|
778 | 789 | struct qed_hw_sriov_info *p_iov_info; |
---|
.. | .. |
---|
785 | 796 | |
---|
786 | 797 | u32 mcp_nvm_resp; |
---|
787 | 798 | |
---|
| 799 | + /* Recovery */ |
---|
| 800 | + bool recov_in_prog; |
---|
| 801 | + |
---|
| 802 | + /* Indicates whether should prevent attentions from being reasserted */ |
---|
| 803 | + bool attn_clr_en; |
---|
| 804 | + |
---|
| 805 | + /* LLH info */ |
---|
| 806 | + u8 ppfid_bitmap; |
---|
| 807 | + struct qed_llh_info *p_llh_info; |
---|
| 808 | + |
---|
788 | 809 | /* Linux specific here */ |
---|
| 810 | + struct qed_dev_info common_dev_info; |
---|
789 | 811 | struct qede_dev *edev; |
---|
790 | 812 | struct pci_dev *pdev; |
---|
791 | 813 | u32 flags; |
---|
.. | .. |
---|
809 | 831 | } protocol_ops; |
---|
810 | 832 | void *ops_cookie; |
---|
811 | 833 | |
---|
812 | | - struct qed_dbg_params dbg_params; |
---|
813 | | - |
---|
814 | 834 | #ifdef CONFIG_QED_LL2 |
---|
815 | 835 | struct qed_cb_ll2_info *ll2; |
---|
816 | 836 | u8 ll2_mac_address[ETH_ALEN]; |
---|
817 | 837 | #endif |
---|
| 838 | + struct qed_dbg_feature dbg_features[DBG_FEATURE_NUM]; |
---|
| 839 | + u8 engine_for_debug; |
---|
| 840 | + bool disable_ilt_dump; |
---|
| 841 | + bool dbg_bin_dump; |
---|
| 842 | + |
---|
818 | 843 | DECLARE_HASHTABLE(connections, 10); |
---|
819 | 844 | const struct firmware *firmware; |
---|
| 845 | + |
---|
| 846 | + bool print_dbg_data; |
---|
820 | 847 | |
---|
821 | 848 | u32 rdma_max_sge; |
---|
822 | 849 | u32 rdma_max_inline; |
---|
823 | 850 | u32 rdma_max_srq_sge; |
---|
824 | 851 | u16 tunn_feature_mask; |
---|
| 852 | + |
---|
| 853 | + bool iwarp_cmt; |
---|
825 | 854 | }; |
---|
826 | 855 | |
---|
827 | | -#define NUM_OF_VFS(dev) (QED_IS_BB(dev) ? MAX_NUM_VFS_BB \ |
---|
828 | | - : MAX_NUM_VFS_K2) |
---|
829 | | -#define NUM_OF_L2_QUEUES(dev) (QED_IS_BB(dev) ? MAX_NUM_L2_QUEUES_BB \ |
---|
830 | | - : MAX_NUM_L2_QUEUES_K2) |
---|
831 | | -#define NUM_OF_PORTS(dev) (QED_IS_BB(dev) ? MAX_NUM_PORTS_BB \ |
---|
832 | | - : MAX_NUM_PORTS_K2) |
---|
833 | | -#define NUM_OF_SBS(dev) (QED_IS_BB(dev) ? MAX_SB_PER_PATH_BB \ |
---|
834 | | - : MAX_SB_PER_PATH_K2) |
---|
835 | | -#define NUM_OF_ENG_PFS(dev) (QED_IS_BB(dev) ? MAX_NUM_PFS_BB \ |
---|
836 | | - : MAX_NUM_PFS_K2) |
---|
| 856 | +u32 qed_get_hsi_def_val(struct qed_dev *cdev, enum qed_hsi_def_type type); |
---|
| 857 | + |
---|
| 858 | +#define NUM_OF_VFS(dev) \ |
---|
| 859 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_VFS) |
---|
| 860 | +#define NUM_OF_L2_QUEUES(dev) \ |
---|
| 861 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_L2_QUEUES) |
---|
| 862 | +#define NUM_OF_PORTS(dev) \ |
---|
| 863 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_PORTS) |
---|
| 864 | +#define NUM_OF_SBS(dev) \ |
---|
| 865 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_SB_PER_PATH) |
---|
| 866 | +#define NUM_OF_ENG_PFS(dev) \ |
---|
| 867 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_PFS) |
---|
| 868 | +#define NUM_OF_VPORTS(dev) \ |
---|
| 869 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_NUM_VPORTS) |
---|
| 870 | +#define NUM_OF_RSS_ENGINES(dev) \ |
---|
| 871 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_ETH_RSS_ENGINE) |
---|
| 872 | +#define NUM_OF_QM_TX_QUEUES(dev) \ |
---|
| 873 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_QM_TX_QUEUES) |
---|
| 874 | +#define NUM_OF_PXP_ILT_RECORDS(dev) \ |
---|
| 875 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_PXP_ILT_RECORDS) |
---|
| 876 | +#define NUM_OF_RDMA_STATISTIC_COUNTERS(dev) \ |
---|
| 877 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_NUM_RDMA_STATISTIC_COUNTERS) |
---|
| 878 | +#define NUM_OF_QM_GLOBAL_RLS(dev) \ |
---|
| 879 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_QM_GLOBAL_RLS) |
---|
| 880 | +#define NUM_OF_PBF_CMD_LINES(dev) \ |
---|
| 881 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_PBF_CMD_LINES) |
---|
| 882 | +#define NUM_OF_BTB_BLOCKS(dev) \ |
---|
| 883 | + qed_get_hsi_def_val(dev, QED_HSI_DEF_MAX_BTB_BLOCKS) |
---|
| 884 | + |
---|
837 | 885 | |
---|
838 | 886 | /** |
---|
839 | 887 | * @brief qed_concrete_to_sw_fid - get the sw function id from |
---|
.. | .. |
---|
870 | 918 | |
---|
871 | 919 | void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); |
---|
872 | 920 | int qed_device_num_engines(struct qed_dev *cdev); |
---|
873 | | -int qed_device_get_port_id(struct qed_dev *cdev); |
---|
874 | 921 | void qed_set_fw_mac_addr(__le16 *fw_msb, |
---|
875 | 922 | __le16 *fw_mid, __le16 *fw_lsb, u8 *mac); |
---|
876 | 923 | |
---|
877 | 924 | #define QED_LEADING_HWFN(dev) (&dev->hwfns[0]) |
---|
| 925 | +#define QED_IS_CMT(dev) ((dev)->num_hwfns > 1) |
---|
| 926 | +/* Macros for getting the engine-affinitized hwfn (FIR: fcoe,iscsi,roce) */ |
---|
| 927 | +#define QED_FIR_AFFIN_HWFN(dev) (&(dev)->hwfns[dev->fir_affin]) |
---|
| 928 | +#define QED_IWARP_AFFIN_HWFN(dev) (&(dev)->hwfns[dev->iwarp_affin]) |
---|
| 929 | +#define QED_AFFIN_HWFN(dev) \ |
---|
| 930 | + (QED_IS_IWARP_PERSONALITY(QED_LEADING_HWFN(dev)) ? \ |
---|
| 931 | + QED_IWARP_AFFIN_HWFN(dev) : QED_FIR_AFFIN_HWFN(dev)) |
---|
| 932 | +#define QED_AFFIN_HWFN_IDX(dev) (IS_LEAD_HWFN(QED_AFFIN_HWFN(dev)) ? 0 : 1) |
---|
878 | 933 | |
---|
879 | 934 | /* Flags for indication of required queues */ |
---|
880 | 935 | #define PQ_FLAGS_RLS (BIT(0)) |
---|
.. | .. |
---|
894 | 949 | u16 qed_get_cm_pq_idx_ofld_mtc(struct qed_hwfn *p_hwfn, u8 tc); |
---|
895 | 950 | u16 qed_get_cm_pq_idx_llt_mtc(struct qed_hwfn *p_hwfn, u8 tc); |
---|
896 | 951 | |
---|
897 | | -#define QED_LEADING_HWFN(dev) (&dev->hwfns[0]) |
---|
| 952 | +/* doorbell recovery mechanism */ |
---|
| 953 | +void qed_db_recovery_dp(struct qed_hwfn *p_hwfn); |
---|
| 954 | +void qed_db_recovery_execute(struct qed_hwfn *p_hwfn); |
---|
| 955 | +bool qed_edpm_enabled(struct qed_hwfn *p_hwfn); |
---|
898 | 956 | |
---|
899 | 957 | /* Other Linux specific common definitions */ |
---|
900 | 958 | #define DP_NAME(cdev) ((cdev)->name) |
---|
.. | .. |
---|
911 | 969 | writel((u32)val, (void __iomem *)((u8 __iomem *)\ |
---|
912 | 970 | (cdev->doorbells) + (db_addr))) |
---|
913 | 971 | |
---|
| 972 | +#define MFW_PORT(_p_hwfn) ((_p_hwfn)->abs_pf_id % \ |
---|
| 973 | + qed_device_num_ports((_p_hwfn)->cdev)) |
---|
| 974 | +int qed_device_num_ports(struct qed_dev *cdev); |
---|
| 975 | + |
---|
914 | 976 | /* Prototypes */ |
---|
915 | 977 | int qed_fill_dev_info(struct qed_dev *cdev, |
---|
916 | 978 | struct qed_dev_info *dev_info); |
---|
917 | 979 | void qed_link_update(struct qed_hwfn *hwfn, struct qed_ptt *ptt); |
---|
| 980 | +void qed_bw_update(struct qed_hwfn *hwfn, struct qed_ptt *ptt); |
---|
918 | 981 | u32 qed_unzip_data(struct qed_hwfn *p_hwfn, |
---|
919 | 982 | u32 input_len, u8 *input_buf, |
---|
920 | 983 | u32 max_size, u8 *unzip_buf); |
---|
| 984 | +int qed_recovery_process(struct qed_dev *cdev); |
---|
| 985 | +void qed_schedule_recovery_handler(struct qed_hwfn *p_hwfn); |
---|
| 986 | +void qed_hw_error_occurred(struct qed_hwfn *p_hwfn, |
---|
| 987 | + enum qed_hw_err_type err_type); |
---|
921 | 988 | void qed_get_protocol_stats(struct qed_dev *cdev, |
---|
922 | 989 | enum qed_mcp_protocol_type type, |
---|
923 | 990 | union qed_mcp_protocol_stats *stats); |
---|
.. | .. |
---|
930 | 997 | union qed_mfw_tlv_data *tlv_data); |
---|
931 | 998 | |
---|
932 | 999 | void qed_hw_info_set_offload_tc(struct qed_hw_info *p_info, u8 tc); |
---|
| 1000 | + |
---|
| 1001 | +void qed_periodic_db_rec_start(struct qed_hwfn *p_hwfn); |
---|
933 | 1002 | #endif /* _QED_H */ |
---|