0001
0002
0003
0004 #ifndef __HCLGE_CMD_H
0005 #define __HCLGE_CMD_H
0006 #include <linux/types.h>
0007 #include <linux/io.h>
0008 #include <linux/etherdevice.h>
0009 #include "hnae3.h"
0010 #include "hclge_comm_cmd.h"
0011
0012 struct hclge_dev;
0013
0014 #define HCLGE_CMDQ_RX_INVLD_B 0
0015 #define HCLGE_CMDQ_RX_OUTVLD_B 1
0016
0017 struct hclge_misc_vector {
0018 u8 __iomem *addr;
0019 int vector_irq;
0020 char name[HNAE3_INT_NAME_LEN];
0021 };
0022
0023 #define hclge_cmd_setup_basic_desc(desc, opcode, is_read) \
0024 hclge_comm_cmd_setup_basic_desc(desc, opcode, is_read)
0025
0026 #define HCLGE_TQP_REG_OFFSET 0x80000
0027 #define HCLGE_TQP_REG_SIZE 0x200
0028
0029 #define HCLGE_TQP_MAX_SIZE_DEV_V2 1024
0030 #define HCLGE_TQP_EXT_REG_OFFSET 0x100
0031
0032 #define HCLGE_RCB_INIT_QUERY_TIMEOUT 10
0033 #define HCLGE_RCB_INIT_FLAG_EN_B 0
0034 #define HCLGE_RCB_INIT_FLAG_FINI_B 8
0035 struct hclge_config_rcb_init_cmd {
0036 __le16 rcb_init_flag;
0037 u8 rsv[22];
0038 };
0039
0040 struct hclge_tqp_map_cmd {
0041 __le16 tqp_id;
0042 u8 tqp_vf;
0043 #define HCLGE_TQP_MAP_TYPE_PF 0
0044 #define HCLGE_TQP_MAP_TYPE_VF 1
0045 #define HCLGE_TQP_MAP_TYPE_B 0
0046 #define HCLGE_TQP_MAP_EN_B 1
0047 u8 tqp_flag;
0048 __le16 tqp_vid;
0049 u8 rsv[18];
0050 };
0051
0052 #define HCLGE_VECTOR_ELEMENTS_PER_CMD 10
0053
0054 enum hclge_int_type {
0055 HCLGE_INT_TX,
0056 HCLGE_INT_RX,
0057 HCLGE_INT_EVENT,
0058 };
0059
0060 struct hclge_ctrl_vector_chain_cmd {
0061 #define HCLGE_VECTOR_ID_L_S 0
0062 #define HCLGE_VECTOR_ID_L_M GENMASK(7, 0)
0063 u8 int_vector_id_l;
0064 u8 int_cause_num;
0065 #define HCLGE_INT_TYPE_S 0
0066 #define HCLGE_INT_TYPE_M GENMASK(1, 0)
0067 #define HCLGE_TQP_ID_S 2
0068 #define HCLGE_TQP_ID_M GENMASK(12, 2)
0069 #define HCLGE_INT_GL_IDX_S 13
0070 #define HCLGE_INT_GL_IDX_M GENMASK(14, 13)
0071 __le16 tqp_type_and_id[HCLGE_VECTOR_ELEMENTS_PER_CMD];
0072 u8 vfid;
0073 #define HCLGE_VECTOR_ID_H_S 8
0074 #define HCLGE_VECTOR_ID_H_M GENMASK(15, 8)
0075 u8 int_vector_id_h;
0076 };
0077
0078 #define HCLGE_MAX_TC_NUM 8
0079 #define HCLGE_TC0_PRI_BUF_EN_B 15
0080 #define HCLGE_BUF_UNIT_S 7
0081 struct hclge_tx_buff_alloc_cmd {
0082 __le16 tx_pkt_buff[HCLGE_MAX_TC_NUM];
0083 u8 tx_buff_rsv[8];
0084 };
0085
0086 struct hclge_rx_priv_buff_cmd {
0087 __le16 buf_num[HCLGE_MAX_TC_NUM];
0088 __le16 shared_buf;
0089 u8 rsv[6];
0090 };
0091
0092 #define HCLGE_RX_PRIV_EN_B 15
0093 #define HCLGE_TC_NUM_ONE_DESC 4
0094 struct hclge_priv_wl {
0095 __le16 high;
0096 __le16 low;
0097 };
0098
0099 struct hclge_rx_priv_wl_buf {
0100 struct hclge_priv_wl tc_wl[HCLGE_TC_NUM_ONE_DESC];
0101 };
0102
0103 struct hclge_rx_com_thrd {
0104 struct hclge_priv_wl com_thrd[HCLGE_TC_NUM_ONE_DESC];
0105 };
0106
0107 struct hclge_rx_com_wl {
0108 struct hclge_priv_wl com_wl;
0109 };
0110
0111 struct hclge_waterline {
0112 u32 low;
0113 u32 high;
0114 };
0115
0116 struct hclge_tc_thrd {
0117 u32 low;
0118 u32 high;
0119 };
0120
0121 struct hclge_priv_buf {
0122 struct hclge_waterline wl;
0123 u32 buf_size;
0124 u32 tx_buf_size;
0125 u32 enable;
0126 };
0127
0128 struct hclge_shared_buf {
0129 struct hclge_waterline self;
0130 struct hclge_tc_thrd tc_thrd[HCLGE_MAX_TC_NUM];
0131 u32 buf_size;
0132 };
0133
0134 struct hclge_pkt_buf_alloc {
0135 struct hclge_priv_buf priv_buf[HCLGE_MAX_TC_NUM];
0136 struct hclge_shared_buf s_buf;
0137 };
0138
0139 #define HCLGE_RX_COM_WL_EN_B 15
0140 struct hclge_rx_com_wl_buf_cmd {
0141 __le16 high_wl;
0142 __le16 low_wl;
0143 u8 rsv[20];
0144 };
0145
0146 #define HCLGE_RX_PKT_EN_B 15
0147 struct hclge_rx_pkt_buf_cmd {
0148 __le16 high_pkt;
0149 __le16 low_pkt;
0150 u8 rsv[20];
0151 };
0152
0153 #define HCLGE_PF_STATE_DONE_B 0
0154 #define HCLGE_PF_STATE_MAIN_B 1
0155 #define HCLGE_PF_STATE_BOND_B 2
0156 #define HCLGE_PF_STATE_MAC_N_B 6
0157 #define HCLGE_PF_MAC_NUM_MASK 0x3
0158 #define HCLGE_PF_STATE_MAIN BIT(HCLGE_PF_STATE_MAIN_B)
0159 #define HCLGE_PF_STATE_DONE BIT(HCLGE_PF_STATE_DONE_B)
0160 #define HCLGE_VF_RST_STATUS_CMD 4
0161
0162 struct hclge_func_status_cmd {
0163 __le32 vf_rst_state[HCLGE_VF_RST_STATUS_CMD];
0164 u8 pf_state;
0165 u8 mac_id;
0166 u8 rsv1;
0167 u8 pf_cnt_in_mac;
0168 u8 pf_num;
0169 u8 vf_num;
0170 u8 rsv[2];
0171 };
0172
0173 struct hclge_pf_res_cmd {
0174 __le16 tqp_num;
0175 __le16 buf_size;
0176 __le16 msixcap_localid_ba_nic;
0177 __le16 msixcap_localid_number_nic;
0178 __le16 pf_intr_vector_number_roce;
0179 __le16 pf_own_fun_number;
0180 __le16 tx_buf_size;
0181 __le16 dv_buf_size;
0182 __le16 ext_tqp_num;
0183 u8 rsv[6];
0184 };
0185
0186 #define HCLGE_CFG_OFFSET_S 0
0187 #define HCLGE_CFG_OFFSET_M GENMASK(19, 0)
0188 #define HCLGE_CFG_RD_LEN_S 24
0189 #define HCLGE_CFG_RD_LEN_M GENMASK(27, 24)
0190 #define HCLGE_CFG_RD_LEN_BYTES 16
0191 #define HCLGE_CFG_RD_LEN_UNIT 4
0192
0193 #define HCLGE_CFG_TC_NUM_S 8
0194 #define HCLGE_CFG_TC_NUM_M GENMASK(15, 8)
0195 #define HCLGE_CFG_TQP_DESC_N_S 16
0196 #define HCLGE_CFG_TQP_DESC_N_M GENMASK(31, 16)
0197 #define HCLGE_CFG_PHY_ADDR_S 0
0198 #define HCLGE_CFG_PHY_ADDR_M GENMASK(7, 0)
0199 #define HCLGE_CFG_MEDIA_TP_S 8
0200 #define HCLGE_CFG_MEDIA_TP_M GENMASK(15, 8)
0201 #define HCLGE_CFG_RX_BUF_LEN_S 16
0202 #define HCLGE_CFG_RX_BUF_LEN_M GENMASK(31, 16)
0203 #define HCLGE_CFG_MAC_ADDR_H_S 0
0204 #define HCLGE_CFG_MAC_ADDR_H_M GENMASK(15, 0)
0205 #define HCLGE_CFG_DEFAULT_SPEED_S 16
0206 #define HCLGE_CFG_DEFAULT_SPEED_M GENMASK(23, 16)
0207 #define HCLGE_CFG_RSS_SIZE_S 24
0208 #define HCLGE_CFG_RSS_SIZE_M GENMASK(31, 24)
0209 #define HCLGE_CFG_SPEED_ABILITY_S 0
0210 #define HCLGE_CFG_SPEED_ABILITY_M GENMASK(7, 0)
0211 #define HCLGE_CFG_SPEED_ABILITY_EXT_S 10
0212 #define HCLGE_CFG_SPEED_ABILITY_EXT_M GENMASK(15, 10)
0213 #define HCLGE_CFG_VLAN_FLTR_CAP_S 8
0214 #define HCLGE_CFG_VLAN_FLTR_CAP_M GENMASK(9, 8)
0215 #define HCLGE_CFG_UMV_TBL_SPACE_S 16
0216 #define HCLGE_CFG_UMV_TBL_SPACE_M GENMASK(31, 16)
0217 #define HCLGE_CFG_PF_RSS_SIZE_S 0
0218 #define HCLGE_CFG_PF_RSS_SIZE_M GENMASK(3, 0)
0219 #define HCLGE_CFG_TX_SPARE_BUF_SIZE_S 4
0220 #define HCLGE_CFG_TX_SPARE_BUF_SIZE_M GENMASK(15, 4)
0221
0222 #define HCLGE_CFG_CMD_CNT 4
0223
0224 struct hclge_cfg_param_cmd {
0225 __le32 offset;
0226 __le32 rsv;
0227 __le32 param[HCLGE_CFG_CMD_CNT];
0228 };
0229
0230 #define HCLGE_MAC_MODE 0x0
0231 #define HCLGE_DESC_NUM 0x40
0232
0233 #define HCLGE_ALLOC_VALID_B 0
0234 struct hclge_vf_num_cmd {
0235 u8 alloc_valid;
0236 u8 rsv[23];
0237 };
0238
0239 #define HCLGE_RSS_DEFAULT_OUTPORT_B 4
0240
0241 #define HCLGE_RSS_CFG_TBL_SIZE_H 4
0242 #define HCLGE_RSS_CFG_TBL_BW_L 8U
0243
0244 #define HCLGE_RSS_TC_OFFSET_S 0
0245 #define HCLGE_RSS_TC_OFFSET_M GENMASK(10, 0)
0246 #define HCLGE_RSS_TC_SIZE_MSB_B 11
0247 #define HCLGE_RSS_TC_SIZE_S 12
0248 #define HCLGE_RSS_TC_SIZE_M GENMASK(14, 12)
0249 #define HCLGE_RSS_TC_SIZE_MSB_OFFSET 3
0250 #define HCLGE_RSS_TC_VALID_B 15
0251
0252 #define HCLGE_LINK_STATUS_UP_B 0
0253 #define HCLGE_LINK_STATUS_UP_M BIT(HCLGE_LINK_STATUS_UP_B)
0254 struct hclge_link_status_cmd {
0255 u8 status;
0256 u8 rsv[23];
0257 };
0258
0259
0260 #define HCLGE_PROMISC_EN_UC 1
0261 #define HCLGE_PROMISC_EN_MC 2
0262 #define HCLGE_PROMISC_EN_BC 3
0263 #define HCLGE_PROMISC_TX_EN 4
0264 #define HCLGE_PROMISC_RX_EN 5
0265
0266
0267 #define HCLGE_PROMISC_UC_RX_EN 2
0268 #define HCLGE_PROMISC_MC_RX_EN 3
0269 #define HCLGE_PROMISC_BC_RX_EN 4
0270 #define HCLGE_PROMISC_UC_TX_EN 5
0271 #define HCLGE_PROMISC_MC_TX_EN 6
0272 #define HCLGE_PROMISC_BC_TX_EN 7
0273
0274 struct hclge_promisc_cfg_cmd {
0275 u8 promisc;
0276 u8 vf_id;
0277 u8 extend_promisc;
0278 u8 rsv0[21];
0279 };
0280
0281 enum hclge_promisc_type {
0282 HCLGE_UNICAST = 1,
0283 HCLGE_MULTICAST = 2,
0284 HCLGE_BROADCAST = 3,
0285 };
0286
0287 #define HCLGE_MAC_TX_EN_B 6
0288 #define HCLGE_MAC_RX_EN_B 7
0289 #define HCLGE_MAC_PAD_TX_B 11
0290 #define HCLGE_MAC_PAD_RX_B 12
0291 #define HCLGE_MAC_1588_TX_B 13
0292 #define HCLGE_MAC_1588_RX_B 14
0293 #define HCLGE_MAC_APP_LP_B 15
0294 #define HCLGE_MAC_LINE_LP_B 16
0295 #define HCLGE_MAC_FCS_TX_B 17
0296 #define HCLGE_MAC_RX_OVERSIZE_TRUNCATE_B 18
0297 #define HCLGE_MAC_RX_FCS_STRIP_B 19
0298 #define HCLGE_MAC_RX_FCS_B 20
0299 #define HCLGE_MAC_TX_UNDER_MIN_ERR_B 21
0300 #define HCLGE_MAC_TX_OVERSIZE_TRUNCATE_B 22
0301
0302 struct hclge_config_mac_mode_cmd {
0303 __le32 txrx_pad_fcs_loop_en;
0304 u8 rsv[20];
0305 };
0306
0307 struct hclge_pf_rst_sync_cmd {
0308 #define HCLGE_PF_RST_ALL_VF_RDY_B 0
0309 u8 all_vf_ready;
0310 u8 rsv[23];
0311 };
0312
0313 #define HCLGE_CFG_SPEED_S 0
0314 #define HCLGE_CFG_SPEED_M GENMASK(5, 0)
0315
0316 #define HCLGE_CFG_DUPLEX_B 7
0317 #define HCLGE_CFG_DUPLEX_M BIT(HCLGE_CFG_DUPLEX_B)
0318
0319 struct hclge_config_mac_speed_dup_cmd {
0320 u8 speed_dup;
0321
0322 #define HCLGE_CFG_MAC_SPEED_CHANGE_EN_B 0
0323 u8 mac_change_fec_en;
0324 u8 rsv[22];
0325 };
0326
0327 #define HCLGE_TQP_ENABLE_B 0
0328
0329 #define HCLGE_MAC_CFG_AN_EN_B 0
0330 #define HCLGE_MAC_CFG_AN_INT_EN_B 1
0331 #define HCLGE_MAC_CFG_AN_INT_MSK_B 2
0332 #define HCLGE_MAC_CFG_AN_INT_CLR_B 3
0333 #define HCLGE_MAC_CFG_AN_RST_B 4
0334
0335 #define HCLGE_MAC_CFG_AN_EN BIT(HCLGE_MAC_CFG_AN_EN_B)
0336
0337 struct hclge_config_auto_neg_cmd {
0338 __le32 cfg_an_cmd_flag;
0339 u8 rsv[20];
0340 };
0341
0342 struct hclge_sfp_info_cmd {
0343 __le32 speed;
0344 u8 query_type;
0345 u8 active_fec;
0346 u8 autoneg;
0347 u8 autoneg_ability;
0348 __le32 speed_ability;
0349 __le32 module_type;
0350 u8 rsv[8];
0351 };
0352
0353 #define HCLGE_MAC_CFG_FEC_AUTO_EN_B 0
0354 #define HCLGE_MAC_CFG_FEC_MODE_S 1
0355 #define HCLGE_MAC_CFG_FEC_MODE_M GENMASK(3, 1)
0356 #define HCLGE_MAC_CFG_FEC_SET_DEF_B 0
0357 #define HCLGE_MAC_CFG_FEC_CLR_DEF_B 1
0358
0359 #define HCLGE_MAC_FEC_OFF 0
0360 #define HCLGE_MAC_FEC_BASER 1
0361 #define HCLGE_MAC_FEC_RS 2
0362 struct hclge_config_fec_cmd {
0363 u8 fec_mode;
0364 u8 default_config;
0365 u8 rsv[22];
0366 };
0367
0368 #define HCLGE_MAC_UPLINK_PORT 0x100
0369
0370 struct hclge_config_max_frm_size_cmd {
0371 __le16 max_frm_size;
0372 u8 min_frm_size;
0373 u8 rsv[21];
0374 };
0375
0376 enum hclge_mac_vlan_tbl_opcode {
0377 HCLGE_MAC_VLAN_ADD,
0378 HCLGE_MAC_VLAN_UPDATE,
0379 HCLGE_MAC_VLAN_REMOVE,
0380 HCLGE_MAC_VLAN_LKUP,
0381 };
0382
0383 enum hclge_mac_vlan_add_resp_code {
0384 HCLGE_ADD_UC_OVERFLOW = 2,
0385 HCLGE_ADD_MC_OVERFLOW,
0386 };
0387
0388 #define HCLGE_MAC_VLAN_BIT0_EN_B 0
0389 #define HCLGE_MAC_VLAN_BIT1_EN_B 1
0390 #define HCLGE_MAC_EPORT_SW_EN_B 12
0391 #define HCLGE_MAC_EPORT_TYPE_B 11
0392 #define HCLGE_MAC_EPORT_VFID_S 3
0393 #define HCLGE_MAC_EPORT_VFID_M GENMASK(10, 3)
0394 #define HCLGE_MAC_EPORT_PFID_S 0
0395 #define HCLGE_MAC_EPORT_PFID_M GENMASK(2, 0)
0396 struct hclge_mac_vlan_tbl_entry_cmd {
0397 u8 flags;
0398 u8 resp_code;
0399 __le16 vlan_tag;
0400 __le32 mac_addr_hi32;
0401 __le16 mac_addr_lo16;
0402 __le16 rsv1;
0403 u8 entry_type;
0404 u8 mc_mac_en;
0405 __le16 egress_port;
0406 __le16 egress_queue;
0407 u8 rsv2[6];
0408 };
0409
0410 #define HCLGE_UMV_SPC_ALC_B 0
0411 struct hclge_umv_spc_alc_cmd {
0412 u8 allocate;
0413 u8 rsv1[3];
0414 __le32 space_size;
0415 u8 rsv2[16];
0416 };
0417
0418 #define HCLGE_MAC_MGR_MASK_VLAN_B BIT(0)
0419 #define HCLGE_MAC_MGR_MASK_MAC_B BIT(1)
0420 #define HCLGE_MAC_MGR_MASK_ETHERTYPE_B BIT(2)
0421
0422 struct hclge_mac_mgr_tbl_entry_cmd {
0423 u8 flags;
0424 u8 resp_code;
0425 __le16 vlan_tag;
0426 u8 mac_addr[ETH_ALEN];
0427 __le16 rsv1;
0428 __le16 ethter_type;
0429 __le16 egress_port;
0430 __le16 egress_queue;
0431 u8 sw_port_id_aware;
0432 u8 rsv2;
0433 u8 i_port_bitmap;
0434 u8 i_port_direction;
0435 u8 rsv3[2];
0436 };
0437
0438 struct hclge_vlan_filter_ctrl_cmd {
0439 u8 vlan_type;
0440 u8 vlan_fe;
0441 u8 rsv1[2];
0442 u8 vf_id;
0443 u8 rsv2[19];
0444 };
0445
0446 #define HCLGE_VLAN_ID_OFFSET_STEP 160
0447 #define HCLGE_VLAN_BYTE_SIZE 8
0448 #define HCLGE_VLAN_OFFSET_BITMAP \
0449 (HCLGE_VLAN_ID_OFFSET_STEP / HCLGE_VLAN_BYTE_SIZE)
0450
0451 struct hclge_vlan_filter_pf_cfg_cmd {
0452 u8 vlan_offset;
0453 u8 vlan_cfg;
0454 u8 rsv[2];
0455 u8 vlan_offset_bitmap[HCLGE_VLAN_OFFSET_BITMAP];
0456 };
0457
0458 #define HCLGE_MAX_VF_BYTES 16
0459
0460 struct hclge_vlan_filter_vf_cfg_cmd {
0461 __le16 vlan_id;
0462 u8 resp_code;
0463 u8 rsv;
0464 u8 vlan_cfg;
0465 u8 rsv1[3];
0466 u8 vf_bitmap[HCLGE_MAX_VF_BYTES];
0467 };
0468
0469 #define HCLGE_INGRESS_BYPASS_B 0
0470 struct hclge_port_vlan_filter_bypass_cmd {
0471 u8 bypass_state;
0472 u8 rsv1[3];
0473 u8 vf_id;
0474 u8 rsv2[19];
0475 };
0476
0477 #define HCLGE_SWITCH_ANTI_SPOOF_B 0U
0478 #define HCLGE_SWITCH_ALW_LPBK_B 1U
0479 #define HCLGE_SWITCH_ALW_LCL_LPBK_B 2U
0480 #define HCLGE_SWITCH_ALW_DST_OVRD_B 3U
0481 #define HCLGE_SWITCH_NO_MASK 0x0
0482 #define HCLGE_SWITCH_ANTI_SPOOF_MASK 0xFE
0483 #define HCLGE_SWITCH_ALW_LPBK_MASK 0xFD
0484 #define HCLGE_SWITCH_ALW_LCL_LPBK_MASK 0xFB
0485 #define HCLGE_SWITCH_LW_DST_OVRD_MASK 0xF7
0486
0487 struct hclge_mac_vlan_switch_cmd {
0488 u8 roce_sel;
0489 u8 rsv1[3];
0490 __le32 func_id;
0491 u8 switch_param;
0492 u8 rsv2[3];
0493 u8 param_mask;
0494 u8 rsv3[11];
0495 };
0496
0497 enum hclge_mac_vlan_cfg_sel {
0498 HCLGE_MAC_VLAN_NIC_SEL = 0,
0499 HCLGE_MAC_VLAN_ROCE_SEL,
0500 };
0501
0502 #define HCLGE_ACCEPT_TAG1_B 0
0503 #define HCLGE_ACCEPT_UNTAG1_B 1
0504 #define HCLGE_PORT_INS_TAG1_EN_B 2
0505 #define HCLGE_PORT_INS_TAG2_EN_B 3
0506 #define HCLGE_CFG_NIC_ROCE_SEL_B 4
0507 #define HCLGE_ACCEPT_TAG2_B 5
0508 #define HCLGE_ACCEPT_UNTAG2_B 6
0509 #define HCLGE_TAG_SHIFT_MODE_EN_B 7
0510 #define HCLGE_VF_NUM_PER_BYTE 8
0511
0512 struct hclge_vport_vtag_tx_cfg_cmd {
0513 u8 vport_vlan_cfg;
0514 u8 vf_offset;
0515 u8 rsv1[2];
0516 __le16 def_vlan_tag1;
0517 __le16 def_vlan_tag2;
0518 u8 vf_bitmap[HCLGE_VF_NUM_PER_BYTE];
0519 u8 rsv2[8];
0520 };
0521
0522 #define HCLGE_REM_TAG1_EN_B 0
0523 #define HCLGE_REM_TAG2_EN_B 1
0524 #define HCLGE_SHOW_TAG1_EN_B 2
0525 #define HCLGE_SHOW_TAG2_EN_B 3
0526 #define HCLGE_DISCARD_TAG1_EN_B 5
0527 #define HCLGE_DISCARD_TAG2_EN_B 6
0528 struct hclge_vport_vtag_rx_cfg_cmd {
0529 u8 vport_vlan_cfg;
0530 u8 vf_offset;
0531 u8 rsv1[6];
0532 u8 vf_bitmap[HCLGE_VF_NUM_PER_BYTE];
0533 u8 rsv2[8];
0534 };
0535
0536 struct hclge_tx_vlan_type_cfg_cmd {
0537 __le16 ot_vlan_type;
0538 __le16 in_vlan_type;
0539 u8 rsv[20];
0540 };
0541
0542 struct hclge_rx_vlan_type_cfg_cmd {
0543 __le16 ot_fst_vlan_type;
0544 __le16 ot_sec_vlan_type;
0545 __le16 in_fst_vlan_type;
0546 __le16 in_sec_vlan_type;
0547 u8 rsv[16];
0548 };
0549
0550 struct hclge_cfg_com_tqp_queue_cmd {
0551 __le16 tqp_id;
0552 __le16 stream_id;
0553 u8 enable;
0554 u8 rsv[19];
0555 };
0556
0557 struct hclge_cfg_tx_queue_pointer_cmd {
0558 __le16 tqp_id;
0559 __le16 tx_tail;
0560 __le16 tx_head;
0561 __le16 fbd_num;
0562 __le16 ring_offset;
0563 u8 rsv[14];
0564 };
0565
0566 #pragma pack(1)
0567 struct hclge_mac_ethertype_idx_rd_cmd {
0568 u8 flags;
0569 u8 resp_code;
0570 __le16 vlan_tag;
0571 u8 mac_addr[ETH_ALEN];
0572 __le16 index;
0573 __le16 ethter_type;
0574 __le16 egress_port;
0575 __le16 egress_queue;
0576 __le16 rev0;
0577 u8 i_port_bitmap;
0578 u8 i_port_direction;
0579 u8 rev1[2];
0580 };
0581
0582 #pragma pack()
0583
0584 #define HCLGE_TSO_MSS_MIN_S 0
0585 #define HCLGE_TSO_MSS_MIN_M GENMASK(13, 0)
0586
0587 #define HCLGE_TSO_MSS_MAX_S 16
0588 #define HCLGE_TSO_MSS_MAX_M GENMASK(29, 16)
0589
0590 struct hclge_cfg_tso_status_cmd {
0591 __le16 tso_mss_min;
0592 __le16 tso_mss_max;
0593 u8 rsv[20];
0594 };
0595
0596 #define HCLGE_GRO_EN_B 0
0597 struct hclge_cfg_gro_status_cmd {
0598 u8 gro_en;
0599 u8 rsv[23];
0600 };
0601
0602 #define HCLGE_TSO_MSS_MIN 256
0603 #define HCLGE_TSO_MSS_MAX 9668
0604
0605 #define HCLGE_TQP_RESET_B 0
0606 struct hclge_reset_tqp_queue_cmd {
0607 __le16 tqp_id;
0608 u8 reset_req;
0609 u8 ready_to_reset;
0610 u8 rsv[20];
0611 };
0612
0613 #define HCLGE_CFG_RESET_MAC_B 3
0614 #define HCLGE_CFG_RESET_FUNC_B 7
0615 #define HCLGE_CFG_RESET_RCB_B 1
0616 struct hclge_reset_cmd {
0617 u8 mac_func_reset;
0618 u8 fun_reset_vfid;
0619 u8 fun_reset_rcb;
0620 u8 rsv;
0621 __le16 fun_reset_rcb_vqid_start;
0622 __le16 fun_reset_rcb_vqid_num;
0623 u8 fun_reset_rcb_return_status;
0624 u8 rsv1[15];
0625 };
0626
0627 #define HCLGE_PF_RESET_DONE_BIT BIT(0)
0628
0629 struct hclge_pf_rst_done_cmd {
0630 u8 pf_rst_done;
0631 u8 rsv[23];
0632 };
0633
0634 #define HCLGE_CMD_SERDES_SERIAL_INNER_LOOP_B BIT(0)
0635 #define HCLGE_CMD_SERDES_PARALLEL_INNER_LOOP_B BIT(2)
0636 #define HCLGE_CMD_GE_PHY_INNER_LOOP_B BIT(3)
0637 #define HCLGE_CMD_COMMON_LB_DONE_B BIT(0)
0638 #define HCLGE_CMD_COMMON_LB_SUCCESS_B BIT(1)
0639 struct hclge_common_lb_cmd {
0640 u8 mask;
0641 u8 enable;
0642 u8 result;
0643 u8 rsv[21];
0644 };
0645
0646 #define HCLGE_DEFAULT_TX_BUF 0x4000
0647 #define HCLGE_TOTAL_PKT_BUF 0x108000
0648 #define HCLGE_DEFAULT_DV 0xA000
0649 #define HCLGE_DEFAULT_NON_DCB_DV 0x7800
0650 #define HCLGE_NON_DCB_ADDITIONAL_BUF 0x1400
0651
0652 #define HCLGE_LED_LOCATE_STATE_S 0
0653 #define HCLGE_LED_LOCATE_STATE_M GENMASK(1, 0)
0654
0655 struct hclge_set_led_state_cmd {
0656 u8 rsv1[3];
0657 u8 locate_led_config;
0658 u8 rsv2[20];
0659 };
0660
0661 struct hclge_get_fd_mode_cmd {
0662 u8 mode;
0663 u8 enable;
0664 u8 rsv[22];
0665 };
0666
0667 struct hclge_get_fd_allocation_cmd {
0668 __le32 stage1_entry_num;
0669 __le32 stage2_entry_num;
0670 __le16 stage1_counter_num;
0671 __le16 stage2_counter_num;
0672 u8 rsv[12];
0673 };
0674
0675 struct hclge_set_fd_key_config_cmd {
0676 u8 stage;
0677 u8 key_select;
0678 u8 inner_sipv6_word_en;
0679 u8 inner_dipv6_word_en;
0680 u8 outer_sipv6_word_en;
0681 u8 outer_dipv6_word_en;
0682 u8 rsv1[2];
0683 __le32 tuple_mask;
0684 __le32 meta_data_mask;
0685 u8 rsv2[8];
0686 };
0687
0688 #define HCLGE_FD_EPORT_SW_EN_B 0
0689 struct hclge_fd_tcam_config_1_cmd {
0690 u8 stage;
0691 u8 xy_sel;
0692 u8 port_info;
0693 u8 rsv1[1];
0694 __le32 index;
0695 u8 entry_vld;
0696 u8 rsv2[7];
0697 u8 tcam_data[8];
0698 };
0699
0700 struct hclge_fd_tcam_config_2_cmd {
0701 u8 tcam_data[24];
0702 };
0703
0704 struct hclge_fd_tcam_config_3_cmd {
0705 u8 tcam_data[20];
0706 u8 rsv[4];
0707 };
0708
0709 #define HCLGE_FD_AD_DROP_B 0
0710 #define HCLGE_FD_AD_DIRECT_QID_B 1
0711 #define HCLGE_FD_AD_QID_S 2
0712 #define HCLGE_FD_AD_QID_M GENMASK(11, 2)
0713 #define HCLGE_FD_AD_USE_COUNTER_B 12
0714 #define HCLGE_FD_AD_COUNTER_NUM_S 13
0715 #define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(20, 13)
0716 #define HCLGE_FD_AD_NXT_STEP_B 20
0717 #define HCLGE_FD_AD_NXT_KEY_S 21
0718 #define HCLGE_FD_AD_NXT_KEY_M GENMASK(25, 21)
0719 #define HCLGE_FD_AD_WR_RULE_ID_B 0
0720 #define HCLGE_FD_AD_RULE_ID_S 1
0721 #define HCLGE_FD_AD_RULE_ID_M GENMASK(12, 1)
0722 #define HCLGE_FD_AD_TC_OVRD_B 16
0723 #define HCLGE_FD_AD_TC_SIZE_S 17
0724 #define HCLGE_FD_AD_TC_SIZE_M GENMASK(20, 17)
0725
0726 struct hclge_fd_ad_config_cmd {
0727 u8 stage;
0728 u8 rsv1[3];
0729 __le32 index;
0730 __le64 ad_data;
0731 u8 rsv2[8];
0732 };
0733
0734 struct hclge_fd_ad_cnt_read_cmd {
0735 u8 rsv0[4];
0736 __le16 index;
0737 u8 rsv1[2];
0738 __le64 cnt;
0739 u8 rsv2[8];
0740 };
0741
0742 #define HCLGE_FD_USER_DEF_OFT_S 0
0743 #define HCLGE_FD_USER_DEF_OFT_M GENMASK(14, 0)
0744 #define HCLGE_FD_USER_DEF_EN_B 15
0745 struct hclge_fd_user_def_cfg_cmd {
0746 __le16 ol2_cfg;
0747 __le16 l2_cfg;
0748 __le16 ol3_cfg;
0749 __le16 l3_cfg;
0750 __le16 ol4_cfg;
0751 __le16 l4_cfg;
0752 u8 rsv[12];
0753 };
0754
0755 struct hclge_get_imp_bd_cmd {
0756 __le32 bd_num;
0757 u8 rsv[20];
0758 };
0759
0760 struct hclge_query_ppu_pf_other_int_dfx_cmd {
0761 __le16 over_8bd_no_fe_qid;
0762 __le16 over_8bd_no_fe_vf_id;
0763 __le16 tso_mss_cmp_min_err_qid;
0764 __le16 tso_mss_cmp_min_err_vf_id;
0765 __le16 tso_mss_cmp_max_err_qid;
0766 __le16 tso_mss_cmp_max_err_vf_id;
0767 __le16 tx_rd_fbd_poison_qid;
0768 __le16 tx_rd_fbd_poison_vf_id;
0769 __le16 rx_rd_fbd_poison_qid;
0770 __le16 rx_rd_fbd_poison_vf_id;
0771 u8 rsv[4];
0772 };
0773
0774 #define HCLGE_SFP_INFO_CMD_NUM 6
0775 #define HCLGE_SFP_INFO_BD0_LEN 20
0776 #define HCLGE_SFP_INFO_BDX_LEN 24
0777 #define HCLGE_SFP_INFO_MAX_LEN \
0778 (HCLGE_SFP_INFO_BD0_LEN + \
0779 (HCLGE_SFP_INFO_CMD_NUM - 1) * HCLGE_SFP_INFO_BDX_LEN)
0780
0781 struct hclge_sfp_info_bd0_cmd {
0782 __le16 offset;
0783 __le16 read_len;
0784 u8 data[HCLGE_SFP_INFO_BD0_LEN];
0785 };
0786
0787 #define HCLGE_QUERY_DEV_SPECS_BD_NUM 4
0788
0789 struct hclge_dev_specs_0_cmd {
0790 __le32 rsv0;
0791 __le32 mac_entry_num;
0792 __le32 mng_entry_num;
0793 __le16 rss_ind_tbl_size;
0794 __le16 rss_key_size;
0795 __le16 int_ql_max;
0796 u8 max_non_tso_bd_num;
0797 u8 rsv1;
0798 __le32 max_tm_rate;
0799 };
0800
0801 #define HCLGE_DEF_MAX_INT_GL 0x1FE0U
0802
0803 struct hclge_dev_specs_1_cmd {
0804 __le16 max_frm_size;
0805 __le16 max_qset_num;
0806 __le16 max_int_gl;
0807 u8 rsv0[2];
0808 __le16 umv_size;
0809 __le16 mc_mac_size;
0810 u8 rsv1[12];
0811 };
0812
0813
0814 enum HCLGE_FIRMWARE_MAC_SPEED {
0815 HCLGE_FW_MAC_SPEED_1G,
0816 HCLGE_FW_MAC_SPEED_10G,
0817 HCLGE_FW_MAC_SPEED_25G,
0818 HCLGE_FW_MAC_SPEED_40G,
0819 HCLGE_FW_MAC_SPEED_50G,
0820 HCLGE_FW_MAC_SPEED_100G,
0821 HCLGE_FW_MAC_SPEED_10M,
0822 HCLGE_FW_MAC_SPEED_100M,
0823 HCLGE_FW_MAC_SPEED_200G,
0824 };
0825
0826 #define HCLGE_PHY_LINK_SETTING_BD_NUM 2
0827
0828 struct hclge_phy_link_ksetting_0_cmd {
0829 __le32 speed;
0830 u8 duplex;
0831 u8 autoneg;
0832 u8 eth_tp_mdix;
0833 u8 eth_tp_mdix_ctrl;
0834 u8 port;
0835 u8 transceiver;
0836 u8 phy_address;
0837 u8 rsv;
0838 __le32 supported;
0839 __le32 advertising;
0840 __le32 lp_advertising;
0841 };
0842
0843 struct hclge_phy_link_ksetting_1_cmd {
0844 u8 master_slave_cfg;
0845 u8 master_slave_state;
0846 u8 rsv[22];
0847 };
0848
0849 struct hclge_phy_reg_cmd {
0850 __le16 reg_addr;
0851 u8 rsv0[2];
0852 __le16 reg_val;
0853 u8 rsv1[18];
0854 };
0855
0856 struct hclge_hw;
0857 int hclge_cmd_send(struct hclge_hw *hw, struct hclge_desc *desc, int num);
0858 enum hclge_comm_cmd_status hclge_cmd_mdio_write(struct hclge_hw *hw,
0859 struct hclge_desc *desc);
0860 enum hclge_comm_cmd_status hclge_cmd_mdio_read(struct hclge_hw *hw,
0861 struct hclge_desc *desc);
0862 #endif