171947923SIoana Ciornei /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ 271947923SIoana Ciornei /* Copyright 2013-2016 Freescale Semiconductor Inc. 371947923SIoana Ciornei * Copyright 2019 NXP 471947923SIoana Ciornei */ 571947923SIoana Ciornei #ifndef __FSL_DPMAC_H 671947923SIoana Ciornei #define __FSL_DPMAC_H 771947923SIoana Ciornei 871947923SIoana Ciornei /* Data Path MAC API 971947923SIoana Ciornei * Contains initialization APIs and runtime control APIs for DPMAC 1071947923SIoana Ciornei */ 1171947923SIoana Ciornei 1271947923SIoana Ciornei struct fsl_mc_io; 1371947923SIoana Ciornei 1471947923SIoana Ciornei int dpmac_open(struct fsl_mc_io *mc_io, 1571947923SIoana Ciornei u32 cmd_flags, 1671947923SIoana Ciornei int dpmac_id, 1771947923SIoana Ciornei u16 *token); 1871947923SIoana Ciornei 1971947923SIoana Ciornei int dpmac_close(struct fsl_mc_io *mc_io, 2071947923SIoana Ciornei u32 cmd_flags, 2171947923SIoana Ciornei u16 token); 2271947923SIoana Ciornei 2371947923SIoana Ciornei /** 2471947923SIoana Ciornei * enum dpmac_link_type - DPMAC link type 2571947923SIoana Ciornei * @DPMAC_LINK_TYPE_NONE: No link 2671947923SIoana Ciornei * @DPMAC_LINK_TYPE_FIXED: Link is fixed type 2771947923SIoana Ciornei * @DPMAC_LINK_TYPE_PHY: Link by PHY ID 2871947923SIoana Ciornei * @DPMAC_LINK_TYPE_BACKPLANE: Backplane link type 2971947923SIoana Ciornei */ 3071947923SIoana Ciornei enum dpmac_link_type { 3171947923SIoana Ciornei DPMAC_LINK_TYPE_NONE, 3271947923SIoana Ciornei DPMAC_LINK_TYPE_FIXED, 3371947923SIoana Ciornei DPMAC_LINK_TYPE_PHY, 3471947923SIoana Ciornei DPMAC_LINK_TYPE_BACKPLANE 3571947923SIoana Ciornei }; 3671947923SIoana Ciornei 3771947923SIoana Ciornei /** 3871947923SIoana Ciornei * enum dpmac_eth_if - DPMAC Ethrnet interface 3971947923SIoana Ciornei * @DPMAC_ETH_IF_MII: MII interface 4071947923SIoana Ciornei * @DPMAC_ETH_IF_RMII: RMII interface 4171947923SIoana Ciornei * @DPMAC_ETH_IF_SMII: SMII interface 4271947923SIoana Ciornei * @DPMAC_ETH_IF_GMII: GMII interface 4371947923SIoana Ciornei * @DPMAC_ETH_IF_RGMII: RGMII interface 4471947923SIoana Ciornei * @DPMAC_ETH_IF_SGMII: SGMII interface 4571947923SIoana Ciornei * @DPMAC_ETH_IF_QSGMII: QSGMII interface 4671947923SIoana Ciornei * @DPMAC_ETH_IF_XAUI: XAUI interface 4771947923SIoana Ciornei * @DPMAC_ETH_IF_XFI: XFI interface 4871947923SIoana Ciornei * @DPMAC_ETH_IF_CAUI: CAUI interface 4971947923SIoana Ciornei * @DPMAC_ETH_IF_1000BASEX: 1000BASEX interface 5071947923SIoana Ciornei * @DPMAC_ETH_IF_USXGMII: USXGMII interface 5171947923SIoana Ciornei */ 5271947923SIoana Ciornei enum dpmac_eth_if { 5371947923SIoana Ciornei DPMAC_ETH_IF_MII, 5471947923SIoana Ciornei DPMAC_ETH_IF_RMII, 5571947923SIoana Ciornei DPMAC_ETH_IF_SMII, 5671947923SIoana Ciornei DPMAC_ETH_IF_GMII, 5771947923SIoana Ciornei DPMAC_ETH_IF_RGMII, 5871947923SIoana Ciornei DPMAC_ETH_IF_SGMII, 5971947923SIoana Ciornei DPMAC_ETH_IF_QSGMII, 6071947923SIoana Ciornei DPMAC_ETH_IF_XAUI, 6171947923SIoana Ciornei DPMAC_ETH_IF_XFI, 6271947923SIoana Ciornei DPMAC_ETH_IF_CAUI, 6371947923SIoana Ciornei DPMAC_ETH_IF_1000BASEX, 6471947923SIoana Ciornei DPMAC_ETH_IF_USXGMII, 6571947923SIoana Ciornei }; 6671947923SIoana Ciornei 6771947923SIoana Ciornei /** 6871947923SIoana Ciornei * struct dpmac_attr - Structure representing DPMAC attributes 6971947923SIoana Ciornei * @id: DPMAC object ID 7071947923SIoana Ciornei * @max_rate: Maximum supported rate - in Mbps 7171947923SIoana Ciornei * @eth_if: Ethernet interface 7271947923SIoana Ciornei * @link_type: link type 7371947923SIoana Ciornei */ 7471947923SIoana Ciornei struct dpmac_attr { 7571947923SIoana Ciornei u16 id; 7671947923SIoana Ciornei u32 max_rate; 7771947923SIoana Ciornei enum dpmac_eth_if eth_if; 7871947923SIoana Ciornei enum dpmac_link_type link_type; 7971947923SIoana Ciornei }; 8071947923SIoana Ciornei 8171947923SIoana Ciornei int dpmac_get_attributes(struct fsl_mc_io *mc_io, 8271947923SIoana Ciornei u32 cmd_flags, 8371947923SIoana Ciornei u16 token, 8471947923SIoana Ciornei struct dpmac_attr *attr); 8571947923SIoana Ciornei 864fe72de6SIoana Ciornei /* DPMAC link configuration/state options */ 8771947923SIoana Ciornei 8871947923SIoana Ciornei #define DPMAC_LINK_OPT_AUTONEG BIT_ULL(0) 8971947923SIoana Ciornei #define DPMAC_LINK_OPT_HALF_DUPLEX BIT_ULL(1) 9071947923SIoana Ciornei #define DPMAC_LINK_OPT_PAUSE BIT_ULL(2) 9171947923SIoana Ciornei #define DPMAC_LINK_OPT_ASYM_PAUSE BIT_ULL(3) 9271947923SIoana Ciornei 934fe72de6SIoana Ciornei /* Advertised link speeds */ 9471947923SIoana Ciornei #define DPMAC_ADVERTISED_10BASET_FULL BIT_ULL(0) 9571947923SIoana Ciornei #define DPMAC_ADVERTISED_100BASET_FULL BIT_ULL(1) 9671947923SIoana Ciornei #define DPMAC_ADVERTISED_1000BASET_FULL BIT_ULL(2) 9771947923SIoana Ciornei #define DPMAC_ADVERTISED_10000BASET_FULL BIT_ULL(4) 9871947923SIoana Ciornei #define DPMAC_ADVERTISED_2500BASEX_FULL BIT_ULL(5) 9971947923SIoana Ciornei 1004fe72de6SIoana Ciornei /* Advertise auto-negotiation enable */ 10171947923SIoana Ciornei #define DPMAC_ADVERTISED_AUTONEG BIT_ULL(3) 10271947923SIoana Ciornei 10371947923SIoana Ciornei /** 10471947923SIoana Ciornei * struct dpmac_link_state - DPMAC link configuration request 10571947923SIoana Ciornei * @rate: Rate in Mbps 10671947923SIoana Ciornei * @options: Enable/Disable DPMAC link cfg features (bitmap) 10771947923SIoana Ciornei * @up: Link state 10871947923SIoana Ciornei * @state_valid: Ignore/Update the state of the link 10971947923SIoana Ciornei * @supported: Speeds capability of the phy (bitmap) 11071947923SIoana Ciornei * @advertising: Speeds that are advertised for autoneg (bitmap) 11171947923SIoana Ciornei */ 11271947923SIoana Ciornei struct dpmac_link_state { 11371947923SIoana Ciornei u32 rate; 11471947923SIoana Ciornei u64 options; 11571947923SIoana Ciornei int up; 11671947923SIoana Ciornei int state_valid; 11771947923SIoana Ciornei u64 supported; 11871947923SIoana Ciornei u64 advertising; 11971947923SIoana Ciornei }; 12071947923SIoana Ciornei 12171947923SIoana Ciornei int dpmac_set_link_state(struct fsl_mc_io *mc_io, 12271947923SIoana Ciornei u32 cmd_flags, 12371947923SIoana Ciornei u16 token, 12471947923SIoana Ciornei struct dpmac_link_state *link_state); 12571947923SIoana Ciornei 126991df1fbSIoana Ciornei /** 127991df1fbSIoana Ciornei * enum dpmac_counter_id - DPMAC counter types 128991df1fbSIoana Ciornei * 129991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_64: counts 64-bytes frames, good or bad. 130991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_127: counts 65- to 127-bytes frames, good or bad. 131991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_255: counts 128- to 255-bytes frames, good or bad. 132991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_511: counts 256- to 511-bytes frames, good or bad. 133991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_1023: counts 512- to 1023-bytes frames, good or bad. 134991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_1518: counts 1024- to 1518-bytes frames, good or bad. 135991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_1519_MAX: counts 1519-bytes frames and larger 136991df1fbSIoana Ciornei * (up to max frame length specified), 137991df1fbSIoana Ciornei * good or bad. 138991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAG: counts frames which are shorter than 64 bytes received 139991df1fbSIoana Ciornei * with a wrong CRC 140991df1fbSIoana Ciornei * @DPMAC_CNT_ING_JABBER: counts frames longer than the maximum frame length 141991df1fbSIoana Ciornei * specified, with a bad frame check sequence. 142991df1fbSIoana Ciornei * @DPMAC_CNT_ING_FRAME_DISCARD: counts dropped frames due to internal errors. 143991df1fbSIoana Ciornei * Occurs when a receive FIFO overflows. 144991df1fbSIoana Ciornei * Includes also frames truncated as a result of 145991df1fbSIoana Ciornei * the receive FIFO overflow. 146991df1fbSIoana Ciornei * @DPMAC_CNT_ING_ALIGN_ERR: counts frames with an alignment error 147991df1fbSIoana Ciornei * (optional used for wrong SFD). 148991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_UNDERSIZED: counts frames transmitted that was less than 64 149991df1fbSIoana Ciornei * bytes long with a good CRC. 150991df1fbSIoana Ciornei * @DPMAC_CNT_ING_OVERSIZED: counts frames longer than the maximum frame length 151991df1fbSIoana Ciornei * specified, with a good frame check sequence. 152991df1fbSIoana Ciornei * @DPMAC_CNT_ING_VALID_PAUSE_FRAME: counts valid pause frames (regular and PFC) 153991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_VALID_PAUSE_FRAME: counts valid pause frames transmitted 154991df1fbSIoana Ciornei * (regular and PFC). 155991df1fbSIoana Ciornei * @DPMAC_CNT_ING_BYTE: counts bytes received except preamble for all valid 156991df1fbSIoana Ciornei * frames and valid pause frames. 157991df1fbSIoana Ciornei * @DPMAC_CNT_ING_MCAST_FRAME: counts received multicast frames. 158991df1fbSIoana Ciornei * @DPMAC_CNT_ING_BCAST_FRAME: counts received broadcast frames. 159991df1fbSIoana Ciornei * @DPMAC_CNT_ING_ALL_FRAME: counts each good or bad frames received. 160991df1fbSIoana Ciornei * @DPMAC_CNT_ING_UCAST_FRAME: counts received unicast frames. 161991df1fbSIoana Ciornei * @DPMAC_CNT_ING_ERR_FRAME: counts frames received with an error 162991df1fbSIoana Ciornei * (except for undersized/fragment frame). 163991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_BYTE: counts bytes transmitted except preamble for all valid 164991df1fbSIoana Ciornei * frames and valid pause frames transmitted. 165991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_MCAST_FRAME: counts transmitted multicast frames. 166991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_BCAST_FRAME: counts transmitted broadcast frames. 167991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_UCAST_FRAME: counts transmitted unicast frames. 168991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_ERR_FRAME: counts frames transmitted with an error. 169991df1fbSIoana Ciornei * @DPMAC_CNT_ING_GOOD_FRAME: counts frames received without error, including 170991df1fbSIoana Ciornei * pause frames. 171991df1fbSIoana Ciornei * @DPMAC_CNT_EGR_GOOD_FRAME: counts frames transmitted without error, including 172991df1fbSIoana Ciornei * pause frames. 173991df1fbSIoana Ciornei */ 174991df1fbSIoana Ciornei enum dpmac_counter_id { 175991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_64, 176991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_127, 177991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_255, 178991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_511, 179991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_1023, 180991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_1518, 181991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_1519_MAX, 182991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAG, 183991df1fbSIoana Ciornei DPMAC_CNT_ING_JABBER, 184991df1fbSIoana Ciornei DPMAC_CNT_ING_FRAME_DISCARD, 185991df1fbSIoana Ciornei DPMAC_CNT_ING_ALIGN_ERR, 186991df1fbSIoana Ciornei DPMAC_CNT_EGR_UNDERSIZED, 187991df1fbSIoana Ciornei DPMAC_CNT_ING_OVERSIZED, 188991df1fbSIoana Ciornei DPMAC_CNT_ING_VALID_PAUSE_FRAME, 189991df1fbSIoana Ciornei DPMAC_CNT_EGR_VALID_PAUSE_FRAME, 190991df1fbSIoana Ciornei DPMAC_CNT_ING_BYTE, 191991df1fbSIoana Ciornei DPMAC_CNT_ING_MCAST_FRAME, 192991df1fbSIoana Ciornei DPMAC_CNT_ING_BCAST_FRAME, 193991df1fbSIoana Ciornei DPMAC_CNT_ING_ALL_FRAME, 194991df1fbSIoana Ciornei DPMAC_CNT_ING_UCAST_FRAME, 195991df1fbSIoana Ciornei DPMAC_CNT_ING_ERR_FRAME, 196991df1fbSIoana Ciornei DPMAC_CNT_EGR_BYTE, 197991df1fbSIoana Ciornei DPMAC_CNT_EGR_MCAST_FRAME, 198991df1fbSIoana Ciornei DPMAC_CNT_EGR_BCAST_FRAME, 199991df1fbSIoana Ciornei DPMAC_CNT_EGR_UCAST_FRAME, 200991df1fbSIoana Ciornei DPMAC_CNT_EGR_ERR_FRAME, 201991df1fbSIoana Ciornei DPMAC_CNT_ING_GOOD_FRAME, 202991df1fbSIoana Ciornei DPMAC_CNT_EGR_GOOD_FRAME 203991df1fbSIoana Ciornei }; 204991df1fbSIoana Ciornei 205991df1fbSIoana Ciornei int dpmac_get_counter(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, 206991df1fbSIoana Ciornei enum dpmac_counter_id id, u64 *value); 207991df1fbSIoana Ciornei 20838d28b02SIoana Ciornei int dpmac_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags, 20938d28b02SIoana Ciornei u16 *major_ver, u16 *minor_ver); 210*332b9ea5SIoana Ciornei 211*332b9ea5SIoana Ciornei int dpmac_set_protocol(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, 212*332b9ea5SIoana Ciornei enum dpmac_eth_if protocol); 21371947923SIoana Ciornei #endif /* __FSL_DPMAC_H */ 214