altera_tse.h revision 5aec4ee3724ad93ee63cafc6f6b5f9cd40adda52
1/* Altera Triple-Speed Ethernet MAC driver 2 * Copyright (C) 2008-2014 Altera Corporation. All rights reserved 3 * 4 * Contributors: 5 * Dalon Westergreen 6 * Thomas Chou 7 * Ian Abbott 8 * Yuriy Kozlov 9 * Tobias Klauser 10 * Andriy Smolskyy 11 * Roman Bulgakov 12 * Dmytro Mytarchuk 13 * Matthew Gerlach 14 * 15 * Original driver contributed by SLS. 16 * Major updates contributed by GlobalLogic 17 * 18 * This program is free software; you can redistribute it and/or modify it 19 * under the terms and conditions of the GNU General Public License, 20 * version 2, as published by the Free Software Foundation. 21 * 22 * This program is distributed in the hope it will be useful, but WITHOUT 23 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 24 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 25 * more details. 26 * 27 * You should have received a copy of the GNU General Public License along with 28 * this program. If not, see <http://www.gnu.org/licenses/>. 29 */ 30 31#ifndef __ALTERA_TSE_H__ 32#define __ALTERA_TSE_H__ 33 34#define ALTERA_TSE_RESOURCE_NAME "altera_tse" 35 36#include <linux/bitops.h> 37#include <linux/if_vlan.h> 38#include <linux/list.h> 39#include <linux/netdevice.h> 40#include <linux/phy.h> 41 42#define ALTERA_TSE_SW_RESET_WATCHDOG_CNTR 10000 43#define ALTERA_TSE_MAC_FIFO_WIDTH 4 /* TX/RX FIFO width in 44 * bytes 45 */ 46/* Rx FIFO default settings */ 47#define ALTERA_TSE_RX_SECTION_EMPTY 16 48#define ALTERA_TSE_RX_SECTION_FULL 0 49#define ALTERA_TSE_RX_ALMOST_EMPTY 8 50#define ALTERA_TSE_RX_ALMOST_FULL 8 51 52/* Tx FIFO default settings */ 53#define ALTERA_TSE_TX_SECTION_EMPTY 16 54#define ALTERA_TSE_TX_SECTION_FULL 0 55#define ALTERA_TSE_TX_ALMOST_EMPTY 8 56#define ALTERA_TSE_TX_ALMOST_FULL 3 57 58/* MAC function configuration default settings */ 59#define ALTERA_TSE_TX_IPG_LENGTH 12 60 61#define ALTERA_TSE_PAUSE_QUANTA 0xffff 62 63#define GET_BIT_VALUE(v, bit) (((v) >> (bit)) & 0x1) 64 65/* MAC Command_Config Register Bit Definitions 66 */ 67#define MAC_CMDCFG_TX_ENA BIT(0) 68#define MAC_CMDCFG_RX_ENA BIT(1) 69#define MAC_CMDCFG_XON_GEN BIT(2) 70#define MAC_CMDCFG_ETH_SPEED BIT(3) 71#define MAC_CMDCFG_PROMIS_EN BIT(4) 72#define MAC_CMDCFG_PAD_EN BIT(5) 73#define MAC_CMDCFG_CRC_FWD BIT(6) 74#define MAC_CMDCFG_PAUSE_FWD BIT(7) 75#define MAC_CMDCFG_PAUSE_IGNORE BIT(8) 76#define MAC_CMDCFG_TX_ADDR_INS BIT(9) 77#define MAC_CMDCFG_HD_ENA BIT(10) 78#define MAC_CMDCFG_EXCESS_COL BIT(11) 79#define MAC_CMDCFG_LATE_COL BIT(12) 80#define MAC_CMDCFG_SW_RESET BIT(13) 81#define MAC_CMDCFG_MHASH_SEL BIT(14) 82#define MAC_CMDCFG_LOOP_ENA BIT(15) 83#define MAC_CMDCFG_TX_ADDR_SEL(v) (((v) & 0x7) << 16) 84#define MAC_CMDCFG_MAGIC_ENA BIT(19) 85#define MAC_CMDCFG_SLEEP BIT(20) 86#define MAC_CMDCFG_WAKEUP BIT(21) 87#define MAC_CMDCFG_XOFF_GEN BIT(22) 88#define MAC_CMDCFG_CNTL_FRM_ENA BIT(23) 89#define MAC_CMDCFG_NO_LGTH_CHECK BIT(24) 90#define MAC_CMDCFG_ENA_10 BIT(25) 91#define MAC_CMDCFG_RX_ERR_DISC BIT(26) 92#define MAC_CMDCFG_DISABLE_READ_TIMEOUT BIT(27) 93#define MAC_CMDCFG_CNT_RESET BIT(31) 94 95#define MAC_CMDCFG_TX_ENA_GET(v) GET_BIT_VALUE(v, 0) 96#define MAC_CMDCFG_RX_ENA_GET(v) GET_BIT_VALUE(v, 1) 97#define MAC_CMDCFG_XON_GEN_GET(v) GET_BIT_VALUE(v, 2) 98#define MAC_CMDCFG_ETH_SPEED_GET(v) GET_BIT_VALUE(v, 3) 99#define MAC_CMDCFG_PROMIS_EN_GET(v) GET_BIT_VALUE(v, 4) 100#define MAC_CMDCFG_PAD_EN_GET(v) GET_BIT_VALUE(v, 5) 101#define MAC_CMDCFG_CRC_FWD_GET(v) GET_BIT_VALUE(v, 6) 102#define MAC_CMDCFG_PAUSE_FWD_GET(v) GET_BIT_VALUE(v, 7) 103#define MAC_CMDCFG_PAUSE_IGNORE_GET(v) GET_BIT_VALUE(v, 8) 104#define MAC_CMDCFG_TX_ADDR_INS_GET(v) GET_BIT_VALUE(v, 9) 105#define MAC_CMDCFG_HD_ENA_GET(v) GET_BIT_VALUE(v, 10) 106#define MAC_CMDCFG_EXCESS_COL_GET(v) GET_BIT_VALUE(v, 11) 107#define MAC_CMDCFG_LATE_COL_GET(v) GET_BIT_VALUE(v, 12) 108#define MAC_CMDCFG_SW_RESET_GET(v) GET_BIT_VALUE(v, 13) 109#define MAC_CMDCFG_MHASH_SEL_GET(v) GET_BIT_VALUE(v, 14) 110#define MAC_CMDCFG_LOOP_ENA_GET(v) GET_BIT_VALUE(v, 15) 111#define MAC_CMDCFG_TX_ADDR_SEL_GET(v) (((v) >> 16) & 0x7) 112#define MAC_CMDCFG_MAGIC_ENA_GET(v) GET_BIT_VALUE(v, 19) 113#define MAC_CMDCFG_SLEEP_GET(v) GET_BIT_VALUE(v, 20) 114#define MAC_CMDCFG_WAKEUP_GET(v) GET_BIT_VALUE(v, 21) 115#define MAC_CMDCFG_XOFF_GEN_GET(v) GET_BIT_VALUE(v, 22) 116#define MAC_CMDCFG_CNTL_FRM_ENA_GET(v) GET_BIT_VALUE(v, 23) 117#define MAC_CMDCFG_NO_LGTH_CHECK_GET(v) GET_BIT_VALUE(v, 24) 118#define MAC_CMDCFG_ENA_10_GET(v) GET_BIT_VALUE(v, 25) 119#define MAC_CMDCFG_RX_ERR_DISC_GET(v) GET_BIT_VALUE(v, 26) 120#define MAC_CMDCFG_DISABLE_READ_TIMEOUT_GET(v) GET_BIT_VALUE(v, 27) 121#define MAC_CMDCFG_CNT_RESET_GET(v) GET_BIT_VALUE(v, 31) 122 123/* MDIO registers within MAC register Space 124 */ 125struct altera_tse_mdio { 126 u32 control; /* PHY device operation control register */ 127 u32 status; /* PHY device operation status register */ 128 u32 phy_id1; /* Bits 31:16 of PHY identifier */ 129 u32 phy_id2; /* Bits 15:0 of PHY identifier */ 130 u32 auto_negotiation_advertisement; /* Auto-negotiation 131 * advertisement 132 * register 133 */ 134 u32 remote_partner_base_page_ability; 135 136 u32 reg6; 137 u32 reg7; 138 u32 reg8; 139 u32 reg9; 140 u32 rega; 141 u32 regb; 142 u32 regc; 143 u32 regd; 144 u32 rege; 145 u32 regf; 146 u32 reg10; 147 u32 reg11; 148 u32 reg12; 149 u32 reg13; 150 u32 reg14; 151 u32 reg15; 152 u32 reg16; 153 u32 reg17; 154 u32 reg18; 155 u32 reg19; 156 u32 reg1a; 157 u32 reg1b; 158 u32 reg1c; 159 u32 reg1d; 160 u32 reg1e; 161 u32 reg1f; 162}; 163 164/* MAC register Space. Note that some of these registers may or may not be 165 * present depending upon options chosen by the user when the core was 166 * configured and built. Please consult the Altera Triple Speed Ethernet User 167 * Guide for details. 168 */ 169struct altera_tse_mac { 170 /* Bits 15:0: MegaCore function revision (0x0800). Bit 31:16: Customer 171 * specific revision 172 */ 173 u32 megacore_revision; 174 /* Provides a memory location for user applications to test the device 175 * memory operation. 176 */ 177 u32 scratch_pad; 178 /* The host processor uses this register to control and configure the 179 * MAC block 180 */ 181 u32 command_config; 182 /* 32-bit primary MAC address word 0 bits 0 to 31 of the primary 183 * MAC address 184 */ 185 u32 mac_addr_0; 186 /* 32-bit primary MAC address word 1 bits 32 to 47 of the primary 187 * MAC address 188 */ 189 u32 mac_addr_1; 190 /* 14-bit maximum frame length. The MAC receive logic */ 191 u32 frm_length; 192 /* The pause quanta is used in each pause frame sent to a remote 193 * Ethernet device, in increments of 512 Ethernet bit times 194 */ 195 u32 pause_quanta; 196 /* 12-bit receive FIFO section-empty threshold */ 197 u32 rx_section_empty; 198 /* 12-bit receive FIFO section-full threshold */ 199 u32 rx_section_full; 200 /* 12-bit transmit FIFO section-empty threshold */ 201 u32 tx_section_empty; 202 /* 12-bit transmit FIFO section-full threshold */ 203 u32 tx_section_full; 204 /* 12-bit receive FIFO almost-empty threshold */ 205 u32 rx_almost_empty; 206 /* 12-bit receive FIFO almost-full threshold */ 207 u32 rx_almost_full; 208 /* 12-bit transmit FIFO almost-empty threshold */ 209 u32 tx_almost_empty; 210 /* 12-bit transmit FIFO almost-full threshold */ 211 u32 tx_almost_full; 212 /* MDIO address of PHY Device 0. Bits 0 to 4 hold a 5-bit PHY address */ 213 u32 mdio_phy0_addr; 214 /* MDIO address of PHY Device 1. Bits 0 to 4 hold a 5-bit PHY address */ 215 u32 mdio_phy1_addr; 216 217 /* Bit[15:0]—16-bit holdoff quanta */ 218 u32 holdoff_quant; 219 220 /* only if 100/1000 BaseX PCS, reserved otherwise */ 221 u32 reserved1[5]; 222 223 /* Minimum IPG between consecutive transmit frame in terms of bytes */ 224 u32 tx_ipg_length; 225 226 /* IEEE 802.3 oEntity Managed Object Support */ 227 228 /* The MAC addresses */ 229 u32 mac_id_1; 230 u32 mac_id_2; 231 232 /* Number of frames transmitted without error including pause frames */ 233 u32 frames_transmitted_ok; 234 /* Number of frames received without error including pause frames */ 235 u32 frames_received_ok; 236 /* Number of frames received with a CRC error */ 237 u32 frames_check_sequence_errors; 238 /* Frame received with an alignment error */ 239 u32 alignment_errors; 240 /* Sum of payload and padding octets of frames transmitted without 241 * error 242 */ 243 u32 octets_transmitted_ok; 244 /* Sum of payload and padding octets of frames received without error */ 245 u32 octets_received_ok; 246 247 /* IEEE 802.3 oPausedEntity Managed Object Support */ 248 249 /* Number of transmitted pause frames */ 250 u32 tx_pause_mac_ctrl_frames; 251 /* Number of Received pause frames */ 252 u32 rx_pause_mac_ctrl_frames; 253 254 /* IETF MIB (MIB-II) Object Support */ 255 256 /* Number of frames received with error */ 257 u32 if_in_errors; 258 /* Number of frames transmitted with error */ 259 u32 if_out_errors; 260 /* Number of valid received unicast frames */ 261 u32 if_in_ucast_pkts; 262 /* Number of valid received multicasts frames (without pause) */ 263 u32 if_in_multicast_pkts; 264 /* Number of valid received broadcast frames */ 265 u32 if_in_broadcast_pkts; 266 u32 if_out_discards; 267 /* The number of valid unicast frames transmitted */ 268 u32 if_out_ucast_pkts; 269 /* The number of valid multicast frames transmitted, 270 * excluding pause frames 271 */ 272 u32 if_out_multicast_pkts; 273 u32 if_out_broadcast_pkts; 274 275 /* IETF RMON MIB Object Support */ 276 277 /* Counts the number of dropped packets due to internal errors 278 * of the MAC client. 279 */ 280 u32 ether_stats_drop_events; 281 /* Total number of bytes received. Good and bad frames. */ 282 u32 ether_stats_octets; 283 /* Total number of packets received. Counts good and bad packets. */ 284 u32 ether_stats_pkts; 285 /* Number of packets received with less than 64 bytes. */ 286 u32 ether_stats_undersize_pkts; 287 /* The number of frames received that are longer than the 288 * value configured in the frm_length register 289 */ 290 u32 ether_stats_oversize_pkts; 291 /* Number of received packet with 64 bytes */ 292 u32 ether_stats_pkts_64_octets; 293 /* Frames (good and bad) with 65 to 127 bytes */ 294 u32 ether_stats_pkts_65to127_octets; 295 /* Frames (good and bad) with 128 to 255 bytes */ 296 u32 ether_stats_pkts_128to255_octets; 297 /* Frames (good and bad) with 256 to 511 bytes */ 298 u32 ether_stats_pkts_256to511_octets; 299 /* Frames (good and bad) with 512 to 1023 bytes */ 300 u32 ether_stats_pkts_512to1023_octets; 301 /* Frames (good and bad) with 1024 to 1518 bytes */ 302 u32 ether_stats_pkts_1024to1518_octets; 303 304 /* Any frame length from 1519 to the maximum length configured in the 305 * frm_length register, if it is greater than 1518 306 */ 307 u32 ether_stats_pkts_1519tox_octets; 308 /* Too long frames with CRC error */ 309 u32 ether_stats_jabbers; 310 /* Too short frames with CRC error */ 311 u32 ether_stats_fragments; 312 313 u32 reserved2; 314 315 /* FIFO control register */ 316 u32 tx_cmd_stat; 317 u32 rx_cmd_stat; 318 319 /* Extended Statistics Counters */ 320 u32 msb_octets_transmitted_ok; 321 u32 msb_octets_received_ok; 322 u32 msb_ether_stats_octets; 323 324 u32 reserved3; 325 326 /* Multicast address resolution table, mapped in the controller address 327 * space 328 */ 329 u32 hash_table[64]; 330 331 /* Registers 0 to 31 within PHY device 0/1 connected to the MDIO PHY 332 * management interface 333 */ 334 struct altera_tse_mdio mdio_phy0; 335 struct altera_tse_mdio mdio_phy1; 336 337 /* 4 Supplemental MAC Addresses */ 338 u32 supp_mac_addr_0_0; 339 u32 supp_mac_addr_0_1; 340 u32 supp_mac_addr_1_0; 341 u32 supp_mac_addr_1_1; 342 u32 supp_mac_addr_2_0; 343 u32 supp_mac_addr_2_1; 344 u32 supp_mac_addr_3_0; 345 u32 supp_mac_addr_3_1; 346 347 u32 reserved4[8]; 348 349 /* IEEE 1588v2 Feature */ 350 u32 tx_period; 351 u32 tx_adjust_fns; 352 u32 tx_adjust_ns; 353 u32 rx_period; 354 u32 rx_adjust_fns; 355 u32 rx_adjust_ns; 356 357 u32 reserved5[42]; 358}; 359 360/* Transmit and Receive Command Registers Bit Definitions 361 */ 362#define ALTERA_TSE_TX_CMD_STAT_OMIT_CRC BIT(17) 363#define ALTERA_TSE_TX_CMD_STAT_TX_SHIFT16 BIT(18) 364#define ALTERA_TSE_RX_CMD_STAT_RX_SHIFT16 BIT(25) 365 366/* Wrapper around a pointer to a socket buffer, 367 * so a DMA handle can be stored along with the buffer 368 */ 369struct tse_buffer { 370 struct list_head lh; 371 struct sk_buff *skb; 372 dma_addr_t dma_addr; 373 u32 len; 374 int mapped_as_page; 375}; 376 377struct altera_tse_private; 378 379#define ALTERA_DTYPE_SGDMA 1 380#define ALTERA_DTYPE_MSGDMA 2 381 382/* standard DMA interface for SGDMA and MSGDMA */ 383struct altera_dmaops { 384 int altera_dtype; 385 int dmamask; 386 void (*reset_dma)(struct altera_tse_private *); 387 void (*enable_txirq)(struct altera_tse_private *); 388 void (*enable_rxirq)(struct altera_tse_private *); 389 void (*disable_txirq)(struct altera_tse_private *); 390 void (*disable_rxirq)(struct altera_tse_private *); 391 void (*clear_txirq)(struct altera_tse_private *); 392 void (*clear_rxirq)(struct altera_tse_private *); 393 int (*tx_buffer)(struct altera_tse_private *, struct tse_buffer *); 394 u32 (*tx_completions)(struct altera_tse_private *); 395 void (*add_rx_desc)(struct altera_tse_private *, struct tse_buffer *); 396 u32 (*get_rx_status)(struct altera_tse_private *); 397 int (*init_dma)(struct altera_tse_private *); 398 void (*uninit_dma)(struct altera_tse_private *); 399 void (*start_rxdma)(struct altera_tse_private *); 400}; 401 402/* This structure is private to each device. 403 */ 404struct altera_tse_private { 405 struct net_device *dev; 406 struct device *device; 407 struct napi_struct napi; 408 409 /* MAC address space */ 410 struct altera_tse_mac __iomem *mac_dev; 411 412 /* TSE Revision */ 413 u32 revision; 414 415 /* mSGDMA Rx Dispatcher address space */ 416 void __iomem *rx_dma_csr; 417 void __iomem *rx_dma_desc; 418 void __iomem *rx_dma_resp; 419 420 /* mSGDMA Tx Dispatcher address space */ 421 void __iomem *tx_dma_csr; 422 void __iomem *tx_dma_desc; 423 424 /* Rx buffers queue */ 425 struct tse_buffer *rx_ring; 426 u32 rx_cons; 427 u32 rx_prod; 428 u32 rx_ring_size; 429 u32 rx_dma_buf_sz; 430 431 /* Tx ring buffer */ 432 struct tse_buffer *tx_ring; 433 u32 tx_prod; 434 u32 tx_cons; 435 u32 tx_ring_size; 436 437 /* Interrupts */ 438 u32 tx_irq; 439 u32 rx_irq; 440 441 /* RX/TX MAC FIFO configs */ 442 u32 tx_fifo_depth; 443 u32 rx_fifo_depth; 444 u32 max_mtu; 445 446 /* Hash filter settings */ 447 u32 hash_filter; 448 u32 added_unicast; 449 450 /* Descriptor memory info for managing SGDMA */ 451 u32 txdescmem; 452 u32 rxdescmem; 453 dma_addr_t rxdescmem_busaddr; 454 dma_addr_t txdescmem_busaddr; 455 u32 txctrlreg; 456 u32 rxctrlreg; 457 dma_addr_t rxdescphys; 458 dma_addr_t txdescphys; 459 size_t sgdmadesclen; 460 461 struct list_head txlisthd; 462 struct list_head rxlisthd; 463 464 /* MAC command_config register protection */ 465 spinlock_t mac_cfg_lock; 466 /* Tx path protection */ 467 spinlock_t tx_lock; 468 /* Rx DMA & interrupt control protection */ 469 spinlock_t rxdma_irq_lock; 470 471 /* PHY */ 472 int phy_addr; /* PHY's MDIO address, -1 for autodetection */ 473 phy_interface_t phy_iface; 474 struct mii_bus *mdio; 475 struct phy_device *phydev; 476 int oldspeed; 477 int oldduplex; 478 int oldlink; 479 480 /* ethtool msglvl option */ 481 u32 msg_enable; 482 483 struct altera_dmaops *dmaops; 484}; 485 486/* Function prototypes 487 */ 488void altera_tse_set_ethtool_ops(struct net_device *); 489 490#endif /* __ALTERA_TSE_H__ */ 491