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