xref: /linux/drivers/net/ethernet/huawei/hinic3/hinic3_mgmt_interface.h (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1*17fcb3dcSFan Gong /* SPDX-License-Identifier: GPL-2.0 */
2*17fcb3dcSFan Gong /* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved. */
3*17fcb3dcSFan Gong 
4*17fcb3dcSFan Gong #ifndef _HINIC3_MGMT_INTERFACE_H_
5*17fcb3dcSFan Gong #define _HINIC3_MGMT_INTERFACE_H_
6*17fcb3dcSFan Gong 
7*17fcb3dcSFan Gong #include <linux/bitfield.h>
8*17fcb3dcSFan Gong #include <linux/bits.h>
9*17fcb3dcSFan Gong #include <linux/if_ether.h>
10*17fcb3dcSFan Gong 
11*17fcb3dcSFan Gong #include "hinic3_hw_intf.h"
12*17fcb3dcSFan Gong 
13*17fcb3dcSFan Gong struct l2nic_cmd_feature_nego {
14*17fcb3dcSFan Gong 	struct mgmt_msg_head msg_head;
15*17fcb3dcSFan Gong 	u16                  func_id;
16*17fcb3dcSFan Gong 	u8                   opcode;
17*17fcb3dcSFan Gong 	u8                   rsvd;
18*17fcb3dcSFan Gong 	u64                  s_feature[4];
19*17fcb3dcSFan Gong };
20*17fcb3dcSFan Gong 
21*17fcb3dcSFan Gong enum l2nic_func_tbl_cfg_bitmap {
22*17fcb3dcSFan Gong 	L2NIC_FUNC_TBL_CFG_INIT        = 0,
23*17fcb3dcSFan Gong 	L2NIC_FUNC_TBL_CFG_RX_BUF_SIZE = 1,
24*17fcb3dcSFan Gong 	L2NIC_FUNC_TBL_CFG_MTU         = 2,
25*17fcb3dcSFan Gong };
26*17fcb3dcSFan Gong 
27*17fcb3dcSFan Gong struct l2nic_func_tbl_cfg {
28*17fcb3dcSFan Gong 	u16 rx_wqe_buf_size;
29*17fcb3dcSFan Gong 	u16 mtu;
30*17fcb3dcSFan Gong 	u32 rsvd[9];
31*17fcb3dcSFan Gong };
32*17fcb3dcSFan Gong 
33*17fcb3dcSFan Gong struct l2nic_cmd_set_func_tbl {
34*17fcb3dcSFan Gong 	struct mgmt_msg_head      msg_head;
35*17fcb3dcSFan Gong 	u16                       func_id;
36*17fcb3dcSFan Gong 	u16                       rsvd;
37*17fcb3dcSFan Gong 	u32                       cfg_bitmap;
38*17fcb3dcSFan Gong 	struct l2nic_func_tbl_cfg tbl_cfg;
39*17fcb3dcSFan Gong };
40*17fcb3dcSFan Gong 
41*17fcb3dcSFan Gong struct l2nic_cmd_set_mac {
42*17fcb3dcSFan Gong 	struct mgmt_msg_head msg_head;
43*17fcb3dcSFan Gong 	u16                  func_id;
44*17fcb3dcSFan Gong 	u16                  vlan_id;
45*17fcb3dcSFan Gong 	u16                  rsvd1;
46*17fcb3dcSFan Gong 	u8                   mac[ETH_ALEN];
47*17fcb3dcSFan Gong };
48*17fcb3dcSFan Gong 
49*17fcb3dcSFan Gong struct l2nic_cmd_update_mac {
50*17fcb3dcSFan Gong 	struct mgmt_msg_head msg_head;
51*17fcb3dcSFan Gong 	u16                  func_id;
52*17fcb3dcSFan Gong 	u16                  vlan_id;
53*17fcb3dcSFan Gong 	u16                  rsvd1;
54*17fcb3dcSFan Gong 	u8                   old_mac[ETH_ALEN];
55*17fcb3dcSFan Gong 	u16                  rsvd2;
56*17fcb3dcSFan Gong 	u8                   new_mac[ETH_ALEN];
57*17fcb3dcSFan Gong };
58*17fcb3dcSFan Gong 
59*17fcb3dcSFan Gong struct l2nic_cmd_force_pkt_drop {
60*17fcb3dcSFan Gong 	struct mgmt_msg_head msg_head;
61*17fcb3dcSFan Gong 	u8                   port;
62*17fcb3dcSFan Gong 	u8                   rsvd1[3];
63*17fcb3dcSFan Gong };
64*17fcb3dcSFan Gong 
65*17fcb3dcSFan Gong /* Commands between NIC to fw */
66*17fcb3dcSFan Gong enum l2nic_cmd {
67*17fcb3dcSFan Gong 	/* FUNC CFG */
68*17fcb3dcSFan Gong 	L2NIC_CMD_SET_FUNC_TBL        = 5,
69*17fcb3dcSFan Gong 	L2NIC_CMD_SET_VPORT_ENABLE    = 6,
70*17fcb3dcSFan Gong 	L2NIC_CMD_SET_SQ_CI_ATTR      = 8,
71*17fcb3dcSFan Gong 	L2NIC_CMD_CLEAR_QP_RESOURCE   = 11,
72*17fcb3dcSFan Gong 	L2NIC_CMD_FEATURE_NEGO        = 15,
73*17fcb3dcSFan Gong 	L2NIC_CMD_SET_MAC             = 21,
74*17fcb3dcSFan Gong 	L2NIC_CMD_DEL_MAC             = 22,
75*17fcb3dcSFan Gong 	L2NIC_CMD_UPDATE_MAC          = 23,
76*17fcb3dcSFan Gong 	L2NIC_CMD_CFG_RSS             = 60,
77*17fcb3dcSFan Gong 	L2NIC_CMD_CFG_RSS_HASH_KEY    = 63,
78*17fcb3dcSFan Gong 	L2NIC_CMD_CFG_RSS_HASH_ENGINE = 64,
79*17fcb3dcSFan Gong 	L2NIC_CMD_SET_RSS_CTX_TBL     = 65,
80*17fcb3dcSFan Gong 	L2NIC_CMD_QOS_DCB_STATE       = 110,
81*17fcb3dcSFan Gong 	L2NIC_CMD_FORCE_PKT_DROP      = 113,
82*17fcb3dcSFan Gong 	L2NIC_CMD_MAX                 = 256,
83*17fcb3dcSFan Gong };
84*17fcb3dcSFan Gong 
85*17fcb3dcSFan Gong enum hinic3_nic_feature_cap {
86*17fcb3dcSFan Gong 	HINIC3_NIC_F_CSUM           = BIT(0),
87*17fcb3dcSFan Gong 	HINIC3_NIC_F_SCTP_CRC       = BIT(1),
88*17fcb3dcSFan Gong 	HINIC3_NIC_F_TSO            = BIT(2),
89*17fcb3dcSFan Gong 	HINIC3_NIC_F_LRO            = BIT(3),
90*17fcb3dcSFan Gong 	HINIC3_NIC_F_UFO            = BIT(4),
91*17fcb3dcSFan Gong 	HINIC3_NIC_F_RSS            = BIT(5),
92*17fcb3dcSFan Gong 	HINIC3_NIC_F_RX_VLAN_FILTER = BIT(6),
93*17fcb3dcSFan Gong 	HINIC3_NIC_F_RX_VLAN_STRIP  = BIT(7),
94*17fcb3dcSFan Gong 	HINIC3_NIC_F_TX_VLAN_INSERT = BIT(8),
95*17fcb3dcSFan Gong 	HINIC3_NIC_F_VXLAN_OFFLOAD  = BIT(9),
96*17fcb3dcSFan Gong 	HINIC3_NIC_F_FDIR           = BIT(11),
97*17fcb3dcSFan Gong 	HINIC3_NIC_F_PROMISC        = BIT(12),
98*17fcb3dcSFan Gong 	HINIC3_NIC_F_ALLMULTI       = BIT(13),
99*17fcb3dcSFan Gong 	HINIC3_NIC_F_RATE_LIMIT     = BIT(16),
100*17fcb3dcSFan Gong };
101*17fcb3dcSFan Gong 
102*17fcb3dcSFan Gong #define HINIC3_NIC_F_ALL_MASK           0x33bff
103*17fcb3dcSFan Gong #define HINIC3_NIC_DRV_DEFAULT_FEATURE  0x3f03f
104*17fcb3dcSFan Gong 
105*17fcb3dcSFan Gong #endif
106