Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 | /* SPDX-License-Identifier: GPL-2.0 */ #ifndef BCM63XX_ENET_H_ #define BCM63XX_ENET_H_ #include <linux/types.h> #include <linux/mii.h> #include <linux/mutex.h> #include <linux/phy.h> #include <linux/platform_device.h> #include <bcm63xx_regs.h> #include <bcm63xx_io.h> #include <bcm63xx_iudma.h> /* default number of descriptor */ #define BCMENET_DEF_RX_DESC 64 #define BCMENET_DEF_TX_DESC 32 /* maximum burst len for dma (4 bytes unit) */ #define BCMENET_DMA_MAXBURST 16 #define BCMENETSW_DMA_MAXBURST 8 /* tx transmit threshold (4 bytes unit), fifo is 256 bytes, the value * must be low enough so that a DMA transfer of above burst length can * not overflow the fifo */ #define BCMENET_TX_FIFO_TRESH 32 /* * hardware maximum rx/tx packet size including FCS, max mtu is * actually 2047, but if we set max rx size register to 2047 we won't * get overflow information if packet size is 2048 or above */ #define BCMENET_MAX_MTU 2046 /* * MIB Counters register definitions */ #define ETH_MIB_TX_GD_OCTETS 0 #define ETH_MIB_TX_GD_PKTS 1 #define ETH_MIB_TX_ALL_OCTETS 2 #define ETH_MIB_TX_ALL_PKTS 3 #define ETH_MIB_TX_BRDCAST 4 #define ETH_MIB_TX_MULT 5 #define ETH_MIB_TX_64 6 #define ETH_MIB_TX_65_127 7 #define ETH_MIB_TX_128_255 8 #define ETH_MIB_TX_256_511 9 #define ETH_MIB_TX_512_1023 10 #define ETH_MIB_TX_1024_MAX 11 #define ETH_MIB_TX_JAB 12 #define ETH_MIB_TX_OVR 13 #define ETH_MIB_TX_FRAG 14 #define ETH_MIB_TX_UNDERRUN 15 #define ETH_MIB_TX_COL 16 #define ETH_MIB_TX_1_COL 17 #define ETH_MIB_TX_M_COL 18 #define ETH_MIB_TX_EX_COL 19 #define ETH_MIB_TX_LATE 20 #define ETH_MIB_TX_DEF 21 #define ETH_MIB_TX_CRS 22 #define ETH_MIB_TX_PAUSE 23 #define ETH_MIB_RX_GD_OCTETS 32 #define ETH_MIB_RX_GD_PKTS 33 #define ETH_MIB_RX_ALL_OCTETS 34 #define ETH_MIB_RX_ALL_PKTS 35 #define ETH_MIB_RX_BRDCAST 36 #define ETH_MIB_RX_MULT 37 #define ETH_MIB_RX_64 38 #define ETH_MIB_RX_65_127 39 #define ETH_MIB_RX_128_255 40 #define ETH_MIB_RX_256_511 41 #define ETH_MIB_RX_512_1023 42 #define ETH_MIB_RX_1024_MAX 43 #define ETH_MIB_RX_JAB 44 #define ETH_MIB_RX_OVR 45 #define ETH_MIB_RX_FRAG 46 #define ETH_MIB_RX_DROP 47 #define ETH_MIB_RX_CRC_ALIGN 48 #define ETH_MIB_RX_UND 49 #define ETH_MIB_RX_CRC 50 #define ETH_MIB_RX_ALIGN 51 #define ETH_MIB_RX_SYM 52 #define ETH_MIB_RX_PAUSE 53 #define ETH_MIB_RX_CNTRL 54 /* * SW MIB Counters register definitions */ #define ETHSW_MIB_TX_ALL_OCT 0 #define ETHSW_MIB_TX_DROP_PKTS 2 #define ETHSW_MIB_TX_QOS_PKTS 3 #define ETHSW_MIB_TX_BRDCAST 4 #define ETHSW_MIB_TX_MULT 5 #define ETHSW_MIB_TX_UNI 6 #define ETHSW_MIB_TX_COL 7 #define ETHSW_MIB_TX_1_COL 8 #define ETHSW_MIB_TX_M_COL 9 #define ETHSW_MIB_TX_DEF 10 #define ETHSW_MIB_TX_LATE 11 #define ETHSW_MIB_TX_EX_COL 12 #define ETHSW_MIB_TX_PAUSE 14 #define ETHSW_MIB_TX_QOS_OCT 15 #define ETHSW_MIB_RX_ALL_OCT 17 #define ETHSW_MIB_RX_UND 19 #define ETHSW_MIB_RX_PAUSE 20 #define ETHSW_MIB_RX_64 21 #define ETHSW_MIB_RX_65_127 22 #define ETHSW_MIB_RX_128_255 23 #define ETHSW_MIB_RX_256_511 24 #define ETHSW_MIB_RX_512_1023 25 #define ETHSW_MIB_RX_1024_1522 26 #define ETHSW_MIB_RX_OVR 27 #define ETHSW_MIB_RX_JAB 28 #define ETHSW_MIB_RX_ALIGN 29 #define ETHSW_MIB_RX_CRC 30 #define ETHSW_MIB_RX_GD_OCT 31 #define ETHSW_MIB_RX_DROP 33 #define ETHSW_MIB_RX_UNI 34 #define ETHSW_MIB_RX_MULT 35 #define ETHSW_MIB_RX_BRDCAST 36 #define ETHSW_MIB_RX_SA_CHANGE 37 #define ETHSW_MIB_RX_FRAG 38 #define ETHSW_MIB_RX_OVR_DISC 39 #define ETHSW_MIB_RX_SYM 40 #define ETHSW_MIB_RX_QOS_PKTS 41 #define ETHSW_MIB_RX_QOS_OCT 42 #define ETHSW_MIB_RX_1523_2047 44 #define ETHSW_MIB_RX_2048_4095 45 #define ETHSW_MIB_RX_4096_8191 46 #define ETHSW_MIB_RX_8192_9728 47 struct bcm_enet_mib_counters { u64 tx_gd_octets; u32 tx_gd_pkts; u32 tx_all_octets; u32 tx_all_pkts; u32 tx_unicast; u32 tx_brdcast; u32 tx_mult; u32 tx_64; u32 tx_65_127; u32 tx_128_255; u32 tx_256_511; u32 tx_512_1023; u32 tx_1024_max; u32 tx_1523_2047; u32 tx_2048_4095; u32 tx_4096_8191; u32 tx_8192_9728; u32 tx_jab; u32 tx_drop; u32 tx_ovr; u32 tx_frag; u32 tx_underrun; u32 tx_col; u32 tx_1_col; u32 tx_m_col; u32 tx_ex_col; u32 tx_late; u32 tx_def; u32 tx_crs; u32 tx_pause; u64 rx_gd_octets; u32 rx_gd_pkts; u32 rx_all_octets; u32 rx_all_pkts; u32 rx_brdcast; u32 rx_unicast; u32 rx_mult; u32 rx_64; u32 rx_65_127; u32 rx_128_255; u32 rx_256_511; u32 rx_512_1023; u32 rx_1024_max; u32 rx_jab; u32 rx_ovr; u32 rx_frag; u32 rx_drop; u32 rx_crc_align; u32 rx_und; u32 rx_crc; u32 rx_align; u32 rx_sym; u32 rx_pause; u32 rx_cntrl; }; struct bcm_enet_priv { /* base remapped address of device */ void __iomem *base; /* mac irq, rx_dma irq, tx_dma irq */ int irq; int irq_rx; int irq_tx; /* hw view of rx & tx dma ring */ dma_addr_t rx_desc_dma; dma_addr_t tx_desc_dma; /* allocated size (in bytes) for rx & tx dma ring */ unsigned int rx_desc_alloc_size; unsigned int tx_desc_alloc_size; struct napi_struct napi; /* dma channel id for rx */ int rx_chan; /* number of dma desc in rx ring */ int rx_ring_size; /* cpu view of rx dma ring */ struct bcm_enet_desc *rx_desc_cpu; /* current number of armed descriptor given to hardware for rx */ int rx_desc_count; /* next rx descriptor to fetch from hardware */ int rx_curr_desc; /* next dirty rx descriptor to refill */ int rx_dirty_desc; /* size of allocated rx buffers */ unsigned int rx_buf_size; /* allocated rx buffer offset */ unsigned int rx_buf_offset; /* size of allocated rx frag */ unsigned int rx_frag_size; /* list of buffer given to hw for rx */ void **rx_buf; /* used when rx skb allocation failed, so we defer rx queue * refill */ struct timer_list rx_timeout; /* lock rx_timeout against rx normal operation */ spinlock_t rx_lock; /* dma channel id for tx */ int tx_chan; /* number of dma desc in tx ring */ int tx_ring_size; /* maximum dma burst size */ int dma_maxburst; /* cpu view of rx dma ring */ struct bcm_enet_desc *tx_desc_cpu; /* number of available descriptor for tx */ int tx_desc_count; /* next tx descriptor avaiable */ int tx_curr_desc; /* next dirty tx descriptor to reclaim */ int tx_dirty_desc; /* list of skb given to hw for tx */ struct sk_buff **tx_skb; /* lock used by tx reclaim and xmit */ spinlock_t tx_lock; /* set if internal phy is ignored and external mii interface * is selected */ int use_external_mii; /* set if a phy is connected, phy address must be known, * probing is not possible */ int has_phy; int phy_id; /* set if connected phy has an associated irq */ int has_phy_interrupt; int phy_interrupt; /* used when a phy is connected (phylib used) */ struct mii_bus *mii_bus; int old_link; int old_duplex; int old_pause; /* used when no phy is connected */ int force_speed_100; int force_duplex_full; /* pause parameters */ int pause_auto; int pause_rx; int pause_tx; /* stats */ struct bcm_enet_mib_counters mib; /* after mib interrupt, mib registers update is done in this * work queue */ struct work_struct mib_update_task; /* lock mib update between userspace request and workqueue */ struct mutex mib_update_lock; /* mac clock */ struct clk *mac_clk; /* phy clock if internal phy is used */ struct clk *phy_clk; /* network device reference */ struct net_device *net_dev; /* platform device reference */ struct platform_device *pdev; /* maximum hardware transmit/receive size */ unsigned int hw_mtu; bool enet_is_sw; /* port mapping for switch devices */ int num_ports; struct bcm63xx_enetsw_port used_ports[ENETSW_MAX_PORT]; int sw_port_link[ENETSW_MAX_PORT]; /* used to poll switch port state */ struct timer_list swphy_poll; spinlock_t enetsw_mdio_lock; /* dma channel enable mask */ u32 dma_chan_en_mask; /* dma channel interrupt mask */ u32 dma_chan_int_mask; /* DMA engine has internal SRAM */ bool dma_has_sram; /* dma channel width */ unsigned int dma_chan_width; /* dma descriptor shift value */ unsigned int dma_desc_shift; }; #endif /* ! BCM63XX_ENET_H_ */ |