0001
0002
0003
0004
0005
0006
0007 #ifndef _QED_MCP_H
0008 #define _QED_MCP_H
0009
0010 #include <linux/types.h>
0011 #include <linux/delay.h>
0012 #include <linux/slab.h>
0013 #include <linux/spinlock.h>
0014 #include <linux/qed/qed_fcoe_if.h>
0015 #include "qed_hsi.h"
0016 #include "qed_dev_api.h"
0017
0018 #define QED_MFW_REPORT_STR_SIZE 256
0019
0020 struct qed_mcp_link_speed_params {
0021 bool autoneg;
0022
0023 u32 advertised_speeds;
0024 #define QED_EXT_SPEED_MASK_RES 0x1
0025 #define QED_EXT_SPEED_MASK_1G 0x2
0026 #define QED_EXT_SPEED_MASK_10G 0x4
0027 #define QED_EXT_SPEED_MASK_20G 0x8
0028 #define QED_EXT_SPEED_MASK_25G 0x10
0029 #define QED_EXT_SPEED_MASK_40G 0x20
0030 #define QED_EXT_SPEED_MASK_50G_R 0x40
0031 #define QED_EXT_SPEED_MASK_50G_R2 0x80
0032 #define QED_EXT_SPEED_MASK_100G_R2 0x100
0033 #define QED_EXT_SPEED_MASK_100G_R4 0x200
0034 #define QED_EXT_SPEED_MASK_100G_P4 0x400
0035
0036 u32 forced_speed;
0037 #define QED_EXT_SPEED_1G 0x1
0038 #define QED_EXT_SPEED_10G 0x2
0039 #define QED_EXT_SPEED_20G 0x4
0040 #define QED_EXT_SPEED_25G 0x8
0041 #define QED_EXT_SPEED_40G 0x10
0042 #define QED_EXT_SPEED_50G_R 0x20
0043 #define QED_EXT_SPEED_50G_R2 0x40
0044 #define QED_EXT_SPEED_100G_R2 0x80
0045 #define QED_EXT_SPEED_100G_R4 0x100
0046 #define QED_EXT_SPEED_100G_P4 0x200
0047 };
0048
0049 struct qed_mcp_link_pause_params {
0050 bool autoneg;
0051 bool forced_rx;
0052 bool forced_tx;
0053 };
0054
0055 enum qed_mcp_eee_mode {
0056 QED_MCP_EEE_DISABLED,
0057 QED_MCP_EEE_ENABLED,
0058 QED_MCP_EEE_UNSUPPORTED
0059 };
0060
0061 struct qed_mcp_link_params {
0062 struct qed_mcp_link_speed_params speed;
0063 struct qed_mcp_link_pause_params pause;
0064 u32 loopback_mode;
0065 struct qed_link_eee_params eee;
0066 u32 fec;
0067
0068 struct qed_mcp_link_speed_params ext_speed;
0069 u32 ext_fec_mode;
0070 };
0071
0072 struct qed_mcp_link_capabilities {
0073 u32 speed_capabilities;
0074 bool default_speed_autoneg;
0075 u32 fec_default;
0076 enum qed_mcp_eee_mode default_eee;
0077 u32 eee_lpi_timer;
0078 u8 eee_speed_caps;
0079
0080 u32 default_ext_speed_caps;
0081 u32 default_ext_autoneg;
0082 u32 default_ext_speed;
0083 u32 default_ext_fec;
0084 };
0085
0086 struct qed_mcp_link_state {
0087 bool link_up;
0088 u32 min_pf_rate;
0089
0090
0091 u32 line_speed;
0092
0093
0094
0095
0096 u32 speed;
0097
0098 bool full_duplex;
0099 bool an;
0100 bool an_complete;
0101 bool parallel_detection;
0102 bool pfc_enabled;
0103
0104 u32 partner_adv_speed;
0105 #define QED_LINK_PARTNER_SPEED_1G_HD BIT(0)
0106 #define QED_LINK_PARTNER_SPEED_1G_FD BIT(1)
0107 #define QED_LINK_PARTNER_SPEED_10G BIT(2)
0108 #define QED_LINK_PARTNER_SPEED_20G BIT(3)
0109 #define QED_LINK_PARTNER_SPEED_25G BIT(4)
0110 #define QED_LINK_PARTNER_SPEED_40G BIT(5)
0111 #define QED_LINK_PARTNER_SPEED_50G BIT(6)
0112 #define QED_LINK_PARTNER_SPEED_100G BIT(7)
0113
0114 bool partner_tx_flow_ctrl_en;
0115 bool partner_rx_flow_ctrl_en;
0116
0117 u8 partner_adv_pause;
0118 #define QED_LINK_PARTNER_SYMMETRIC_PAUSE 0x1
0119 #define QED_LINK_PARTNER_ASYMMETRIC_PAUSE 0x2
0120 #define QED_LINK_PARTNER_BOTH_PAUSE 0x3
0121
0122 bool sfp_tx_fault;
0123 bool eee_active;
0124 u8 eee_adv_caps;
0125 u8 eee_lp_adv_caps;
0126
0127 u32 fec_active;
0128 };
0129
0130 struct qed_mcp_function_info {
0131 u8 pause_on_host;
0132
0133 enum qed_pci_personality protocol;
0134
0135 u8 bandwidth_min;
0136 u8 bandwidth_max;
0137
0138 u8 mac[ETH_ALEN];
0139
0140 u64 wwn_port;
0141 u64 wwn_node;
0142
0143 #define QED_MCP_VLAN_UNSET (0xffff)
0144 u16 ovlan;
0145
0146 u16 mtu;
0147 };
0148
0149 struct qed_mcp_nvm_common {
0150 u32 offset;
0151 u32 param;
0152 u32 resp;
0153 u32 cmd;
0154 };
0155
0156 struct qed_mcp_drv_version {
0157 u32 version;
0158 u8 name[MCP_DRV_VER_STR_SIZE - 4];
0159 };
0160
0161 struct qed_mcp_lan_stats {
0162 u64 ucast_rx_pkts;
0163 u64 ucast_tx_pkts;
0164 u32 fcs_err;
0165 };
0166
0167 struct qed_mcp_fcoe_stats {
0168 u64 rx_pkts;
0169 u64 tx_pkts;
0170 u32 fcs_err;
0171 u32 login_failure;
0172 };
0173
0174 struct qed_mcp_iscsi_stats {
0175 u64 rx_pdus;
0176 u64 tx_pdus;
0177 u64 rx_bytes;
0178 u64 tx_bytes;
0179 };
0180
0181 struct qed_mcp_rdma_stats {
0182 u64 rx_pkts;
0183 u64 tx_pkts;
0184 u64 rx_bytes;
0185 u64 tx_byts;
0186 };
0187
0188 enum qed_mcp_protocol_type {
0189 QED_MCP_LAN_STATS,
0190 QED_MCP_FCOE_STATS,
0191 QED_MCP_ISCSI_STATS,
0192 QED_MCP_RDMA_STATS
0193 };
0194
0195 union qed_mcp_protocol_stats {
0196 struct qed_mcp_lan_stats lan_stats;
0197 struct qed_mcp_fcoe_stats fcoe_stats;
0198 struct qed_mcp_iscsi_stats iscsi_stats;
0199 struct qed_mcp_rdma_stats rdma_stats;
0200 };
0201
0202 enum qed_ov_eswitch {
0203 QED_OV_ESWITCH_NONE,
0204 QED_OV_ESWITCH_VEB,
0205 QED_OV_ESWITCH_VEPA
0206 };
0207
0208 enum qed_ov_client {
0209 QED_OV_CLIENT_DRV,
0210 QED_OV_CLIENT_USER,
0211 QED_OV_CLIENT_VENDOR_SPEC
0212 };
0213
0214 enum qed_ov_driver_state {
0215 QED_OV_DRIVER_STATE_NOT_LOADED,
0216 QED_OV_DRIVER_STATE_DISABLED,
0217 QED_OV_DRIVER_STATE_ACTIVE
0218 };
0219
0220 enum qed_ov_wol {
0221 QED_OV_WOL_DEFAULT,
0222 QED_OV_WOL_DISABLED,
0223 QED_OV_WOL_ENABLED
0224 };
0225
0226 enum qed_mfw_tlv_type {
0227 QED_MFW_TLV_GENERIC = 0x1,
0228 QED_MFW_TLV_ETH = 0x2,
0229 QED_MFW_TLV_FCOE = 0x4,
0230 QED_MFW_TLV_ISCSI = 0x8,
0231 QED_MFW_TLV_MAX = 0x16,
0232 };
0233
0234 struct qed_mfw_tlv_generic {
0235 #define QED_MFW_TLV_FLAGS_SIZE 2
0236 struct {
0237 u8 ipv4_csum_offload;
0238 u8 lso_supported;
0239 bool b_set;
0240 } flags;
0241
0242 #define QED_MFW_TLV_MAC_COUNT 3
0243
0244 u8 mac[QED_MFW_TLV_MAC_COUNT][6];
0245 bool mac_set[QED_MFW_TLV_MAC_COUNT];
0246
0247 u64 rx_frames;
0248 bool rx_frames_set;
0249 u64 rx_bytes;
0250 bool rx_bytes_set;
0251 u64 tx_frames;
0252 bool tx_frames_set;
0253 u64 tx_bytes;
0254 bool tx_bytes_set;
0255 };
0256
0257 union qed_mfw_tlv_data {
0258 struct qed_mfw_tlv_generic generic;
0259 struct qed_mfw_tlv_eth eth;
0260 struct qed_mfw_tlv_fcoe fcoe;
0261 struct qed_mfw_tlv_iscsi iscsi;
0262 };
0263
0264 #define QED_NVM_CFG_OPTION_ALL BIT(0)
0265 #define QED_NVM_CFG_OPTION_INIT BIT(1)
0266 #define QED_NVM_CFG_OPTION_COMMIT BIT(2)
0267 #define QED_NVM_CFG_OPTION_FREE BIT(3)
0268 #define QED_NVM_CFG_OPTION_ENTITY_SEL BIT(4)
0269
0270
0271
0272
0273
0274
0275
0276
0277 struct qed_mcp_link_params *qed_mcp_get_link_params(struct qed_hwfn *p_hwfn);
0278
0279
0280
0281
0282
0283
0284
0285
0286 struct qed_mcp_link_state *qed_mcp_get_link_state(struct qed_hwfn *p_hwfn);
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296 struct qed_mcp_link_capabilities
0297 *qed_mcp_get_link_capabilities(struct qed_hwfn *p_hwfn);
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309 int qed_mcp_set_link(struct qed_hwfn *p_hwfn,
0310 struct qed_ptt *p_ptt,
0311 bool b_up);
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323 int qed_mcp_get_mfw_ver(struct qed_hwfn *p_hwfn,
0324 struct qed_ptt *p_ptt,
0325 u32 *p_mfw_ver, u32 *p_running_bundle_id);
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336 int qed_mcp_get_mbi_ver(struct qed_hwfn *p_hwfn,
0337 struct qed_ptt *p_ptt, u32 *p_mbi_ver);
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349 int qed_mcp_get_media_type(struct qed_hwfn *p_hwfn,
0350 struct qed_ptt *p_ptt, u32 *media_type);
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363 int qed_mcp_get_transceiver_data(struct qed_hwfn *p_hwfn,
0364 struct qed_ptt *p_ptt,
0365 u32 *p_transceiver_state,
0366 u32 *p_tranceiver_type);
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379 int qed_mcp_trans_speed_mask(struct qed_hwfn *p_hwfn,
0380 struct qed_ptt *p_ptt, u32 *p_speed_mask);
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392 int qed_mcp_get_board_config(struct qed_hwfn *p_hwfn,
0393 struct qed_ptt *p_ptt, u32 *p_board_config);
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413 int qed_mcp_cmd(struct qed_hwfn *p_hwfn,
0414 struct qed_ptt *p_ptt,
0415 u32 cmd,
0416 u32 param,
0417 u32 *o_mcp_resp,
0418 u32 *o_mcp_param);
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438 int qed_mcp_cmd_nosleep(struct qed_hwfn *p_hwfn,
0439 struct qed_ptt *p_ptt,
0440 u32 cmd,
0441 u32 param,
0442 u32 *o_mcp_resp,
0443 u32 *o_mcp_param);
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455 int qed_mcp_drain(struct qed_hwfn *p_hwfn,
0456 struct qed_ptt *p_ptt);
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467 int qed_mcp_get_flash_size(struct qed_hwfn *p_hwfn,
0468 struct qed_ptt *p_ptt,
0469 u32 *p_flash_size);
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480 int
0481 qed_mcp_send_drv_version(struct qed_hwfn *p_hwfn,
0482 struct qed_ptt *p_ptt,
0483 struct qed_mcp_drv_version *p_ver);
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493 u32 qed_get_process_kill_counter(struct qed_hwfn *p_hwfn,
0494 struct qed_ptt *p_ptt);
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504 int qed_start_recovery_process(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516 int qed_recovery_prolog(struct qed_dev *cdev);
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528 int qed_mcp_ov_update_current_config(struct qed_hwfn *p_hwfn,
0529 struct qed_ptt *p_ptt,
0530 enum qed_ov_client client);
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541 int qed_mcp_ov_update_driver_state(struct qed_hwfn *p_hwfn,
0542 struct qed_ptt *p_ptt,
0543 enum qed_ov_driver_state drv_state);
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554 int qed_mcp_ov_update_mtu(struct qed_hwfn *p_hwfn,
0555 struct qed_ptt *p_ptt, u16 mtu);
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566 int qed_mcp_ov_update_mac(struct qed_hwfn *p_hwfn,
0567 struct qed_ptt *p_ptt, const u8 *mac);
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578 int qed_mcp_ov_update_wol(struct qed_hwfn *p_hwfn,
0579 struct qed_ptt *p_ptt,
0580 enum qed_ov_wol wol);
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591 int qed_mcp_set_led(struct qed_hwfn *p_hwfn,
0592 struct qed_ptt *p_ptt,
0593 enum qed_led_mode mode);
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605 int qed_mcp_nvm_read(struct qed_dev *cdev, u32 addr, u8 *p_buf, u32 len);
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618 int qed_mcp_nvm_write(struct qed_dev *cdev,
0619 u32 cmd, u32 addr, u8 *p_buf, u32 len);
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629 int qed_mcp_nvm_resp(struct qed_dev *cdev, u8 *p_buf);
0630
0631 struct qed_nvm_image_att {
0632 u32 start_addr;
0633 u32 length;
0634 };
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645 int
0646 qed_mcp_get_nvm_image_att(struct qed_hwfn *p_hwfn,
0647 enum qed_nvm_images image_id,
0648 struct qed_nvm_image_att *p_image_att);
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660 int qed_mcp_get_nvm_image(struct qed_hwfn *p_hwfn,
0661 enum qed_nvm_images image_id,
0662 u8 *p_buffer, u32 buffer_len);
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672 int qed_mcp_bist_register_test(struct qed_hwfn *p_hwfn,
0673 struct qed_ptt *p_ptt);
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683 int qed_mcp_bist_clock_test(struct qed_hwfn *p_hwfn,
0684 struct qed_ptt *p_ptt);
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696 int qed_mcp_bist_nvm_get_num_images(struct qed_hwfn *p_hwfn,
0697 struct qed_ptt *p_ptt,
0698 u32 *num_images);
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709
0710
0711 int qed_mcp_bist_nvm_get_image_att(struct qed_hwfn *p_hwfn,
0712 struct qed_ptt *p_ptt,
0713 struct bist_nvm_image_att *p_image_att,
0714 u32 image_index);
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726 int qed_mfw_process_tlv_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738 int
0739 qed_mcp_send_raw_debug_data(struct qed_hwfn *p_hwfn,
0740 struct qed_ptt *p_ptt, u8 *p_buf, u32 size);
0741
0742
0743
0744
0745
0746
0747
0748 #define MCP_PF_ID_BY_REL(p_hwfn, rel_pfid) (QED_IS_BB((p_hwfn)->cdev) ? \
0749 ((rel_pfid) | \
0750 ((p_hwfn)->abs_pf_id & 1) << 3) : \
0751 rel_pfid)
0752 #define MCP_PF_ID(p_hwfn) MCP_PF_ID_BY_REL(p_hwfn, (p_hwfn)->rel_pf_id)
0753
0754 struct qed_mcp_info {
0755
0756 struct list_head cmd_list;
0757
0758
0759
0760
0761 spinlock_t cmd_lock;
0762
0763
0764 bool b_block_cmd;
0765
0766
0767
0768
0769 spinlock_t link_lock;
0770
0771 u32 public_base;
0772 u32 drv_mb_addr;
0773 u32 mfw_mb_addr;
0774 u32 port_addr;
0775 u16 drv_mb_seq;
0776 u16 drv_pulse_seq;
0777 struct qed_mcp_link_params link_input;
0778 struct qed_mcp_link_state link_output;
0779 struct qed_mcp_link_capabilities link_capabilities;
0780 struct qed_mcp_function_info func_info;
0781 u8 *mfw_mb_cur;
0782 u8 *mfw_mb_shadow;
0783 u16 mfw_mb_length;
0784 u32 mcp_hist;
0785
0786
0787 u32 capabilities;
0788
0789
0790 atomic_t dbg_data_seq;
0791
0792
0793
0794
0795 spinlock_t unload_lock;
0796 unsigned long mcp_handling_status;
0797 #define QED_MCP_BYPASS_PROC_BIT 0
0798 #define QED_MCP_IN_PROCESSING_BIT 1
0799 };
0800
0801 struct qed_mcp_mb_params {
0802 u32 cmd;
0803 u32 param;
0804 void *p_data_src;
0805 void *p_data_dst;
0806 u8 data_src_size;
0807 u8 data_dst_size;
0808 u32 mcp_resp;
0809 u32 mcp_param;
0810 u32 flags;
0811 #define QED_MB_FLAG_CAN_SLEEP (0x1 << 0)
0812 #define QED_MB_FLAG_AVOID_BLOCK (0x1 << 1)
0813 #define QED_MB_FLAGS_IS_SET(params, flag) \
0814 ({ typeof(params) __params = (params); \
0815 (__params && (__params->flags & QED_MB_FLAG_ ## flag)); })
0816 };
0817
0818 struct qed_drv_tlv_hdr {
0819 u8 tlv_type;
0820 u8 tlv_length;
0821 u8 tlv_reserved;
0822 #define QED_DRV_TLV_FLAGS_CHANGED 0x01
0823 u8 tlv_flags;
0824 };
0825
0826
0827
0828
0829
0830
0831
0832
0833 static inline bool
0834 qed_mcp_is_ext_speed_supported(const struct qed_hwfn *p_hwfn)
0835 {
0836 return !!(p_hwfn->mcp_info->capabilities &
0837 FW_MB_PARAM_FEATURE_SUPPORT_EXT_SPEED_FEC_CONTROL);
0838 }
0839
0840
0841
0842
0843
0844
0845
0846
0847
0848 int qed_mcp_cmd_init(struct qed_hwfn *p_hwfn,
0849 struct qed_ptt *p_ptt);
0850
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861 void qed_mcp_cmd_port_init(struct qed_hwfn *p_hwfn,
0862 struct qed_ptt *p_ptt);
0863
0864
0865
0866
0867
0868
0869
0870
0871 int qed_mcp_free(struct qed_hwfn *p_hwfn);
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885 int qed_mcp_handle_events(struct qed_hwfn *p_hwfn,
0886 struct qed_ptt *p_ptt);
0887
0888 enum qed_drv_role {
0889 QED_DRV_ROLE_OS,
0890 QED_DRV_ROLE_KDUMP,
0891 };
0892
0893 struct qed_load_req_params {
0894
0895 enum qed_drv_role drv_role;
0896 u8 timeout_val;
0897 bool avoid_eng_reset;
0898 enum qed_override_force_load override_force_load;
0899
0900
0901 u32 load_code;
0902 };
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913
0914
0915 int qed_mcp_load_req(struct qed_hwfn *p_hwfn,
0916 struct qed_ptt *p_ptt,
0917 struct qed_load_req_params *p_params);
0918
0919
0920
0921
0922
0923
0924
0925
0926
0927 int qed_mcp_load_done(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
0928
0929
0930
0931
0932
0933
0934
0935
0936
0937 int qed_mcp_unload_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947 int qed_mcp_unload_done(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957 void qed_mcp_read_mb(struct qed_hwfn *p_hwfn,
0958 struct qed_ptt *p_ptt);
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969 int qed_mcp_ack_vf_flr(struct qed_hwfn *p_hwfn,
0970 struct qed_ptt *p_ptt, u32 *vfs_to_ack);
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980
0981 int qed_mcp_fill_shmem_func_info(struct qed_hwfn *p_hwfn,
0982 struct qed_ptt *p_ptt);
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992 int qed_mcp_reset(struct qed_hwfn *p_hwfn,
0993 struct qed_ptt *p_ptt);
0994
0995
0996
0997
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012 int qed_mcp_nvm_rd_cmd(struct qed_hwfn *p_hwfn,
1013 struct qed_ptt *p_ptt,
1014 u32 cmd,
1015 u32 param,
1016 u32 *o_mcp_resp,
1017 u32 *o_mcp_param,
1018 u32 *o_txn_size, u32 *o_buf, bool b_can_sleep);
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033 int qed_mcp_phy_sfp_read(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
1034 u32 port, u32 addr, u32 offset, u32 len, u8 *p_buf);
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044 bool qed_mcp_is_init(struct qed_hwfn *p_hwfn);
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056 int qed_mcp_config_vf_msix(struct qed_hwfn *p_hwfn,
1057 struct qed_ptt *p_ptt, u8 vf_id, u8 num);
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067 int qed_mcp_halt(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077 int qed_mcp_resume(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1078
1079 int qed_configure_pf_min_bandwidth(struct qed_dev *cdev, u8 min_bw);
1080 int qed_configure_pf_max_bandwidth(struct qed_dev *cdev, u8 max_bw);
1081 int __qed_configure_pf_max_bandwidth(struct qed_hwfn *p_hwfn,
1082 struct qed_ptt *p_ptt,
1083 struct qed_mcp_link_state *p_link,
1084 u8 max_bw);
1085 int __qed_configure_pf_min_bandwidth(struct qed_hwfn *p_hwfn,
1086 struct qed_ptt *p_ptt,
1087 struct qed_mcp_link_state *p_link,
1088 u8 min_bw);
1089
1090 int qed_mcp_mask_parities(struct qed_hwfn *p_hwfn,
1091 struct qed_ptt *p_ptt, u32 mask_parities);
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101 int
1102 qed_mcp_mdump_get_retain(struct qed_hwfn *p_hwfn,
1103 struct qed_ptt *p_ptt,
1104 struct mdump_retain_data_stc *p_mdump_retain);
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117 int
1118 qed_mcp_set_resc_max_val(struct qed_hwfn *p_hwfn,
1119 struct qed_ptt *p_ptt,
1120 enum qed_resources res_id,
1121 u32 resc_max_val, u32 *p_mcp_resp);
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136 int
1137 qed_mcp_get_resc_info(struct qed_hwfn *p_hwfn,
1138 struct qed_ptt *p_ptt,
1139 enum qed_resources res_id,
1140 u32 *p_mcp_resp, u32 *p_resc_num, u32 *p_resc_start);
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151 int qed_mcp_ov_update_eswitch(struct qed_hwfn *p_hwfn,
1152 struct qed_ptt *p_ptt,
1153 enum qed_ov_eswitch eswitch);
1154
1155 #define QED_MCP_RESC_LOCK_MIN_VAL RESOURCE_DUMP
1156 #define QED_MCP_RESC_LOCK_MAX_VAL 31
1157
1158 enum qed_resc_lock {
1159 QED_RESC_LOCK_DBG_DUMP = QED_MCP_RESC_LOCK_MIN_VAL,
1160 QED_RESC_LOCK_PTP_PORT0,
1161 QED_RESC_LOCK_PTP_PORT1,
1162 QED_RESC_LOCK_PTP_PORT2,
1163 QED_RESC_LOCK_PTP_PORT3,
1164 QED_RESC_LOCK_RESC_ALLOC = QED_MCP_RESC_LOCK_MAX_VAL,
1165 QED_RESC_LOCK_RESC_INVALID
1166 };
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176 int qed_mcp_initiate_pf_flr(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1177 struct qed_resc_lock_params {
1178
1179 u8 resource;
1180
1181
1182 u8 timeout;
1183 #define QED_MCP_RESC_LOCK_TO_DEFAULT 0
1184 #define QED_MCP_RESC_LOCK_TO_NONE 255
1185
1186
1187 u8 retry_num;
1188 #define QED_MCP_RESC_LOCK_RETRY_CNT_DFLT 10
1189
1190
1191 u16 retry_interval;
1192 #define QED_MCP_RESC_LOCK_RETRY_VAL_DFLT 10000
1193
1194
1195 bool sleep_b4_retry;
1196
1197
1198 bool b_granted;
1199
1200
1201
1202
1203 u8 owner;
1204 };
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215 int
1216 qed_mcp_resc_lock(struct qed_hwfn *p_hwfn,
1217 struct qed_ptt *p_ptt, struct qed_resc_lock_params *p_params);
1218
1219 struct qed_resc_unlock_params {
1220
1221 u8 resource;
1222
1223
1224 bool b_force;
1225
1226
1227 bool b_released;
1228 };
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239 int
1240 qed_mcp_resc_unlock(struct qed_hwfn *p_hwfn,
1241 struct qed_ptt *p_ptt,
1242 struct qed_resc_unlock_params *p_params);
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255 void qed_mcp_resc_lock_default_init(struct qed_resc_lock_params *p_lock,
1256 struct qed_resc_unlock_params *p_unlock,
1257 enum qed_resc_lock
1258 resource, bool b_is_permanent);
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268 bool qed_mcp_is_smart_an_supported(struct qed_hwfn *p_hwfn);
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279 int qed_mcp_get_capabilities(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291 int qed_mcp_set_capabilities(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301 void qed_mcp_read_ufp_config(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311 int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn);
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321 void qed_mcp_nvm_info_free(struct qed_hwfn *p_hwfn);
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331 int qed_mcp_get_engine_config(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341 int qed_mcp_get_ppfid_bitmap(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356 int qed_mcp_nvm_get_cfg(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
1357 u16 option_id, u8 entity_id, u16 flags, u8 *p_buf,
1358 u32 *p_len);
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373 int qed_mcp_nvm_set_cfg(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt,
1374 u16 option_id, u8 entity_id, u16 flags, u8 *p_buf,
1375 u32 len);
1376
1377
1378
1379
1380
1381
1382
1383
1384 bool qed_mcp_is_esl_supported(struct qed_hwfn *p_hwfn);
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395 int qed_mcp_get_esl_status(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, bool *active);
1396 #endif