Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 // Copyright (c) 2016-2017 Hisilicon Limited.
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;  /* Absolute tqp id for in this pf */
0042     u8 tqp_vf;  /* VF id */
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;    /* Indicate it's pf or vf tqp */
0048     __le16 tqp_vid; /* Virtual id in this pf/vf */
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 /* Bit 15 indicate enable or not */
0080 #define HCLGE_BUF_UNIT_S    7  /* Buf size is united by 128 bytes */
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;  /* Waterline for low and high */
0123     u32 buf_size;   /* TC private buffer size */
0124     u32 tx_buf_size;
0125     u32 enable; /* Enable TC private buffer or not */
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 /* for DEVICE_VERSION_V1/2, reference to promisc cmd byte8 */
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 /* for DEVICE_VERSION_V3, reference to promisc cmd byte10 */
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; /* 0: sfp speed, 1: active speed */
0345     u8 active_fec;
0346     u8 autoneg; /* autoneg state */
0347     u8 autoneg_ability; /* whether support autoneg */
0348     __le32 speed_ability; /* speed ability for current media */
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, /* Add new or modify mac_vlan */
0378     HCLGE_MAC_VLAN_UPDATE,  /* Modify other fields of this table */
0379     HCLGE_MAC_VLAN_REMOVE,  /* Remove a entry through mac_vlan key */
0380     HCLGE_MAC_VLAN_LKUP,    /* Lookup a entry through mac_vlan key */
0381 };
0382 
0383 enum hclge_mac_vlan_add_resp_code {
0384     HCLGE_ADD_UC_OVERFLOW = 2,  /* ADD failed for UC overflow */
0385     HCLGE_ADD_MC_OVERFLOW,      /* ADD failed for 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   /* 16k  bytes */
0647 #define HCLGE_TOTAL_PKT_BUF     0x108000 /* 1.03125M bytes */
0648 #define HCLGE_DEFAULT_DV        0xA000   /* 40k byte */
0649 #define HCLGE_DEFAULT_NON_DCB_DV    0x7800  /* 30K byte */
0650 #define HCLGE_NON_DCB_ADDITIONAL_BUF    0x1400  /* 5120 byte */
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 /* mac speed type defined in firmware command */
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