.. | .. |
---|
7 | 7 | #include <linux/mutex.h> |
---|
8 | 8 | #include <linux/types.h> |
---|
9 | 9 | |
---|
10 | | -#define HCLGE_MBX_VF_MSG_DATA_NUM 16 |
---|
11 | | - |
---|
12 | 10 | enum HCLGE_MBX_OPCODE { |
---|
13 | 11 | HCLGE_MBX_RESET = 0x01, /* (VF -> PF) assert reset */ |
---|
14 | 12 | HCLGE_MBX_ASSERTING_RESET, /* (PF -> VF) PF is asserting reset*/ |
---|
.. | .. |
---|
21 | 19 | HCLGE_MBX_SET_MACVLAN, /* (VF -> PF) set unicast filter */ |
---|
22 | 20 | HCLGE_MBX_API_NEGOTIATE, /* (VF -> PF) negotiate API version */ |
---|
23 | 21 | HCLGE_MBX_GET_QINFO, /* (VF -> PF) get queue config */ |
---|
| 22 | + HCLGE_MBX_GET_QDEPTH, /* (VF -> PF) get queue depth */ |
---|
24 | 23 | HCLGE_MBX_GET_TCINFO, /* (VF -> PF) get TC config */ |
---|
25 | 24 | HCLGE_MBX_GET_RETA, /* (VF -> PF) get RETA */ |
---|
26 | 25 | HCLGE_MBX_GET_RSS_KEY, /* (VF -> PF) get RSS key */ |
---|
27 | 26 | HCLGE_MBX_GET_MAC_ADDR, /* (VF -> PF) get MAC addr */ |
---|
28 | | - HCLGE_MBX_PF_VF_RESP, /* (PF -> VF) generate respone to VF */ |
---|
| 27 | + HCLGE_MBX_PF_VF_RESP, /* (PF -> VF) generate response to VF */ |
---|
29 | 28 | HCLGE_MBX_GET_BDNUM, /* (VF -> PF) get BD num */ |
---|
30 | 29 | HCLGE_MBX_GET_BUFSIZE, /* (VF -> PF) get buffer size */ |
---|
31 | 30 | HCLGE_MBX_GET_STREAMID, /* (VF -> PF) get stream id */ |
---|
.. | .. |
---|
36 | 35 | HCLGE_MBX_BIND_FUNC_QUEUE, /* (VF -> PF) bind function and queue */ |
---|
37 | 36 | HCLGE_MBX_GET_LINK_STATUS, /* (VF -> PF) get link status */ |
---|
38 | 37 | HCLGE_MBX_QUEUE_RESET, /* (VF -> PF) reset queue */ |
---|
| 38 | + HCLGE_MBX_KEEP_ALIVE, /* (VF -> PF) send keep alive cmd */ |
---|
| 39 | + HCLGE_MBX_SET_ALIVE, /* (VF -> PF) set alive state */ |
---|
| 40 | + HCLGE_MBX_SET_MTU, /* (VF -> PF) set mtu */ |
---|
| 41 | + HCLGE_MBX_GET_QID_IN_PF, /* (VF -> PF) get queue id in pf */ |
---|
| 42 | + HCLGE_MBX_LINK_STAT_MODE, /* (PF -> VF) link mode has changed */ |
---|
| 43 | + HCLGE_MBX_GET_LINK_MODE, /* (VF -> PF) get the link mode of pf */ |
---|
| 44 | + HCLGE_MBX_PUSH_VLAN_INFO, /* (PF -> VF) push port base vlan */ |
---|
| 45 | + HCLGE_MBX_GET_MEDIA_TYPE, /* (VF -> PF) get media type */ |
---|
| 46 | + HCLGE_MBX_PUSH_PROMISC_INFO, /* (PF -> VF) push vf promisc info */ |
---|
| 47 | + HCLGE_MBX_VF_UNINIT, /* (VF -> PF) vf is unintializing */ |
---|
| 48 | + HCLGE_MBX_HANDLE_VF_TBL, /* (VF -> PF) store/clear hw table */ |
---|
| 49 | + |
---|
| 50 | + HCLGE_MBX_GET_VF_FLR_STATUS = 200, /* (M7 -> PF) get vf flr status */ |
---|
| 51 | + HCLGE_MBX_PUSH_LINK_STATUS, /* (M7 -> PF) get port link status */ |
---|
| 52 | + HCLGE_MBX_NCSI_ERROR, /* (M7 -> PF) receive a NCSI error */ |
---|
39 | 53 | }; |
---|
40 | 54 | |
---|
41 | 55 | /* below are per-VF mac-vlan subcodes */ |
---|
.. | .. |
---|
46 | 60 | HCLGE_MBX_MAC_VLAN_MC_MODIFY, /* modify MC mac addr */ |
---|
47 | 61 | HCLGE_MBX_MAC_VLAN_MC_ADD, /* add new MC mac addr */ |
---|
48 | 62 | HCLGE_MBX_MAC_VLAN_MC_REMOVE, /* remove MC mac addr */ |
---|
49 | | - HCLGE_MBX_MAC_VLAN_MC_FUNC_MTA_ENABLE, /* config func MTA enable */ |
---|
50 | | - HCLGE_MBX_MAC_VLAN_MTA_TYPE_READ, /* read func MTA type */ |
---|
51 | | - HCLGE_MBX_MAC_VLAN_MTA_STATUS_UPDATE, /* update MTA status */ |
---|
52 | 63 | }; |
---|
53 | 64 | |
---|
54 | 65 | /* below are per-VF vlan cfg subcodes */ |
---|
.. | .. |
---|
56 | 67 | HCLGE_MBX_VLAN_FILTER = 0, /* set vlan filter */ |
---|
57 | 68 | HCLGE_MBX_VLAN_TX_OFF_CFG, /* set tx side vlan offload */ |
---|
58 | 69 | HCLGE_MBX_VLAN_RX_OFF_CFG, /* set rx side vlan offload */ |
---|
| 70 | + HCLGE_MBX_PORT_BASE_VLAN_CFG, /* set port based vlan configuration */ |
---|
| 71 | + HCLGE_MBX_GET_PORT_BASE_VLAN_STATE, /* get port based vlan state */ |
---|
59 | 72 | }; |
---|
60 | 73 | |
---|
61 | | -#define HCLGE_MBX_MAX_MSG_SIZE 16 |
---|
62 | | -#define HCLGE_MBX_MAX_RESP_DATA_SIZE 8 |
---|
63 | | -#define HCLGE_MBX_RING_MAP_BASIC_MSG_NUM 3 |
---|
64 | | -#define HCLGE_MBX_RING_NODE_VARIABLE_NUM 3 |
---|
| 74 | +enum hclge_mbx_tbl_cfg_subcode { |
---|
| 75 | + HCLGE_MBX_VPORT_LIST_CLEAR, |
---|
| 76 | +}; |
---|
| 77 | + |
---|
| 78 | +#define HCLGE_MBX_MAX_MSG_SIZE 14 |
---|
| 79 | +#define HCLGE_MBX_MAX_RESP_DATA_SIZE 8U |
---|
| 80 | +#define HCLGE_MBX_MAX_RING_CHAIN_PARAM_NUM 4 |
---|
| 81 | + |
---|
| 82 | +struct hclge_ring_chain_param { |
---|
| 83 | + u8 ring_type; |
---|
| 84 | + u8 tqp_index; |
---|
| 85 | + u8 int_gl_index; |
---|
| 86 | +}; |
---|
65 | 87 | |
---|
66 | 88 | struct hclgevf_mbx_resp_status { |
---|
67 | 89 | struct mutex mbx_mutex; /* protects against contending sync cmd resp */ |
---|
.. | .. |
---|
71 | 93 | u8 additional_info[HCLGE_MBX_MAX_RESP_DATA_SIZE]; |
---|
72 | 94 | }; |
---|
73 | 95 | |
---|
| 96 | +struct hclge_respond_to_vf_msg { |
---|
| 97 | + int status; |
---|
| 98 | + u8 data[HCLGE_MBX_MAX_RESP_DATA_SIZE]; |
---|
| 99 | + u16 len; |
---|
| 100 | +}; |
---|
| 101 | + |
---|
| 102 | +struct hclge_vf_to_pf_msg { |
---|
| 103 | + u8 code; |
---|
| 104 | + union { |
---|
| 105 | + struct { |
---|
| 106 | + u8 subcode; |
---|
| 107 | + u8 data[HCLGE_MBX_MAX_MSG_SIZE]; |
---|
| 108 | + }; |
---|
| 109 | + struct { |
---|
| 110 | + u8 en_bc; |
---|
| 111 | + u8 en_uc; |
---|
| 112 | + u8 en_mc; |
---|
| 113 | + }; |
---|
| 114 | + struct { |
---|
| 115 | + u8 vector_id; |
---|
| 116 | + u8 ring_num; |
---|
| 117 | + struct hclge_ring_chain_param |
---|
| 118 | + param[HCLGE_MBX_MAX_RING_CHAIN_PARAM_NUM]; |
---|
| 119 | + }; |
---|
| 120 | + }; |
---|
| 121 | +}; |
---|
| 122 | + |
---|
| 123 | +struct hclge_pf_to_vf_msg { |
---|
| 124 | + u16 code; |
---|
| 125 | + u16 vf_mbx_msg_code; |
---|
| 126 | + u16 vf_mbx_msg_subcode; |
---|
| 127 | + u16 resp_status; |
---|
| 128 | + u8 resp_data[HCLGE_MBX_MAX_RESP_DATA_SIZE]; |
---|
| 129 | +}; |
---|
| 130 | + |
---|
74 | 131 | struct hclge_mbx_vf_to_pf_cmd { |
---|
75 | 132 | u8 rsv; |
---|
76 | 133 | u8 mbx_src_vfid; /* Auto filled by IMP */ |
---|
77 | | - u8 rsv1[2]; |
---|
| 134 | + u8 mbx_need_resp; |
---|
| 135 | + u8 rsv1[1]; |
---|
78 | 136 | u8 msg_len; |
---|
79 | | - u8 rsv2[3]; |
---|
80 | | - u8 msg[HCLGE_MBX_MAX_MSG_SIZE]; |
---|
| 137 | + u8 rsv2; |
---|
| 138 | + u16 match_id; |
---|
| 139 | + struct hclge_vf_to_pf_msg msg; |
---|
81 | 140 | }; |
---|
| 141 | + |
---|
| 142 | +#define HCLGE_MBX_NEED_RESP_B 0 |
---|
82 | 143 | |
---|
83 | 144 | struct hclge_mbx_pf_to_vf_cmd { |
---|
84 | 145 | u8 dest_vfid; |
---|
85 | 146 | u8 rsv[3]; |
---|
86 | 147 | u8 msg_len; |
---|
87 | | - u8 rsv1[3]; |
---|
88 | | - u16 msg[8]; |
---|
| 148 | + u8 rsv1; |
---|
| 149 | + u16 match_id; |
---|
| 150 | + struct hclge_pf_to_vf_msg msg; |
---|
| 151 | +}; |
---|
| 152 | + |
---|
| 153 | +struct hclge_vf_rst_cmd { |
---|
| 154 | + u8 dest_vfid; |
---|
| 155 | + u8 vf_rst; |
---|
| 156 | + u8 rsv[22]; |
---|
89 | 157 | }; |
---|
90 | 158 | |
---|
91 | 159 | /* used by VF to store the received Async responses from PF */ |
---|
.. | .. |
---|
95 | 163 | struct hclgevf_dev *hdev; |
---|
96 | 164 | u32 head; |
---|
97 | 165 | u32 tail; |
---|
98 | | - u32 count; |
---|
| 166 | + atomic_t count; |
---|
99 | 167 | u16 msg_q[HCLGE_MBX_MAX_ARQ_MSG_NUM][HCLGE_MBX_MAX_ARQ_MSG_SIZE]; |
---|
100 | 168 | }; |
---|
101 | 169 | |
---|