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