1
2
3
4
5#ifndef _HNS3_MBX_H_
6#define _HNS3_MBX_H_
7
8enum HNS3_MBX_OPCODE {
9 HNS3_MBX_RESET = 0x01,
10 HNS3_MBX_ASSERTING_RESET,
11 HNS3_MBX_SET_UNICAST,
12 HNS3_MBX_SET_MULTICAST,
13 HNS3_MBX_SET_VLAN,
14 HNS3_MBX_MAP_RING_TO_VECTOR,
15 HNS3_MBX_UNMAP_RING_TO_VECTOR,
16 HNS3_MBX_SET_PROMISC_MODE,
17 HNS3_MBX_SET_MACVLAN,
18 HNS3_MBX_API_NEGOTIATE,
19 HNS3_MBX_GET_QINFO,
20 HNS3_MBX_GET_QDEPTH,
21 HNS3_MBX_GET_BASIC_INFO,
22 HNS3_MBX_GET_RETA,
23 HNS3_MBX_GET_RSS_KEY,
24 HNS3_MBX_GET_MAC_ADDR,
25 HNS3_MBX_PF_VF_RESP,
26 HNS3_MBX_GET_BDNUM,
27 HNS3_MBX_GET_BUFSIZE,
28 HNS3_MBX_GET_STREAMID,
29 HNS3_MBX_SET_AESTART,
30 HNS3_MBX_SET_TSOSTATS,
31 HNS3_MBX_LINK_STAT_CHANGE,
32 HNS3_MBX_GET_BASE_CONFIG,
33 HNS3_MBX_BIND_FUNC_QUEUE,
34 HNS3_MBX_GET_LINK_STATUS,
35 HNS3_MBX_QUEUE_RESET,
36 HNS3_MBX_KEEP_ALIVE,
37 HNS3_MBX_SET_ALIVE,
38 HNS3_MBX_SET_MTU,
39 HNS3_MBX_GET_QID_IN_PF,
40
41 HNS3_MBX_PUSH_VLAN_INFO = 34,
42
43 HNS3_MBX_PUSH_PROMISC_INFO = 36,
44
45 HNS3_MBX_HANDLE_VF_TBL = 38,
46 HNS3_MBX_GET_RING_VECTOR_MAP,
47 HNS3_MBX_PUSH_LINK_STATUS = 201,
48};
49
50struct hns3_basic_info {
51 uint8_t hw_tc_map;
52 uint8_t rsv;
53 uint16_t pf_vf_if_version;
54
55 uint32_t caps;
56};
57
58
59enum hns3_mbx_mac_vlan_subcode {
60 HNS3_MBX_MAC_VLAN_UC_MODIFY = 0,
61 HNS3_MBX_MAC_VLAN_UC_ADD,
62 HNS3_MBX_MAC_VLAN_UC_REMOVE,
63 HNS3_MBX_MAC_VLAN_MC_MODIFY,
64 HNS3_MBX_MAC_VLAN_MC_ADD,
65 HNS3_MBX_MAC_VLAN_MC_REMOVE,
66};
67
68
69enum hns3_mbx_vlan_cfg_subcode {
70 HNS3_MBX_VLAN_FILTER = 0,
71 HNS3_MBX_VLAN_TX_OFF_CFG,
72 HNS3_MBX_VLAN_RX_OFF_CFG,
73 HNS3_MBX_GET_PORT_BASE_VLAN_STATE = 4,
74 HNS3_MBX_ENABLE_VLAN_FILTER,
75};
76
77enum hns3_mbx_tbl_cfg_subcode {
78 HNS3_MBX_VPORT_LIST_CLEAR = 0,
79};
80
81enum hns3_mbx_link_fail_subcode {
82 HNS3_MBX_LF_NORMAL = 0,
83 HNS3_MBX_LF_REF_CLOCK_LOST,
84 HNS3_MBX_LF_XSFP_TX_DISABLE,
85 HNS3_MBX_LF_XSFP_ABSENT,
86};
87
88#define HNS3_MBX_MAX_MSG_SIZE 16
89#define HNS3_MBX_MAX_RESP_DATA_SIZE 8
90
91enum {
92 HNS3_MBX_RESP_MATCHING_SCHEME_OF_ORIGINAL = 0,
93 HNS3_MBX_RESP_MATCHING_SCHEME_OF_MATCH_ID
94};
95
96struct hns3_mbx_resp_status {
97 rte_spinlock_t lock;
98
99 uint8_t matching_scheme;
100
101
102 uint32_t req_msg_data;
103 uint32_t head;
104 uint32_t tail;
105 uint32_t lost;
106
107
108 uint16_t match_id;
109 bool received_match_resp;
110
111 int resp_status;
112 uint8_t additional_info[HNS3_MBX_MAX_RESP_DATA_SIZE];
113};
114
115struct errno_respcode_map {
116 uint16_t resp_code;
117 int err_no;
118};
119
120#define HNS3_MBX_NEED_RESP_BIT BIT(0)
121
122struct hns3_mbx_vf_to_pf_cmd {
123 uint8_t rsv;
124 uint8_t mbx_src_vfid;
125 uint8_t mbx_need_resp;
126 uint8_t rsv1;
127 uint8_t msg_len;
128 uint8_t rsv2;
129 uint16_t match_id;
130 uint8_t msg[HNS3_MBX_MAX_MSG_SIZE];
131};
132
133struct hns3_mbx_pf_to_vf_cmd {
134 uint8_t dest_vfid;
135 uint8_t rsv[3];
136 uint8_t msg_len;
137 uint8_t rsv1;
138 uint16_t match_id;
139 uint16_t msg[8];
140};
141
142struct hns3_ring_chain_param {
143 uint8_t ring_type;
144 uint8_t tqp_index;
145 uint8_t int_gl_index;
146};
147
148#define HNS3_MBX_MAX_RING_CHAIN_PARAM_NUM 4
149struct hns3_vf_bind_vector_msg {
150 uint8_t vector_id;
151 uint8_t ring_num;
152 struct hns3_ring_chain_param param[HNS3_MBX_MAX_RING_CHAIN_PARAM_NUM];
153};
154
155struct hns3_pf_rst_done_cmd {
156 uint8_t pf_rst_done;
157 uint8_t rsv[23];
158};
159
160#define HNS3_PF_RESET_DONE_BIT BIT(0)
161
162#define hns3_mbx_ring_ptr_move_crq(crq) \
163 ((crq)->next_to_use = ((crq)->next_to_use + 1) % (crq)->desc_num)
164
165struct hns3_hw;
166void hns3_dev_handle_mbx_msg(struct hns3_hw *hw);
167int hns3_send_mbx_msg(struct hns3_hw *hw, uint16_t code, uint16_t subcode,
168 const uint8_t *msg_data, uint8_t msg_len, bool need_resp,
169 uint8_t *resp_data, uint16_t resp_len);
170#endif
171