xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dpmac.h (revision 872d48a7778145bdc04746af231bbcfd66a7c65e)
1*872d48a7SPrabhakar Kushwaha /*
2*872d48a7SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3*872d48a7SPrabhakar Kushwaha  *
4*872d48a7SPrabhakar Kushwaha  * Copyright (C) 2015 Freescale Semiconductor, Inc.
5*872d48a7SPrabhakar Kushwaha  * Author: Prabhakar Kushwaha <prabhakar@freescale.com>
6*872d48a7SPrabhakar Kushwaha  *
7*872d48a7SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8*872d48a7SPrabhakar Kushwaha  */
9*872d48a7SPrabhakar Kushwaha 
10*872d48a7SPrabhakar Kushwaha #ifndef __FSL_DPMAC_H
11*872d48a7SPrabhakar Kushwaha #define __FSL_DPMAC_H
12*872d48a7SPrabhakar Kushwaha 
13*872d48a7SPrabhakar Kushwaha /* DPMAC Version */
14*872d48a7SPrabhakar Kushwaha #define DPMAC_VER_MAJOR				3
15*872d48a7SPrabhakar Kushwaha #define DPMAC_VER_MINOR				1
16*872d48a7SPrabhakar Kushwaha 
17*872d48a7SPrabhakar Kushwaha /* Command IDs */
18*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_CLOSE			0x800
19*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_OPEN			0x80c
20*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_CREATE			0x90c
21*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_DESTROY			0x900
22*872d48a7SPrabhakar Kushwaha 
23*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_ATTR			0x004
24*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_RESET			0x005
25*872d48a7SPrabhakar Kushwaha 
26*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_MDIO_READ			0x0c0
27*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_MDIO_WRITE			0x0c1
28*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_LINK_CFG		0x0c2
29*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_SET_LINK_STATE		0x0c3
30*872d48a7SPrabhakar Kushwaha #define DPMAC_CMDID_GET_COUNTER			0x0c4
31*872d48a7SPrabhakar Kushwaha 
32*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
33*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_CREATE(cmd, cfg) \
34*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      cfg->mac_id)
35*872d48a7SPrabhakar Kushwaha 
36*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
37*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_OPEN(cmd, dpmac_id) \
38*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    dpmac_id)
39*872d48a7SPrabhakar Kushwaha 
40*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type,	arg_name */
41*872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_ATTRIBUTES(cmd, attr) \
42*872d48a7SPrabhakar Kushwaha do { \
43*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,			attr->phy_id);\
44*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,			attr->id);\
45*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  16, uint16_t,		attr->version.major);\
46*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t,		attr->version.minor);\
47*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32,  8, enum dpmac_link_type,	attr->link_type);\
48*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 40,  8, enum dpmac_eth_if,	attr->eth_if);\
49*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  32, uint32_t,		attr->max_rate);\
50*872d48a7SPrabhakar Kushwaha } while (0)
51*872d48a7SPrabhakar Kushwaha 
52*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
53*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_MDIO_READ(cmd, cfg) \
54*872d48a7SPrabhakar Kushwaha do { \
55*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->phy_addr); \
56*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 8,  8,  uint8_t,  cfg->reg); \
57*872d48a7SPrabhakar Kushwaha } while (0)
58*872d48a7SPrabhakar Kushwaha 
59*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
60*872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_MDIO_READ(cmd, data) \
61*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, data)
62*872d48a7SPrabhakar Kushwaha 
63*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
64*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_MDIO_WRITE(cmd, cfg) \
65*872d48a7SPrabhakar Kushwaha do { \
66*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->phy_addr); \
67*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 8,  8,  uint8_t,  cfg->reg); \
68*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, cfg->data); \
69*872d48a7SPrabhakar Kushwaha } while (0)
70*872d48a7SPrabhakar Kushwaha 
71*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
72*872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_LINK_CFG(cmd, cfg) \
73*872d48a7SPrabhakar Kushwaha do { \
74*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  64, uint64_t, cfg->options); \
75*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, cfg->rate); \
76*872d48a7SPrabhakar Kushwaha } while (0)
77*872d48a7SPrabhakar Kushwaha 
78*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
79*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_SET_LINK_STATE(cmd, cfg) \
80*872d48a7SPrabhakar Kushwaha do { \
81*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  64, uint64_t, cfg->options); \
82*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, uint32_t, cfg->rate); \
83*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  1,  int,      cfg->up); \
84*872d48a7SPrabhakar Kushwaha } while (0)
85*872d48a7SPrabhakar Kushwaha 
86*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
87*872d48a7SPrabhakar Kushwaha #define DPMAC_CMD_GET_COUNTER(cmd, type) \
88*872d48a7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8, enum dpmac_counter, type)
89*872d48a7SPrabhakar Kushwaha 
90*872d48a7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
91*872d48a7SPrabhakar Kushwaha #define DPMAC_RSP_GET_COUNTER(cmd, counter) \
92*872d48a7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0, 64, uint64_t, counter)
93*872d48a7SPrabhakar Kushwaha 
94*872d48a7SPrabhakar Kushwaha /* Data Path MAC API
95*872d48a7SPrabhakar Kushwaha  * Contains initialization APIs and runtime control APIs for DPMAC
96*872d48a7SPrabhakar Kushwaha  */
97*872d48a7SPrabhakar Kushwaha 
98*872d48a7SPrabhakar Kushwaha struct fsl_mc_io;
99*872d48a7SPrabhakar Kushwaha 
100*872d48a7SPrabhakar Kushwaha /**
101*872d48a7SPrabhakar Kushwaha  * dpmac_open() - Open a control session for the specified object.
102*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
103*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
104*872d48a7SPrabhakar Kushwaha  * @dpmac_id:	DPMAC unique ID
105*872d48a7SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
106*872d48a7SPrabhakar Kushwaha  *
107*872d48a7SPrabhakar Kushwaha  * This function can be used to open a control session for an
108*872d48a7SPrabhakar Kushwaha  * already created object; an object may have been declared in
109*872d48a7SPrabhakar Kushwaha  * the DPL or by calling the dpmac_create function.
110*872d48a7SPrabhakar Kushwaha  * This function returns a unique authentication token,
111*872d48a7SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
112*872d48a7SPrabhakar Kushwaha  * portal; this token must be used in all subsequent commands for
113*872d48a7SPrabhakar Kushwaha  * this specific object
114*872d48a7SPrabhakar Kushwaha  *
115*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
116*872d48a7SPrabhakar Kushwaha  */
117*872d48a7SPrabhakar Kushwaha int dpmac_open(struct fsl_mc_io	*mc_io,
118*872d48a7SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
119*872d48a7SPrabhakar Kushwaha 	       int			dpmac_id,
120*872d48a7SPrabhakar Kushwaha 	       uint16_t		*token);
121*872d48a7SPrabhakar Kushwaha 
122*872d48a7SPrabhakar Kushwaha /**
123*872d48a7SPrabhakar Kushwaha  * dpmac_close() - Close the control session of the object
124*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
125*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
126*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
127*872d48a7SPrabhakar Kushwaha  *
128*872d48a7SPrabhakar Kushwaha  * After this function is called, no further operations are
129*872d48a7SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
130*872d48a7SPrabhakar Kushwaha  *
131*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
132*872d48a7SPrabhakar Kushwaha  */
133*872d48a7SPrabhakar Kushwaha int dpmac_close(struct fsl_mc_io	*mc_io,
134*872d48a7SPrabhakar Kushwaha 		uint32_t		cmd_flags,
135*872d48a7SPrabhakar Kushwaha 		uint16_t		token);
136*872d48a7SPrabhakar Kushwaha 
137*872d48a7SPrabhakar Kushwaha /**
138*872d48a7SPrabhakar Kushwaha  * enum dpmac_link_type -  DPMAC link type
139*872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_NONE: No link
140*872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_FIXED: Link is fixed type
141*872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_PHY: Link by PHY ID
142*872d48a7SPrabhakar Kushwaha  * @DPMAC_LINK_TYPE_BACKPLANE: Backplane link type
143*872d48a7SPrabhakar Kushwaha  */
144*872d48a7SPrabhakar Kushwaha enum dpmac_link_type {
145*872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_NONE,
146*872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_FIXED,
147*872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_PHY,
148*872d48a7SPrabhakar Kushwaha 	DPMAC_LINK_TYPE_BACKPLANE
149*872d48a7SPrabhakar Kushwaha };
150*872d48a7SPrabhakar Kushwaha 
151*872d48a7SPrabhakar Kushwaha /**
152*872d48a7SPrabhakar Kushwaha  * enum dpmac_eth_if - DPMAC Ethrnet interface
153*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_MII: MII interface
154*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_RMII: RMII interface
155*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_SMII: SMII interface
156*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_GMII: GMII interface
157*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_RGMII: RGMII interface
158*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_SGMII: SGMII interface
159*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_QSGMII: QSGMII interface
160*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_XAUI: XAUI interface
161*872d48a7SPrabhakar Kushwaha  * @DPMAC_ETH_IF_XFI: XFI interface
162*872d48a7SPrabhakar Kushwaha  */
163*872d48a7SPrabhakar Kushwaha enum dpmac_eth_if {
164*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_MII,
165*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_RMII,
166*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_SMII,
167*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_GMII,
168*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_RGMII,
169*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_SGMII,
170*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_QSGMII,
171*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_XAUI,
172*872d48a7SPrabhakar Kushwaha 	DPMAC_ETH_IF_XFI
173*872d48a7SPrabhakar Kushwaha };
174*872d48a7SPrabhakar Kushwaha 
175*872d48a7SPrabhakar Kushwaha /**
176*872d48a7SPrabhakar Kushwaha  * struct dpmac_cfg - Structure representing DPMAC configuration
177*872d48a7SPrabhakar Kushwaha  * @mac_id:	Represents the Hardware MAC ID; in case of multiple WRIOP,
178*872d48a7SPrabhakar Kushwaha  *		the MAC IDs are continuous.
179*872d48a7SPrabhakar Kushwaha  *		For example:  2 WRIOPs, 16 MACs in each:
180*872d48a7SPrabhakar Kushwaha  *				MAC IDs for the 1st WRIOP: 1-16,
181*872d48a7SPrabhakar Kushwaha  *				MAC IDs for the 2nd WRIOP: 17-32.
182*872d48a7SPrabhakar Kushwaha  */
183*872d48a7SPrabhakar Kushwaha struct dpmac_cfg {
184*872d48a7SPrabhakar Kushwaha 	int mac_id;
185*872d48a7SPrabhakar Kushwaha };
186*872d48a7SPrabhakar Kushwaha 
187*872d48a7SPrabhakar Kushwaha /**
188*872d48a7SPrabhakar Kushwaha  * dpmac_create() - Create the DPMAC object.
189*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
190*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
191*872d48a7SPrabhakar Kushwaha  * @cfg:	Configuration structure
192*872d48a7SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
193*872d48a7SPrabhakar Kushwaha  *
194*872d48a7SPrabhakar Kushwaha  * Create the DPMAC object, allocate required resources and
195*872d48a7SPrabhakar Kushwaha  * perform required initialization.
196*872d48a7SPrabhakar Kushwaha  *
197*872d48a7SPrabhakar Kushwaha  * The object can be created either by declaring it in the
198*872d48a7SPrabhakar Kushwaha  * DPL file, or by calling this function.
199*872d48a7SPrabhakar Kushwaha  * This function returns a unique authentication token,
200*872d48a7SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
201*872d48a7SPrabhakar Kushwaha  * portal; this token must be used in all subsequent calls to
202*872d48a7SPrabhakar Kushwaha  * this specific object. For objects that are created using the
203*872d48a7SPrabhakar Kushwaha  * DPL file, call dpmac_open function to get an authentication
204*872d48a7SPrabhakar Kushwaha  * token first.
205*872d48a7SPrabhakar Kushwaha  *
206*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
207*872d48a7SPrabhakar Kushwaha  */
208*872d48a7SPrabhakar Kushwaha int dpmac_create(struct fsl_mc_io	*mc_io,
209*872d48a7SPrabhakar Kushwaha 		 uint32_t		cmd_flags,
210*872d48a7SPrabhakar Kushwaha 		 const struct dpmac_cfg	*cfg,
211*872d48a7SPrabhakar Kushwaha 		 uint16_t		*token);
212*872d48a7SPrabhakar Kushwaha 
213*872d48a7SPrabhakar Kushwaha /**
214*872d48a7SPrabhakar Kushwaha  * dpmac_destroy() - Destroy the DPMAC object and release all its resources.
215*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
216*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
217*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
218*872d48a7SPrabhakar Kushwaha  *
219*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; error code otherwise.
220*872d48a7SPrabhakar Kushwaha  */
221*872d48a7SPrabhakar Kushwaha int dpmac_destroy(struct fsl_mc_io	*mc_io,
222*872d48a7SPrabhakar Kushwaha 		  uint32_t		cmd_flags,
223*872d48a7SPrabhakar Kushwaha 		  uint16_t		token);
224*872d48a7SPrabhakar Kushwaha 
225*872d48a7SPrabhakar Kushwaha /* DPMAC IRQ Index and Events */
226*872d48a7SPrabhakar Kushwaha 
227*872d48a7SPrabhakar Kushwaha /* IRQ index */
228*872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_INDEX						0
229*872d48a7SPrabhakar Kushwaha /* IRQ event - indicates a change in link state */
230*872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_EVENT_LINK_CFG_REQ		0x00000001
231*872d48a7SPrabhakar Kushwaha /* irq event - Indicates that the link state changed */
232*872d48a7SPrabhakar Kushwaha #define DPMAC_IRQ_EVENT_LINK_CHANGED		0x00000002
233*872d48a7SPrabhakar Kushwaha 
234*872d48a7SPrabhakar Kushwaha /**
235*872d48a7SPrabhakar Kushwaha  * struct dpmac_attr - Structure representing DPMAC attributes
236*872d48a7SPrabhakar Kushwaha  * @id:		DPMAC object ID
237*872d48a7SPrabhakar Kushwaha  * @phy_id:	PHY ID
238*872d48a7SPrabhakar Kushwaha  * @link_type: link type
239*872d48a7SPrabhakar Kushwaha  * @eth_if: Ethernet interface
240*872d48a7SPrabhakar Kushwaha  * @max_rate: Maximum supported rate - in Mbps
241*872d48a7SPrabhakar Kushwaha  * @version:	DPMAC version
242*872d48a7SPrabhakar Kushwaha  */
243*872d48a7SPrabhakar Kushwaha struct dpmac_attr {
244*872d48a7SPrabhakar Kushwaha 	int			id;
245*872d48a7SPrabhakar Kushwaha 	int			phy_id;
246*872d48a7SPrabhakar Kushwaha 	enum dpmac_link_type	link_type;
247*872d48a7SPrabhakar Kushwaha 	enum dpmac_eth_if	eth_if;
248*872d48a7SPrabhakar Kushwaha 	uint32_t		max_rate;
249*872d48a7SPrabhakar Kushwaha 	/**
250*872d48a7SPrabhakar Kushwaha 	 * struct version - Structure representing DPMAC version
251*872d48a7SPrabhakar Kushwaha 	 * @major:	DPMAC major version
252*872d48a7SPrabhakar Kushwaha 	 * @minor:	DPMAC minor version
253*872d48a7SPrabhakar Kushwaha 	 */
254*872d48a7SPrabhakar Kushwaha 	struct {
255*872d48a7SPrabhakar Kushwaha 		uint16_t major;
256*872d48a7SPrabhakar Kushwaha 		uint16_t minor;
257*872d48a7SPrabhakar Kushwaha 	} version;
258*872d48a7SPrabhakar Kushwaha };
259*872d48a7SPrabhakar Kushwaha 
260*872d48a7SPrabhakar Kushwaha /**
261*872d48a7SPrabhakar Kushwaha  * dpmac_get_attributes - Retrieve DPMAC attributes.
262*872d48a7SPrabhakar Kushwaha  *
263*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
264*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
265*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
266*872d48a7SPrabhakar Kushwaha  * @attr:	Returned object's attributes
267*872d48a7SPrabhakar Kushwaha  *
268*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
269*872d48a7SPrabhakar Kushwaha  */
270*872d48a7SPrabhakar Kushwaha int dpmac_get_attributes(struct fsl_mc_io	*mc_io,
271*872d48a7SPrabhakar Kushwaha 			 uint32_t		cmd_flags,
272*872d48a7SPrabhakar Kushwaha 			 uint16_t		token,
273*872d48a7SPrabhakar Kushwaha 			 struct dpmac_attr	*attr);
274*872d48a7SPrabhakar Kushwaha 
275*872d48a7SPrabhakar Kushwaha /**
276*872d48a7SPrabhakar Kushwaha  * struct dpmac_mdio_cfg - DPMAC MDIO read/write parameters
277*872d48a7SPrabhakar Kushwaha  * @phy_addr: MDIO device address
278*872d48a7SPrabhakar Kushwaha  * @reg: Address of the register within the Clause 45 PHY device from which data
279*872d48a7SPrabhakar Kushwaha  *	is to be read
280*872d48a7SPrabhakar Kushwaha  * @data: Data read/write from/to MDIO
281*872d48a7SPrabhakar Kushwaha  */
282*872d48a7SPrabhakar Kushwaha struct dpmac_mdio_cfg {
283*872d48a7SPrabhakar Kushwaha 	uint8_t		phy_addr;
284*872d48a7SPrabhakar Kushwaha 	uint8_t		reg;
285*872d48a7SPrabhakar Kushwaha 	uint16_t	data;
286*872d48a7SPrabhakar Kushwaha };
287*872d48a7SPrabhakar Kushwaha 
288*872d48a7SPrabhakar Kushwaha /**
289*872d48a7SPrabhakar Kushwaha  * dpmac_mdio_read() - Perform MDIO read transaction
290*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
291*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
292*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
293*872d48a7SPrabhakar Kushwaha  * @cfg:	Structure with MDIO transaction parameters
294*872d48a7SPrabhakar Kushwaha  *
295*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
296*872d48a7SPrabhakar Kushwaha  */
297*872d48a7SPrabhakar Kushwaha int dpmac_mdio_read(struct fsl_mc_io		*mc_io,
298*872d48a7SPrabhakar Kushwaha 		    uint32_t			cmd_flags,
299*872d48a7SPrabhakar Kushwaha 		    uint16_t			token,
300*872d48a7SPrabhakar Kushwaha 		    struct dpmac_mdio_cfg	*cfg);
301*872d48a7SPrabhakar Kushwaha 
302*872d48a7SPrabhakar Kushwaha /**
303*872d48a7SPrabhakar Kushwaha  * dpmac_mdio_write() - Perform MDIO write transaction
304*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
305*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
306*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
307*872d48a7SPrabhakar Kushwaha  * @cfg:	Structure with MDIO transaction parameters
308*872d48a7SPrabhakar Kushwaha  *
309*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
310*872d48a7SPrabhakar Kushwaha  */
311*872d48a7SPrabhakar Kushwaha int dpmac_mdio_write(struct fsl_mc_io		*mc_io,
312*872d48a7SPrabhakar Kushwaha 		     uint32_t			cmd_flags,
313*872d48a7SPrabhakar Kushwaha 		     uint16_t			token,
314*872d48a7SPrabhakar Kushwaha 		     struct dpmac_mdio_cfg	*cfg);
315*872d48a7SPrabhakar Kushwaha 
316*872d48a7SPrabhakar Kushwaha /* DPMAC link configuration/state options */
317*872d48a7SPrabhakar Kushwaha 
318*872d48a7SPrabhakar Kushwaha /* Enable auto-negotiation */
319*872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_AUTONEG		0x0000000000000001ULL
320*872d48a7SPrabhakar Kushwaha /* Enable half-duplex mode */
321*872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_HALF_DUPLEX	0x0000000000000002ULL
322*872d48a7SPrabhakar Kushwaha /* Enable pause frames */
323*872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_PAUSE		0x0000000000000004ULL
324*872d48a7SPrabhakar Kushwaha /* Enable a-symmetric pause frames */
325*872d48a7SPrabhakar Kushwaha #define DPMAC_LINK_OPT_ASYM_PAUSE	0x0000000000000008ULL
326*872d48a7SPrabhakar Kushwaha 
327*872d48a7SPrabhakar Kushwaha /**
328*872d48a7SPrabhakar Kushwaha  * struct dpmac_link_cfg - Structure representing DPMAC link configuration
329*872d48a7SPrabhakar Kushwaha  * @rate: Link's rate - in Mbps
330*872d48a7SPrabhakar Kushwaha  * @options: Enable/Disable DPMAC link cfg features (bitmap)
331*872d48a7SPrabhakar Kushwaha  */
332*872d48a7SPrabhakar Kushwaha struct dpmac_link_cfg {
333*872d48a7SPrabhakar Kushwaha 	uint32_t rate;
334*872d48a7SPrabhakar Kushwaha 	uint64_t options;
335*872d48a7SPrabhakar Kushwaha };
336*872d48a7SPrabhakar Kushwaha 
337*872d48a7SPrabhakar Kushwaha /**
338*872d48a7SPrabhakar Kushwaha  * dpmac_get_link_cfg() - Get Ethernet link configuration
339*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
340*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
341*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
342*872d48a7SPrabhakar Kushwaha  * @cfg:	Returned structure with the link configuration
343*872d48a7SPrabhakar Kushwaha  *
344*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
345*872d48a7SPrabhakar Kushwaha  */
346*872d48a7SPrabhakar Kushwaha int dpmac_get_link_cfg(struct fsl_mc_io	*mc_io,
347*872d48a7SPrabhakar Kushwaha 		       uint32_t		cmd_flags,
348*872d48a7SPrabhakar Kushwaha 		       uint16_t		token,
349*872d48a7SPrabhakar Kushwaha 		       struct dpmac_link_cfg	*cfg);
350*872d48a7SPrabhakar Kushwaha 
351*872d48a7SPrabhakar Kushwaha /**
352*872d48a7SPrabhakar Kushwaha  * struct dpmac_link_state - DPMAC link configuration request
353*872d48a7SPrabhakar Kushwaha  * @rate: Rate in Mbps
354*872d48a7SPrabhakar Kushwaha  * @options: Enable/Disable DPMAC link cfg features (bitmap)
355*872d48a7SPrabhakar Kushwaha  * @up: Link state
356*872d48a7SPrabhakar Kushwaha  */
357*872d48a7SPrabhakar Kushwaha struct dpmac_link_state {
358*872d48a7SPrabhakar Kushwaha 	uint32_t	rate;
359*872d48a7SPrabhakar Kushwaha 	uint64_t	options;
360*872d48a7SPrabhakar Kushwaha 	int		up;
361*872d48a7SPrabhakar Kushwaha };
362*872d48a7SPrabhakar Kushwaha 
363*872d48a7SPrabhakar Kushwaha /**
364*872d48a7SPrabhakar Kushwaha  * dpmac_set_link_state() - Set the Ethernet link status
365*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
366*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
367*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
368*872d48a7SPrabhakar Kushwaha  * @link_state:	Link state configuration
369*872d48a7SPrabhakar Kushwaha  *
370*872d48a7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
371*872d48a7SPrabhakar Kushwaha  */
372*872d48a7SPrabhakar Kushwaha int dpmac_set_link_state(struct fsl_mc_io		*mc_io,
373*872d48a7SPrabhakar Kushwaha 			 uint32_t			cmd_flags,
374*872d48a7SPrabhakar Kushwaha 			 uint16_t			token,
375*872d48a7SPrabhakar Kushwaha 			 struct dpmac_link_state	*link_state);
376*872d48a7SPrabhakar Kushwaha 
377*872d48a7SPrabhakar Kushwaha /**
378*872d48a7SPrabhakar Kushwaha  * enum dpni_counter - DPNI counter types
379*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_64: counts 64-octet frame, good or bad.
380*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_127: counts 65- to 127-octet frame, good or bad.
381*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_255: counts 128- to 255-octet frame, good or bad.
382*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_511: counts 256- to 511-octet frame, good or bad.
383*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1023: counts 512- to 1023-octet frame, good or bad.
384*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1518: counts 1024- to 1518-octet frame, good or bad.
385*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_1519_MAX: counts 1519-octet frame and larger
386*872d48a7SPrabhakar Kushwaha  *				  (up to max frame length specified),
387*872d48a7SPrabhakar Kushwaha  *				  good or bad.
388*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAG: counts packet which is shorter than 64 octets received
389*872d48a7SPrabhakar Kushwaha  *			with a wrong CRC
390*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_JABBER: counts packet longer than the maximum frame length
391*872d48a7SPrabhakar Kushwaha  *			  specified, with a bad frame check sequence.
392*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_FRAME_DISCARD: counts dropped packet due to internal errors.
393*872d48a7SPrabhakar Kushwaha  *				 Occurs when a receive FIFO overflows.
394*872d48a7SPrabhakar Kushwaha  *				 Includes also packets truncated as a result of
395*872d48a7SPrabhakar Kushwaha  *				 the receive FIFO overflow.
396*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ALIGN_ERR: counts frame with an alignment error
397*872d48a7SPrabhakar Kushwaha  *			     (optional used for wrong SFD)
398*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_UNDERSIZED: counts packet transmitted that was less than 64
399*872d48a7SPrabhakar Kushwaha  *			      octets long with a good CRC.
400*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_OVERSIZED: counts packet longer than the maximum frame length
401*872d48a7SPrabhakar Kushwaha  *			     specified, with a good frame check sequence.
402*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_VALID_PAUSE_FRAME: counts valid pause frame (regular and PFC).
403*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_VALID_PAUSE_FRAME: counts valid pause frame transmitted
404*872d48a7SPrabhakar Kushwaha  *				     (regular and PFC).
405*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_BYTE: counts octet received except preamble for all valid
406*872d48a7SPrabhakar Kushwaha  *				frames and valid pause frames.
407*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_MCAST_FRAME: counts received multicast frame
408*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_BCAST_FRAME: counts received broadcast frame
409*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ALL_FRAME: counts each good or bad packet received.
410*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_UCAST_FRAME: counts received unicast frame
411*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_ERR_FRAME: counts frame received with an error
412*872d48a7SPrabhakar Kushwaha  *			     (except for undersized/fragment frame)
413*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_BYTE: counts octet transmitted except preamble for all valid
414*872d48a7SPrabhakar Kushwaha  *			frames and valid pause frames transmitted.
415*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_MCAST_FRAME: counts transmitted multicast frame
416*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_BCAST_FRAME: counts transmitted broadcast frame
417*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_UCAST_FRAME: counts transmitted unicast frame
418*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_EGR_ERR_FRAME: counts frame transmitted with an error
419*872d48a7SPrabhakar Kushwaha  * @DPMAC_CNT_ING_GOOD_FRAME: counts frame received without error, including
420*872d48a7SPrabhakar Kushwaha  *			      pause frames.
421*872d48a7SPrabhakar Kushwaha  */
422*872d48a7SPrabhakar Kushwaha enum dpmac_counter {
423*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_64,
424*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_127,
425*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_255,
426*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_511,
427*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1023,
428*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1518,
429*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_1519_MAX,
430*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAG,
431*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_JABBER,
432*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_FRAME_DISCARD,
433*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ALIGN_ERR,
434*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_UNDERSIZED,
435*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_OVERSIZED,
436*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_VALID_PAUSE_FRAME,
437*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_VALID_PAUSE_FRAME,
438*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_BYTE,
439*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_MCAST_FRAME,
440*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_BCAST_FRAME,
441*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ALL_FRAME,
442*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_UCAST_FRAME,
443*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_ERR_FRAME,
444*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_BYTE,
445*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_MCAST_FRAME,
446*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_BCAST_FRAME,
447*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_UCAST_FRAME,
448*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_EGR_ERR_FRAME,
449*872d48a7SPrabhakar Kushwaha 	DPMAC_CNT_ING_GOOD_FRAME
450*872d48a7SPrabhakar Kushwaha };
451*872d48a7SPrabhakar Kushwaha 
452*872d48a7SPrabhakar Kushwaha /**
453*872d48a7SPrabhakar Kushwaha  * dpmac_get_counter() - Read a specific DPMAC counter
454*872d48a7SPrabhakar Kushwaha  * @mc_io:	Pointer to opaque I/O object
455*872d48a7SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
456*872d48a7SPrabhakar Kushwaha  * @token:	Token of DPMAC object
457*872d48a7SPrabhakar Kushwaha  * @type:	The requested counter
458*872d48a7SPrabhakar Kushwaha  * @counter:	Returned counter value
459*872d48a7SPrabhakar Kushwaha  *
460*872d48a7SPrabhakar Kushwaha  * Return:	The requested counter; '0' otherwise.
461*872d48a7SPrabhakar Kushwaha  */
462*872d48a7SPrabhakar Kushwaha int dpmac_get_counter(struct fsl_mc_io		*mc_io,
463*872d48a7SPrabhakar Kushwaha 		      uint32_t			cmd_flags,
464*872d48a7SPrabhakar Kushwaha 		      uint16_t			token,
465*872d48a7SPrabhakar Kushwaha 		      enum dpmac_counter	 type,
466*872d48a7SPrabhakar Kushwaha 		      uint64_t			*counter);
467*872d48a7SPrabhakar Kushwaha 
468*872d48a7SPrabhakar Kushwaha #endif /* __FSL_DPMAC_H */
469