xref: /f-stack/dpdk/drivers/net/fm10k/base/fm10k_pf.h (revision 4418919f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2013 - 2015 Intel Corporation
3  */
4 
5 #ifndef _FM10K_PF_H_
6 #define _FM10K_PF_H_
7 
8 #include "fm10k_type.h"
9 #include "fm10k_common.h"
10 
11 bool fm10k_glort_valid_pf(struct fm10k_hw *hw, u16 glort);
12 u16 fm10k_queues_per_pool(struct fm10k_hw *hw);
13 u16 fm10k_vf_queue_index(struct fm10k_hw *hw, u16 vf_idx);
14 
15 enum fm10k_pf_tlv_msg_id_v1 {
16 	FM10K_PF_MSG_ID_TEST			= 0x000, /* msg ID reserved */
17 	FM10K_PF_MSG_ID_XCAST_MODES		= 0x001,
18 	FM10K_PF_MSG_ID_UPDATE_MAC_FWD_RULE	= 0x002,
19 	FM10K_PF_MSG_ID_LPORT_MAP		= 0x100,
20 	FM10K_PF_MSG_ID_LPORT_CREATE		= 0x200,
21 	FM10K_PF_MSG_ID_LPORT_DELETE		= 0x201,
22 	FM10K_PF_MSG_ID_CONFIG			= 0x300,
23 	FM10K_PF_MSG_ID_UPDATE_PVID		= 0x400,
24 	FM10K_PF_MSG_ID_CREATE_FLOW_TABLE	= 0x501,
25 	FM10K_PF_MSG_ID_DELETE_FLOW_TABLE	= 0x502,
26 	FM10K_PF_MSG_ID_UPDATE_FLOW		= 0x503,
27 	FM10K_PF_MSG_ID_DELETE_FLOW		= 0x504,
28 	FM10K_PF_MSG_ID_SET_FLOW_STATE		= 0x505,
29 	FM10K_PF_MSG_ID_GET_1588_INFO		= 0x506,
30 	FM10K_PF_MSG_ID_1588_TIMESTAMP		= 0x701,
31 	FM10K_PF_MSG_ID_1588_CLOCK_OWNER	= 0x702,
32 	FM10K_PF_MSG_ID_MASTER_CLK_OFFSET	= 0x703,
33 };
34 
35 enum fm10k_pf_tlv_attr_id_v1 {
36 	FM10K_PF_ATTR_ID_ERR			= 0x00,
37 	FM10K_PF_ATTR_ID_LPORT_MAP		= 0x01,
38 	FM10K_PF_ATTR_ID_XCAST_MODE		= 0x02,
39 	FM10K_PF_ATTR_ID_MAC_UPDATE		= 0x03,
40 	FM10K_PF_ATTR_ID_VLAN_UPDATE		= 0x04,
41 	FM10K_PF_ATTR_ID_CONFIG			= 0x05,
42 	FM10K_PF_ATTR_ID_CREATE_FLOW_TABLE	= 0x06,
43 	FM10K_PF_ATTR_ID_DELETE_FLOW_TABLE	= 0x07,
44 	FM10K_PF_ATTR_ID_UPDATE_FLOW		= 0x08,
45 	FM10K_PF_ATTR_ID_FLOW_STATE		= 0x09,
46 	FM10K_PF_ATTR_ID_FLOW_HANDLE		= 0x0A,
47 	FM10K_PF_ATTR_ID_DELETE_FLOW		= 0x0B,
48 	FM10K_PF_ATTR_ID_PORT			= 0x0C,
49 	FM10K_PF_ATTR_ID_UPDATE_PVID		= 0x0D,
50 	FM10K_PF_ATTR_ID_1588_TIMESTAMP		= 0x10,
51 	FM10K_PF_ATTR_ID_1588_CLOCK_OWNER	= 0x12,
52 	FM10K_PF_ATTR_ID_MASTER_CLK_OFFSET	= 0x14,
53 };
54 
55 #define FM10K_MSG_LPORT_MAP_GLORT_SHIFT	0
56 #define FM10K_MSG_LPORT_MAP_GLORT_SIZE	16
57 #define FM10K_MSG_LPORT_MAP_MASK_SHIFT	16
58 #define FM10K_MSG_LPORT_MAP_MASK_SIZE	16
59 
60 #define FM10K_MSG_UPDATE_PVID_GLORT_SHIFT	0
61 #define FM10K_MSG_UPDATE_PVID_GLORT_SIZE	16
62 #define FM10K_MSG_UPDATE_PVID_PVID_SHIFT	16
63 #define FM10K_MSG_UPDATE_PVID_PVID_SIZE		16
64 
65 #define FM10K_MSG_ERR_PEP_NOT_SCHEDULED	280
66 
67 /* The following data structures are overlayed directly onto TLV mailbox
68  * messages, and must not break 4 byte alignment. Ensure the structures line
69  * up correctly as per their TLV definition.
70  */
71 #ifdef C99
72 #pragma pack(push, 4)
73 #else
74 #pragma pack(4)
75 #endif /* C99 */
76 
77 struct fm10k_mac_update {
78 	__le32	mac_lower;
79 	__le16	mac_upper;
80 	__le16	vlan;
81 	__le16	glort;
82 	u8	flags;
83 	u8	action;
84 };
85 
86 struct fm10k_global_table_data {
87 	__le32	used;
88 	__le32	avail;
89 };
90 
91 struct fm10k_swapi_error {
92 	__le32				status;
93 	struct fm10k_global_table_data	mac;
94 	struct fm10k_global_table_data	nexthop;
95 	struct fm10k_global_table_data	ffu;
96 };
97 
98 struct fm10k_swapi_1588_timestamp {
99 	__le64 egress;
100 	__le64 ingress;
101 	__le16 dglort;
102 	__le16 sglort;
103 };
104 
105 struct fm10k_swapi_1588_clock_owner {
106 	__le16 glort;
107 	__le16 enabled;
108 };
109 
110 #ifdef C99
111 #pragma pack(pop)
112 #else
113 #pragma pack()
114 #endif /* C99 */
115 
116 s32 fm10k_msg_lport_map_pf(struct fm10k_hw *, u32 **, struct fm10k_mbx_info *);
117 extern const struct fm10k_tlv_attr fm10k_lport_map_msg_attr[];
118 #define FM10K_PF_MSG_LPORT_MAP_HANDLER(func) \
119 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_LPORT_MAP, \
120 			  fm10k_lport_map_msg_attr, func)
121 extern const struct fm10k_tlv_attr fm10k_update_pvid_msg_attr[];
122 #define FM10K_PF_MSG_UPDATE_PVID_HANDLER(func) \
123 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_UPDATE_PVID, \
124 			  fm10k_update_pvid_msg_attr, func)
125 
126 s32 fm10k_msg_err_pf(struct fm10k_hw *, u32 **, struct fm10k_mbx_info *);
127 extern const struct fm10k_tlv_attr fm10k_err_msg_attr[];
128 #define FM10K_PF_MSG_ERR_HANDLER(msg, func) \
129 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_##msg, fm10k_err_msg_attr, func)
130 
131 extern const struct fm10k_tlv_attr fm10k_1588_timestamp_msg_attr[];
132 #define FM10K_PF_MSG_1588_TIMESTAMP_HANDLER(func) \
133 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_1588_TIMESTAMP, \
134 			  fm10k_1588_timestamp_msg_attr, func)
135 
136 s32 fm10k_msg_1588_clock_owner_pf(struct fm10k_hw *, u32 **,
137 				  struct fm10k_mbx_info *);
138 extern const struct fm10k_tlv_attr fm10k_1588_clock_owner_attr[];
139 #define FM10K_PF_MSG_1588_CLOCK_OWNER_HANDLER(func) \
140 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_1588_CLOCK_OWNER, \
141 			  fm10k_1588_clock_owner_attr, func)
142 
143 extern const struct fm10k_tlv_attr fm10k_master_clk_offset_attr[];
144 #define FM10K_PF_MSG_MASTER_CLK_OFFSET_HANDLER(func) \
145 	FM10K_MSG_HANDLER(FM10K_PF_MSG_ID_MASTER_CLK_OFFSET, \
146 			  fm10k_master_clk_offset_attr, func)
147 
148 s32 fm10k_iov_msg_msix_pf(struct fm10k_hw *, u32 **, struct fm10k_mbx_info *);
149 s32 fm10k_iov_msg_mac_vlan_pf(struct fm10k_hw *, u32 **,
150 			      struct fm10k_mbx_info *);
151 s32 fm10k_iov_msg_lport_state_pf(struct fm10k_hw *, u32 **,
152 				 struct fm10k_mbx_info *);
153 #ifndef NO_DEFAULT_SRIOV_MSG_HANDLERS
154 extern const struct fm10k_msg_data fm10k_iov_msg_data_pf[];
155 #endif
156 
157 s32 fm10k_init_ops_pf(struct fm10k_hw *hw);
158 
159 void fm10k_update_hw_stats_pf(struct fm10k_hw *hw,
160 				     struct fm10k_hw_stats *stats);
161 
162 void fm10k_rebind_hw_stats_pf(struct fm10k_hw *hw,
163 				     struct fm10k_hw_stats *stats);
164 #endif /* _FM10K_PF_H */
165