xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dpmac.h (revision cd85bec36d0e0d16fedb00e0c434ed070a9c6b37)
1872d48a7SPrabhakar Kushwaha /*
2872d48a7SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3872d48a7SPrabhakar Kushwaha  *
4872d48a7SPrabhakar Kushwaha  * Copyright (C) 2015 Freescale Semiconductor, Inc.
5872d48a7SPrabhakar Kushwaha  * Author: Prabhakar Kushwaha <prabhakar@freescale.com>
6872d48a7SPrabhakar Kushwaha  *
7872d48a7SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8872d48a7SPrabhakar Kushwaha  */
9872d48a7SPrabhakar Kushwaha 
10872d48a7SPrabhakar Kushwaha #ifndef __FSL_DPMAC_H
11872d48a7SPrabhakar Kushwaha #define __FSL_DPMAC_H
12872d48a7SPrabhakar Kushwaha 
13872d48a7SPrabhakar Kushwaha /* DPMAC Version */
14872d48a7SPrabhakar Kushwaha #define DPMAC_VER_MAJOR				3
15*53e353fcSPrabhakar Kushwaha #define DPMAC_VER_MINOR				2
16872d48a7SPrabhakar Kushwaha 
17872d48a7SPrabhakar Kushwaha /* Command IDs */
18872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_CLOSE			0x800
19872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_OPEN			0x80c
20872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_CREATE			0x90c
21872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_DESTROY			0x900
22872d48a7SPrabhakar Kushwaha 
23872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_ATTR			0x004
24872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_RESET			0x005
25872d48a7SPrabhakar Kushwaha 
26872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_MDIO_READ			0x0c0
27872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_MDIO_WRITE			0x0c1
28872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_LINK_CFG		0x0c2
29872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_SET_LINK_STATE		0x0c3
30872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_COUNTER			0x0c4
31872d48a7SPrabhakar Kushwaha 
32872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
33872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_CREATE(cmd, cfg) \
34872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      cfg->mac_id)
35872d48a7SPrabhakar Kushwaha 
36872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
37872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_OPEN(cmd, dpmac_id) \
38872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    dpmac_id)
39872d48a7SPrabhakar Kushwaha 
40872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type,	arg_name */
41872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_ATTRIBUTES(cmd, attr) \
42872d48a7SPrabhakar Kushwaha do { \
43872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,			attr->phy_id);\
44872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,			attr->id);\
45872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  16, uint16_t,		attr->version.major);\
46872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t,		attr->version.minor);\
47872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32,  8, enum dpmac_link_type,	attr->link_type);\
48872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 40,  8, enum dpmac_eth_if,	attr->eth_if);\
49872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  32, uint32_t,		attr->max_rate);\
50872d48a7SPrabhakar Kushwaha } while (0)
51872d48a7SPrabhakar Kushwaha 
52872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
53872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_MDIO_READ(cmd, cfg) \
54872d48a7SPrabhakar Kushwaha do { \
55872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->phy_addr); \
56872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 8,  8,  uint8_t,  cfg->reg); \
57872d48a7SPrabhakar Kushwaha } while (0)
58872d48a7SPrabhakar Kushwaha 
59872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
60872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_MDIO_READ(cmd, data) \
61872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, data)
62872d48a7SPrabhakar Kushwaha 
63872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
64872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_MDIO_WRITE(cmd, cfg) \
65872d48a7SPrabhakar Kushwaha do { \
66872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->phy_addr); \
67872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 8,  8,  uint8_t,  cfg->reg); \
68872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, cfg->data); \
69872d48a7SPrabhakar Kushwaha } while (0)
70872d48a7SPrabhakar Kushwaha 
71872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
72872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_LINK_CFG(cmd, cfg) \
73872d48a7SPrabhakar Kushwaha do { \
74872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  64, uint64_t, cfg->options); \
75872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, cfg->rate); \
76872d48a7SPrabhakar Kushwaha } while (0)
77872d48a7SPrabhakar Kushwaha 
78872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
79872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_SET_LINK_STATE(cmd, cfg) \
80872d48a7SPrabhakar Kushwaha do { \
81872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  64, uint64_t, cfg->options); \
82872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, uint32_t, cfg->rate); \
83872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  1,  int,      cfg->up); \
84872d48a7SPrabhakar Kushwaha } while (0)
85872d48a7SPrabhakar Kushwaha 
86872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
87872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_GET_COUNTER(cmd, type) \
88872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8, enum dpmac_counter, type)
89872d48a7SPrabhakar Kushwaha 
90872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
91872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_COUNTER(cmd, counter) \
92872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0, 64, uint64_t, counter)
93872d48a7SPrabhakar Kushwaha 
94872d48a7SPrabhakar Kushwaha /* Data Path MAC API
95872d48a7SPrabhakar Kushwaha  * Contains initialization APIs and runtime control APIs for DPMAC
96872d48a7SPrabhakar Kushwaha  */
97872d48a7SPrabhakar Kushwaha 
98872d48a7SPrabhakar Kushwaha struct fsl_mc_io;
99872d48a7SPrabhakar Kushwaha 
100872d48a7SPrabhakar Kushwaha /**
101872d48a7SPrabhakar Kushwaha  * dpmac_open() - Open a control session for the specified object.
102872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
103872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
104872d48a7SPrabhakar Kushwaha  * @dpmac_id:	DPMAC unique ID
105872d48a7SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
106872d48a7SPrabhakar Kushwaha  *
107872d48a7SPrabhakar Kushwaha  * This function can be used to open a control session for an
108872d48a7SPrabhakar Kushwaha  * already created object; an object may have been declared in
109872d48a7SPrabhakar Kushwaha  * the DPL or by calling the dpmac_create function.
110872d48a7SPrabhakar Kushwaha  * This function returns a unique authentication token,
111872d48a7SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
112872d48a7SPrabhakar Kushwaha  * portal; this token must be used in all subsequent commands for
113872d48a7SPrabhakar Kushwaha  * this specific object
114872d48a7SPrabhakar Kushwaha  *
115872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
116872d48a7SPrabhakar Kushwaha  */
117872d48a7SPrabhakar Kushwaha int dpmac_open(struct fsl_mc_io	*mc_io,
118872d48a7SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
119872d48a7SPrabhakar Kushwaha 	       int			dpmac_id,
120872d48a7SPrabhakar Kushwaha 	       uint16_t		*token);
121872d48a7SPrabhakar Kushwaha 
122872d48a7SPrabhakar Kushwaha /**
123872d48a7SPrabhakar Kushwaha  * dpmac_close() - Close the control session of the object
124872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
125872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
126872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
127872d48a7SPrabhakar Kushwaha  *
128872d48a7SPrabhakar Kushwaha  * After this function is called, no further operations are
129872d48a7SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
130872d48a7SPrabhakar Kushwaha  *
131872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
132872d48a7SPrabhakar Kushwaha  */
133872d48a7SPrabhakar Kushwaha int dpmac_close(struct fsl_mc_io	*mc_io,
134872d48a7SPrabhakar Kushwaha 		uint32_t		cmd_flags,
135872d48a7SPrabhakar Kushwaha 		uint16_t		token);
136872d48a7SPrabhakar Kushwaha 
137872d48a7SPrabhakar Kushwaha /**
138872d48a7SPrabhakar Kushwaha  * enum dpmac_link_type -  DPMAC link type
139872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_NONE: No link
140872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_FIXED: Link is fixed type
141872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_PHY: Link by PHY ID
142872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_BACKPLANE: Backplane link type
143872d48a7SPrabhakar Kushwaha  */
144872d48a7SPrabhakar Kushwaha enum dpmac_link_type {
145872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_NONE,
146872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_FIXED,
147872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_PHY,
148872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_BACKPLANE
149872d48a7SPrabhakar Kushwaha };
150872d48a7SPrabhakar Kushwaha 
151872d48a7SPrabhakar Kushwaha /**
152872d48a7SPrabhakar Kushwaha  * enum dpmac_eth_if - DPMAC Ethrnet interface
153872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_MII: MII interface
154872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_RMII: RMII interface
155872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_SMII: SMII interface
156872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_GMII: GMII interface
157872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_RGMII: RGMII interface
158872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_SGMII: SGMII interface
159872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_QSGMII: QSGMII interface
160872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_XAUI: XAUI interface
161872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_XFI: XFI interface
162872d48a7SPrabhakar Kushwaha  */
163872d48a7SPrabhakar Kushwaha enum dpmac_eth_if {
164872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_MII,
165872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_RMII,
166872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_SMII,
167872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_GMII,
168872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_RGMII,
169872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_SGMII,
170872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_QSGMII,
171872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_XAUI,
172872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_XFI
173872d48a7SPrabhakar Kushwaha };
174872d48a7SPrabhakar Kushwaha 
175872d48a7SPrabhakar Kushwaha /**
176872d48a7SPrabhakar Kushwaha  * struct dpmac_cfg - Structure representing DPMAC configuration
177872d48a7SPrabhakar Kushwaha  * @mac_id:	Represents the Hardware MAC ID; in case of multiple WRIOP,
178872d48a7SPrabhakar Kushwaha  *		the MAC IDs are continuous.
179872d48a7SPrabhakar Kushwaha  *		For example:  2 WRIOPs, 16 MACs in each:
180872d48a7SPrabhakar Kushwaha  *				MAC IDs for the 1st WRIOP: 1-16,
181872d48a7SPrabhakar Kushwaha  *				MAC IDs for the 2nd WRIOP: 17-32.
182872d48a7SPrabhakar Kushwaha  */
183872d48a7SPrabhakar Kushwaha struct dpmac_cfg {
184872d48a7SPrabhakar Kushwaha 	int mac_id;
185872d48a7SPrabhakar Kushwaha };
186872d48a7SPrabhakar Kushwaha 
187872d48a7SPrabhakar Kushwaha /**
188872d48a7SPrabhakar Kushwaha  * dpmac_create() - Create the DPMAC object.
189872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
190872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
191872d48a7SPrabhakar Kushwaha  * @cfg:	Configuration structure
192872d48a7SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
193872d48a7SPrabhakar Kushwaha  *
194872d48a7SPrabhakar Kushwaha  * Create the DPMAC object, allocate required resources and
195872d48a7SPrabhakar Kushwaha  * perform required initialization.
196872d48a7SPrabhakar Kushwaha  *
197872d48a7SPrabhakar Kushwaha  * The object can be created either by declaring it in the
198872d48a7SPrabhakar Kushwaha  * DPL file, or by calling this function.
199872d48a7SPrabhakar Kushwaha  * This function returns a unique authentication token,
200872d48a7SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
201872d48a7SPrabhakar Kushwaha  * portal; this token must be used in all subsequent calls to
202872d48a7SPrabhakar Kushwaha  * this specific object. For objects that are created using the
203872d48a7SPrabhakar Kushwaha  * DPL file, call dpmac_open function to get an authentication
204872d48a7SPrabhakar Kushwaha  * token first.
205872d48a7SPrabhakar Kushwaha  *
206872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
207872d48a7SPrabhakar Kushwaha  */
208872d48a7SPrabhakar Kushwaha int dpmac_create(struct fsl_mc_io	*mc_io,
209872d48a7SPrabhakar Kushwaha 		 uint32_t		cmd_flags,
210872d48a7SPrabhakar Kushwaha 		 const struct dpmac_cfg	*cfg,
211872d48a7SPrabhakar Kushwaha 		 uint16_t		*token);
212872d48a7SPrabhakar Kushwaha 
213872d48a7SPrabhakar Kushwaha /**
214872d48a7SPrabhakar Kushwaha  * dpmac_destroy() - Destroy the DPMAC object and release all its resources.
215872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
216872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
217872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
218872d48a7SPrabhakar Kushwaha  *
219872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; error code otherwise.
220872d48a7SPrabhakar Kushwaha  */
221872d48a7SPrabhakar Kushwaha int dpmac_destroy(struct fsl_mc_io	*mc_io,
222872d48a7SPrabhakar Kushwaha 		  uint32_t		cmd_flags,
223872d48a7SPrabhakar Kushwaha 		  uint16_t		token);
224872d48a7SPrabhakar Kushwaha 
225872d48a7SPrabhakar Kushwaha /* DPMAC IRQ Index and Events */
226872d48a7SPrabhakar Kushwaha 
227872d48a7SPrabhakar Kushwaha /* IRQ index */
228872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_INDEX						0
229872d48a7SPrabhakar Kushwaha /* IRQ event - indicates a change in link state */
230872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_EVENT_LINK_CFG_REQ		0x00000001
231872d48a7SPrabhakar Kushwaha /* irq event - Indicates that the link state changed */
232872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_EVENT_LINK_CHANGED		0x00000002
233872d48a7SPrabhakar Kushwaha 
234872d48a7SPrabhakar Kushwaha /**
235872d48a7SPrabhakar Kushwaha  * struct dpmac_attr - Structure representing DPMAC attributes
236872d48a7SPrabhakar Kushwaha  * @id:		DPMAC object ID
237872d48a7SPrabhakar Kushwaha  * @phy_id:	PHY ID
238872d48a7SPrabhakar Kushwaha  * @link_type: link type
239872d48a7SPrabhakar Kushwaha  * @eth_if: Ethernet interface
240872d48a7SPrabhakar Kushwaha  * @max_rate: Maximum supported rate - in Mbps
241872d48a7SPrabhakar Kushwaha  * @version:	DPMAC version
242872d48a7SPrabhakar Kushwaha  */
243872d48a7SPrabhakar Kushwaha struct dpmac_attr {
244872d48a7SPrabhakar Kushwaha 	int			id;
245872d48a7SPrabhakar Kushwaha 	int			phy_id;
246872d48a7SPrabhakar Kushwaha 	enum dpmac_link_type	link_type;
247872d48a7SPrabhakar Kushwaha 	enum dpmac_eth_if	eth_if;
248872d48a7SPrabhakar Kushwaha 	uint32_t		max_rate;
249872d48a7SPrabhakar Kushwaha 	/**
250872d48a7SPrabhakar Kushwaha 	 * struct version - Structure representing DPMAC version
251872d48a7SPrabhakar Kushwaha 	 * @major:	DPMAC major version
252872d48a7SPrabhakar Kushwaha 	 * @minor:	DPMAC minor version
253872d48a7SPrabhakar Kushwaha 	 */
254872d48a7SPrabhakar Kushwaha 	struct {
255872d48a7SPrabhakar Kushwaha 		uint16_t major;
256872d48a7SPrabhakar Kushwaha 		uint16_t minor;
257872d48a7SPrabhakar Kushwaha 	} version;
258872d48a7SPrabhakar Kushwaha };
259872d48a7SPrabhakar Kushwaha 
260872d48a7SPrabhakar Kushwaha /**
261872d48a7SPrabhakar Kushwaha  * dpmac_get_attributes - Retrieve DPMAC attributes.
262872d48a7SPrabhakar Kushwaha  *
263872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
264872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
265872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
266872d48a7SPrabhakar Kushwaha  * @attr:	Returned object's attributes
267872d48a7SPrabhakar Kushwaha  *
268872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
269872d48a7SPrabhakar Kushwaha  */
270872d48a7SPrabhakar Kushwaha int dpmac_get_attributes(struct fsl_mc_io	*mc_io,
271872d48a7SPrabhakar Kushwaha 			 uint32_t		cmd_flags,
272872d48a7SPrabhakar Kushwaha 			 uint16_t		token,
273872d48a7SPrabhakar Kushwaha 			 struct dpmac_attr	*attr);
274872d48a7SPrabhakar Kushwaha 
275872d48a7SPrabhakar Kushwaha /**
276872d48a7SPrabhakar Kushwaha  * struct dpmac_mdio_cfg - DPMAC MDIO read/write parameters
277872d48a7SPrabhakar Kushwaha  * @phy_addr: MDIO device address
278872d48a7SPrabhakar Kushwaha  * @reg: Address of the register within the Clause 45 PHY device from which data
279872d48a7SPrabhakar Kushwaha  *	is to be read
280872d48a7SPrabhakar Kushwaha  * @data: Data read/write from/to MDIO
281872d48a7SPrabhakar Kushwaha  */
282872d48a7SPrabhakar Kushwaha struct dpmac_mdio_cfg {
283872d48a7SPrabhakar Kushwaha 	uint8_t		phy_addr;
284872d48a7SPrabhakar Kushwaha 	uint8_t		reg;
285872d48a7SPrabhakar Kushwaha 	uint16_t	data;
286872d48a7SPrabhakar Kushwaha };
287872d48a7SPrabhakar Kushwaha 
288872d48a7SPrabhakar Kushwaha /**
289872d48a7SPrabhakar Kushwaha  * dpmac_mdio_read() - Perform MDIO read transaction
290872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
291872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
292872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
293872d48a7SPrabhakar Kushwaha  * @cfg:	Structure with MDIO transaction parameters
294872d48a7SPrabhakar Kushwaha  *
295872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
296872d48a7SPrabhakar Kushwaha  */
297872d48a7SPrabhakar Kushwaha int dpmac_mdio_read(struct fsl_mc_io		*mc_io,
298872d48a7SPrabhakar Kushwaha 		    uint32_t			cmd_flags,
299872d48a7SPrabhakar Kushwaha 		    uint16_t			token,
300872d48a7SPrabhakar Kushwaha 		    struct dpmac_mdio_cfg	*cfg);
301872d48a7SPrabhakar Kushwaha 
302872d48a7SPrabhakar Kushwaha /**
303872d48a7SPrabhakar Kushwaha  * dpmac_mdio_write() - Perform MDIO write transaction
304872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
305872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
306872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
307872d48a7SPrabhakar Kushwaha  * @cfg:	Structure with MDIO transaction parameters
308872d48a7SPrabhakar Kushwaha  *
309872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
310872d48a7SPrabhakar Kushwaha  */
311872d48a7SPrabhakar Kushwaha int dpmac_mdio_write(struct fsl_mc_io		*mc_io,
312872d48a7SPrabhakar Kushwaha 		     uint32_t			cmd_flags,
313872d48a7SPrabhakar Kushwaha 		     uint16_t			token,
314872d48a7SPrabhakar Kushwaha 		     struct dpmac_mdio_cfg	*cfg);
315872d48a7SPrabhakar Kushwaha 
316872d48a7SPrabhakar Kushwaha /* DPMAC link configuration/state options */
317872d48a7SPrabhakar Kushwaha 
318872d48a7SPrabhakar Kushwaha /* Enable auto-negotiation */
319872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_AUTONEG		0x0000000000000001ULL
320872d48a7SPrabhakar Kushwaha /* Enable half-duplex mode */
321872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_HALF_DUPLEX	0x0000000000000002ULL
322872d48a7SPrabhakar Kushwaha /* Enable pause frames */
323872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_PAUSE		0x0000000000000004ULL
324872d48a7SPrabhakar Kushwaha /* Enable a-symmetric pause frames */
325872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_ASYM_PAUSE	0x0000000000000008ULL
326872d48a7SPrabhakar Kushwaha 
327872d48a7SPrabhakar Kushwaha /**
328872d48a7SPrabhakar Kushwaha  * struct dpmac_link_cfg - Structure representing DPMAC link configuration
329872d48a7SPrabhakar Kushwaha  * @rate: Link's rate - in Mbps
330872d48a7SPrabhakar Kushwaha  * @options: Enable/Disable DPMAC link cfg features (bitmap)
331872d48a7SPrabhakar Kushwaha  */
332872d48a7SPrabhakar Kushwaha struct dpmac_link_cfg {
333872d48a7SPrabhakar Kushwaha 	uint32_t rate;
334872d48a7SPrabhakar Kushwaha 	uint64_t options;
335872d48a7SPrabhakar Kushwaha };
336872d48a7SPrabhakar Kushwaha 
337872d48a7SPrabhakar Kushwaha /**
338872d48a7SPrabhakar Kushwaha  * dpmac_get_link_cfg() - Get Ethernet link configuration
339872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
340872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
341872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
342872d48a7SPrabhakar Kushwaha  * @cfg:	Returned structure with the link configuration
343872d48a7SPrabhakar Kushwaha  *
344872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
345872d48a7SPrabhakar Kushwaha  */
346872d48a7SPrabhakar Kushwaha int dpmac_get_link_cfg(struct fsl_mc_io	*mc_io,
347872d48a7SPrabhakar Kushwaha 		       uint32_t		cmd_flags,
348872d48a7SPrabhakar Kushwaha 		       uint16_t		token,
349872d48a7SPrabhakar Kushwaha 		       struct dpmac_link_cfg	*cfg);
350872d48a7SPrabhakar Kushwaha 
351872d48a7SPrabhakar Kushwaha /**
352872d48a7SPrabhakar Kushwaha  * struct dpmac_link_state - DPMAC link configuration request
353872d48a7SPrabhakar Kushwaha  * @rate: Rate in Mbps
354872d48a7SPrabhakar Kushwaha  * @options: Enable/Disable DPMAC link cfg features (bitmap)
355872d48a7SPrabhakar Kushwaha  * @up: Link state
356872d48a7SPrabhakar Kushwaha  */
357872d48a7SPrabhakar Kushwaha struct dpmac_link_state {
358872d48a7SPrabhakar Kushwaha 	uint32_t	rate;
359872d48a7SPrabhakar Kushwaha 	uint64_t	options;
360872d48a7SPrabhakar Kushwaha 	int		up;
361872d48a7SPrabhakar Kushwaha };
362872d48a7SPrabhakar Kushwaha 
363872d48a7SPrabhakar Kushwaha /**
364872d48a7SPrabhakar Kushwaha  * dpmac_set_link_state() - Set the Ethernet link status
365872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
366872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
367872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
368872d48a7SPrabhakar Kushwaha  * @link_state:	Link state configuration
369872d48a7SPrabhakar Kushwaha  *
370872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
371872d48a7SPrabhakar Kushwaha  */
372872d48a7SPrabhakar Kushwaha int dpmac_set_link_state(struct fsl_mc_io		*mc_io,
373872d48a7SPrabhakar Kushwaha 			 uint32_t			cmd_flags,
374872d48a7SPrabhakar Kushwaha 			 uint16_t			token,
375872d48a7SPrabhakar Kushwaha 			 struct dpmac_link_state	*link_state);
376872d48a7SPrabhakar Kushwaha 
377872d48a7SPrabhakar Kushwaha /**
378872d48a7SPrabhakar Kushwaha  * enum dpni_counter - DPNI counter types
379872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_64: counts 64-octet frame, good or bad.
380872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_127: counts 65- to 127-octet frame, good or bad.
381872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_255: counts 128- to 255-octet frame, good or bad.
382872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_511: counts 256- to 511-octet frame, good or bad.
383872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1023: counts 512- to 1023-octet frame, good or bad.
384872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1518: counts 1024- to 1518-octet frame, good or bad.
385872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1519_MAX: counts 1519-octet frame and larger
386872d48a7SPrabhakar Kushwaha  *				  (up to max frame length specified),
387872d48a7SPrabhakar Kushwaha  *				  good or bad.
388872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAG: counts packet which is shorter than 64 octets received
389872d48a7SPrabhakar Kushwaha  *			with a wrong CRC
390872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_JABBER: counts packet longer than the maximum frame length
391872d48a7SPrabhakar Kushwaha  *			  specified, with a bad frame check sequence.
392872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_DISCARD: counts dropped packet due to internal errors.
393872d48a7SPrabhakar Kushwaha  *				 Occurs when a receive FIFO overflows.
394872d48a7SPrabhakar Kushwaha  *				 Includes also packets truncated as a result of
395872d48a7SPrabhakar Kushwaha  *				 the receive FIFO overflow.
396872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ALIGN_ERR: counts frame with an alignment error
397872d48a7SPrabhakar Kushwaha  *			     (optional used for wrong SFD)
398872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_UNDERSIZED: counts packet transmitted that was less than 64
399872d48a7SPrabhakar Kushwaha  *			      octets long with a good CRC.
400872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_OVERSIZED: counts packet longer than the maximum frame length
401872d48a7SPrabhakar Kushwaha  *			     specified, with a good frame check sequence.
402872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_VALID_PAUSE_FRAME: counts valid pause frame (regular and PFC).
403872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_VALID_PAUSE_FRAME: counts valid pause frame transmitted
404872d48a7SPrabhakar Kushwaha  *				     (regular and PFC).
405872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_BYTE: counts octet received except preamble for all valid
406872d48a7SPrabhakar Kushwaha  *				frames and valid pause frames.
407872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_MCAST_FRAME: counts received multicast frame
408872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_BCAST_FRAME: counts received broadcast frame
409872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ALL_FRAME: counts each good or bad packet received.
410872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_UCAST_FRAME: counts received unicast frame
411872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ERR_FRAME: counts frame received with an error
412872d48a7SPrabhakar Kushwaha  *			     (except for undersized/fragment frame)
413872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_BYTE: counts octet transmitted except preamble for all valid
414872d48a7SPrabhakar Kushwaha  *			frames and valid pause frames transmitted.
415872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_MCAST_FRAME: counts transmitted multicast frame
416872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_BCAST_FRAME: counts transmitted broadcast frame
417872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_UCAST_FRAME: counts transmitted unicast frame
418872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_ERR_FRAME: counts frame transmitted with an error
419872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_GOOD_FRAME: counts frame received without error, including
420872d48a7SPrabhakar Kushwaha  *			      pause frames.
421872d48a7SPrabhakar Kushwaha  */
422872d48a7SPrabhakar Kushwaha enum dpmac_counter {
423872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_64,
424872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_127,
425872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_255,
426872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_511,
427872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1023,
428872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1518,
429872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1519_MAX,
430872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAG,
431872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_JABBER,
432872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_DISCARD,
433872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ALIGN_ERR,
434872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_UNDERSIZED,
435872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_OVERSIZED,
436872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_VALID_PAUSE_FRAME,
437872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_VALID_PAUSE_FRAME,
438872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_BYTE,
439872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_MCAST_FRAME,
440872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_BCAST_FRAME,
441872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ALL_FRAME,
442872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_UCAST_FRAME,
443872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ERR_FRAME,
444872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_BYTE,
445872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_MCAST_FRAME,
446872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_BCAST_FRAME,
447872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_UCAST_FRAME,
448872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_ERR_FRAME,
449872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_GOOD_FRAME
450872d48a7SPrabhakar Kushwaha };
451872d48a7SPrabhakar Kushwaha 
452872d48a7SPrabhakar Kushwaha /**
453872d48a7SPrabhakar Kushwaha  * dpmac_get_counter() - Read a specific DPMAC counter
454872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
455872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
456872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
457872d48a7SPrabhakar Kushwaha  * @type:	The requested counter
458872d48a7SPrabhakar Kushwaha  * @counter:	Returned counter value
459872d48a7SPrabhakar Kushwaha  *
460872d48a7SPrabhakar Kushwaha  * Return:	The requested counter; '0' otherwise.
461872d48a7SPrabhakar Kushwaha  */
462872d48a7SPrabhakar Kushwaha int dpmac_get_counter(struct fsl_mc_io		*mc_io,
463872d48a7SPrabhakar Kushwaha 		      uint32_t			cmd_flags,
464872d48a7SPrabhakar Kushwaha 		      uint16_t			token,
465872d48a7SPrabhakar Kushwaha 		      enum dpmac_counter	 type,
466872d48a7SPrabhakar Kushwaha 		      uint64_t			*counter);
467872d48a7SPrabhakar Kushwaha 
468872d48a7SPrabhakar Kushwaha #endif /* __FSL_DPMAC_H */
469