1 /* 2 * Copyright 2008-2012 Freescale Semiconductor Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution. 11 * * Neither the name of Freescale Semiconductor nor the 12 * names of its contributors may be used to endorse or promote products 13 * derived from this software without specific prior written permission. 14 * 15 * 16 * ALTERNATIVELY, this software may be distributed under the terms of the 17 * GNU General Public License ("GPL") as published by the Free Software 18 * Foundation, either version 2 of that License or (at your option) any 19 * later version. 20 * 21 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #ifndef __FSL_FMAN_TGEC_H 34 #define __FSL_FMAN_TGEC_H 35 36 #include "common/general.h" 37 #include "fsl_enet.h" 38 39 40 /* Transmit Inter-Packet Gap Length Register (TX_IPG_LENGTH) */ 41 #define TGEC_TX_IPG_LENGTH_MASK 0x000003ff 42 43 enum tgec_counters { 44 E_TGEC_COUNTER_R64, 45 E_TGEC_COUNTER_R127, 46 E_TGEC_COUNTER_R255, 47 E_TGEC_COUNTER_R511, 48 E_TGEC_COUNTER_R1023, 49 E_TGEC_COUNTER_R1518, 50 E_TGEC_COUNTER_R1519X, 51 E_TGEC_COUNTER_TRFRG, 52 E_TGEC_COUNTER_TRJBR, 53 E_TGEC_COUNTER_RDRP, 54 E_TGEC_COUNTER_RALN, 55 E_TGEC_COUNTER_TRUND, 56 E_TGEC_COUNTER_TROVR, 57 E_TGEC_COUNTER_RXPF, 58 E_TGEC_COUNTER_TXPF, 59 E_TGEC_COUNTER_ROCT, 60 E_TGEC_COUNTER_RMCA, 61 E_TGEC_COUNTER_RBCA, 62 E_TGEC_COUNTER_RPKT, 63 E_TGEC_COUNTER_RUCA, 64 E_TGEC_COUNTER_RERR, 65 E_TGEC_COUNTER_TOCT, 66 E_TGEC_COUNTER_TMCA, 67 E_TGEC_COUNTER_TBCA, 68 E_TGEC_COUNTER_TUCA, 69 E_TGEC_COUNTER_TERR 70 }; 71 72 /* Command and Configuration Register (COMMAND_CONFIG) */ 73 #define CMD_CFG_EN_TIMESTAMP 0x00100000 74 #define CMD_CFG_TX_ADDR_INS_SEL 0x00080000 75 #define CMD_CFG_NO_LEN_CHK 0x00020000 76 #define CMD_CFG_SEND_IDLE 0x00010000 77 #define CMD_CFG_RX_ER_DISC 0x00004000 78 #define CMD_CFG_CMD_FRM_EN 0x00002000 79 #define CMD_CFG_STAT_CLR 0x00001000 80 #define CMD_CFG_LOOPBACK_EN 0x00000400 81 #define CMD_CFG_TX_ADDR_INS 0x00000200 82 #define CMD_CFG_PAUSE_IGNORE 0x00000100 83 #define CMD_CFG_PAUSE_FWD 0x00000080 84 #define CMD_CFG_PROMIS_EN 0x00000010 85 #define CMD_CFG_WAN_MODE 0x00000008 86 #define CMD_CFG_RX_EN 0x00000002 87 #define CMD_CFG_TX_EN 0x00000001 88 89 /* Interrupt Mask Register (IMASK) */ 90 #define TGEC_IMASK_MDIO_SCAN_EVENT 0x00010000 91 #define TGEC_IMASK_MDIO_CMD_CMPL 0x00008000 92 #define TGEC_IMASK_REM_FAULT 0x00004000 93 #define TGEC_IMASK_LOC_FAULT 0x00002000 94 #define TGEC_IMASK_TX_ECC_ER 0x00001000 95 #define TGEC_IMASK_TX_FIFO_UNFL 0x00000800 96 #define TGEC_IMASK_TX_FIFO_OVFL 0x00000400 97 #define TGEC_IMASK_TX_ER 0x00000200 98 #define TGEC_IMASK_RX_FIFO_OVFL 0x00000100 99 #define TGEC_IMASK_RX_ECC_ER 0x00000080 100 #define TGEC_IMASK_RX_JAB_FRM 0x00000040 101 #define TGEC_IMASK_RX_OVRSZ_FRM 0x00000020 102 #define TGEC_IMASK_RX_RUNT_FRM 0x00000010 103 #define TGEC_IMASK_RX_FRAG_FRM 0x00000008 104 #define TGEC_IMASK_RX_LEN_ER 0x00000004 105 #define TGEC_IMASK_RX_CRC_ER 0x00000002 106 #define TGEC_IMASK_RX_ALIGN_ER 0x00000001 107 108 #define TGEC_EVENTS_MASK \ 109 ((uint32_t)(TGEC_IMASK_MDIO_SCAN_EVENT | \ 110 TGEC_IMASK_MDIO_CMD_CMPL | \ 111 TGEC_IMASK_REM_FAULT | \ 112 TGEC_IMASK_LOC_FAULT | \ 113 TGEC_IMASK_TX_ECC_ER | \ 114 TGEC_IMASK_TX_FIFO_UNFL | \ 115 TGEC_IMASK_TX_FIFO_OVFL | \ 116 TGEC_IMASK_TX_ER | \ 117 TGEC_IMASK_RX_FIFO_OVFL | \ 118 TGEC_IMASK_RX_ECC_ER | \ 119 TGEC_IMASK_RX_JAB_FRM | \ 120 TGEC_IMASK_RX_OVRSZ_FRM | \ 121 TGEC_IMASK_RX_RUNT_FRM | \ 122 TGEC_IMASK_RX_FRAG_FRM | \ 123 TGEC_IMASK_RX_LEN_ER | \ 124 TGEC_IMASK_RX_CRC_ER | \ 125 TGEC_IMASK_RX_ALIGN_ER)) 126 127 /* Hashtable Control Register (HASHTABLE_CTRL) */ 128 #define TGEC_HASH_MCAST_SHIFT 23 129 #define TGEC_HASH_MCAST_EN 0x00000200 130 #define TGEC_HASH_ADR_MSK 0x000001ff 131 132 #define DEFAULT_WAN_MODE_ENABLE FALSE 133 #define DEFAULT_PROMISCUOUS_MODE_ENABLE FALSE 134 #define DEFAULT_PAUSE_FORWARD_ENABLE FALSE 135 #define DEFAULT_PAUSE_IGNORE FALSE 136 #define DEFAULT_TX_ADDR_INS_ENABLE FALSE 137 #define DEFAULT_LOOPBACK_ENABLE FALSE 138 #define DEFAULT_CMD_FRAME_ENABLE FALSE 139 #define DEFAULT_RX_ERROR_DISCARD FALSE 140 #define DEFAULT_SEND_IDLE_ENABLE FALSE 141 #define DEFAULT_NO_LENGTH_CHECK_ENABLE TRUE 142 #define DEFAULT_LGTH_CHECK_NOSTDR FALSE 143 #define DEFAULT_TIME_STAMP_ENABLE FALSE 144 #define DEFAULT_TX_IPG_LENGTH 12 145 #define DEFAULT_MAX_FRAME_LENGTH 0x600 146 #define DEFAULT_PAUSE_QUANT 0xf000 147 148 /* 149 * 10G memory map 150 */ 151 struct tgec_regs { 152 uint32_t tgec_id; /* 0x000 Controller ID */ 153 uint32_t reserved001[1]; /* 0x004 */ 154 uint32_t command_config; /* 0x008 Control and configuration */ 155 uint32_t mac_addr_0; /* 0x00c Lower 32 bits of the MAC adr */ 156 uint32_t mac_addr_1; /* 0x010 Upper 16 bits of the MAC adr */ 157 uint32_t maxfrm; /* 0x014 Maximum frame length */ 158 uint32_t pause_quant; /* 0x018 Pause quanta */ 159 uint32_t rx_fifo_sections; /* 0x01c */ 160 uint32_t tx_fifo_sections; /* 0x020 */ 161 uint32_t rx_fifo_almost_f_e; /* 0x024 */ 162 uint32_t tx_fifo_almost_f_e; /* 0x028 */ 163 uint32_t hashtable_ctrl; /* 0x02c Hash table control*/ 164 uint32_t mdio_cfg_status; /* 0x030 */ 165 uint32_t mdio_command; /* 0x034 */ 166 uint32_t mdio_data; /* 0x038 */ 167 uint32_t mdio_regaddr; /* 0x03c */ 168 uint32_t status; /* 0x040 */ 169 uint32_t tx_ipg_len; /* 0x044 Transmitter inter-packet-gap */ 170 uint32_t mac_addr_2; /* 0x048 Lower 32 bits of 2nd MAC adr */ 171 uint32_t mac_addr_3; /* 0x04c Upper 16 bits of 2nd MAC adr */ 172 uint32_t rx_fifo_ptr_rd; /* 0x050 */ 173 uint32_t rx_fifo_ptr_wr; /* 0x054 */ 174 uint32_t tx_fifo_ptr_rd; /* 0x058 */ 175 uint32_t tx_fifo_ptr_wr; /* 0x05c */ 176 uint32_t imask; /* 0x060 Interrupt mask */ 177 uint32_t ievent; /* 0x064 Interrupt event */ 178 uint32_t udp_port; /* 0x068 Defines a UDP Port number */ 179 uint32_t type_1588v2; /* 0x06c Type field for 1588v2 */ 180 uint32_t reserved070[4]; /* 0x070 */ 181 /*10Ge Statistics Counter */ 182 uint32_t tfrm_u; /* 80 aFramesTransmittedOK */ 183 uint32_t tfrm_l; /* 84 aFramesTransmittedOK */ 184 uint32_t rfrm_u; /* 88 aFramesReceivedOK */ 185 uint32_t rfrm_l; /* 8c aFramesReceivedOK */ 186 uint32_t rfcs_u; /* 90 aFrameCheckSequenceErrors */ 187 uint32_t rfcs_l; /* 94 aFrameCheckSequenceErrors */ 188 uint32_t raln_u; /* 98 aAlignmentErrors */ 189 uint32_t raln_l; /* 9c aAlignmentErrors */ 190 uint32_t txpf_u; /* A0 aPAUSEMACCtrlFramesTransmitted */ 191 uint32_t txpf_l; /* A4 aPAUSEMACCtrlFramesTransmitted */ 192 uint32_t rxpf_u; /* A8 aPAUSEMACCtrlFramesReceived */ 193 uint32_t rxpf_l; /* Ac aPAUSEMACCtrlFramesReceived */ 194 uint32_t rlong_u; /* B0 aFrameTooLongErrors */ 195 uint32_t rlong_l; /* B4 aFrameTooLongErrors */ 196 uint32_t rflr_u; /* B8 aInRangeLengthErrors */ 197 uint32_t rflr_l; /* Bc aInRangeLengthErrors */ 198 uint32_t tvlan_u; /* C0 VLANTransmittedOK */ 199 uint32_t tvlan_l; /* C4 VLANTransmittedOK */ 200 uint32_t rvlan_u; /* C8 VLANReceivedOK */ 201 uint32_t rvlan_l; /* Cc VLANReceivedOK */ 202 uint32_t toct_u; /* D0 ifOutOctets */ 203 uint32_t toct_l; /* D4 ifOutOctets */ 204 uint32_t roct_u; /* D8 ifInOctets */ 205 uint32_t roct_l; /* Dc ifInOctets */ 206 uint32_t ruca_u; /* E0 ifInUcastPkts */ 207 uint32_t ruca_l; /* E4 ifInUcastPkts */ 208 uint32_t rmca_u; /* E8 ifInMulticastPkts */ 209 uint32_t rmca_l; /* Ec ifInMulticastPkts */ 210 uint32_t rbca_u; /* F0 ifInBroadcastPkts */ 211 uint32_t rbca_l; /* F4 ifInBroadcastPkts */ 212 uint32_t terr_u; /* F8 ifOutErrors */ 213 uint32_t terr_l; /* Fc ifOutErrors */ 214 uint32_t reserved100[2]; /* 100-108*/ 215 uint32_t tuca_u; /* 108 ifOutUcastPkts */ 216 uint32_t tuca_l; /* 10c ifOutUcastPkts */ 217 uint32_t tmca_u; /* 110 ifOutMulticastPkts */ 218 uint32_t tmca_l; /* 114 ifOutMulticastPkts */ 219 uint32_t tbca_u; /* 118 ifOutBroadcastPkts */ 220 uint32_t tbca_l; /* 11c ifOutBroadcastPkts */ 221 uint32_t rdrp_u; /* 120 etherStatsDropEvents */ 222 uint32_t rdrp_l; /* 124 etherStatsDropEvents */ 223 uint32_t reoct_u; /* 128 etherStatsOctets */ 224 uint32_t reoct_l; /* 12c etherStatsOctets */ 225 uint32_t rpkt_u; /* 130 etherStatsPkts */ 226 uint32_t rpkt_l; /* 134 etherStatsPkts */ 227 uint32_t trund_u; /* 138 etherStatsUndersizePkts */ 228 uint32_t trund_l; /* 13c etherStatsUndersizePkts */ 229 uint32_t r64_u; /* 140 etherStatsPkts64Octets */ 230 uint32_t r64_l; /* 144 etherStatsPkts64Octets */ 231 uint32_t r127_u; /* 148 etherStatsPkts65to127Octets */ 232 uint32_t r127_l; /* 14c etherStatsPkts65to127Octets */ 233 uint32_t r255_u; /* 150 etherStatsPkts128to255Octets */ 234 uint32_t r255_l; /* 154 etherStatsPkts128to255Octets */ 235 uint32_t r511_u; /* 158 etherStatsPkts256to511Octets */ 236 uint32_t r511_l; /* 15c etherStatsPkts256to511Octets */ 237 uint32_t r1023_u; /* 160 etherStatsPkts512to1023Octets */ 238 uint32_t r1023_l; /* 164 etherStatsPkts512to1023Octets */ 239 uint32_t r1518_u; /* 168 etherStatsPkts1024to1518Octets */ 240 uint32_t r1518_l; /* 16c etherStatsPkts1024to1518Octets */ 241 uint32_t r1519x_u; /* 170 etherStatsPkts1519toX */ 242 uint32_t r1519x_l; /* 174 etherStatsPkts1519toX */ 243 uint32_t trovr_u; /* 178 etherStatsOversizePkts */ 244 uint32_t trovr_l; /* 17c etherStatsOversizePkts */ 245 uint32_t trjbr_u; /* 180 etherStatsJabbers */ 246 uint32_t trjbr_l; /* 184 etherStatsJabbers */ 247 uint32_t trfrg_u; /* 188 etherStatsFragments */ 248 uint32_t trfrg_l; /* 18C etherStatsFragments */ 249 uint32_t rerr_u; /* 190 ifInErrors */ 250 uint32_t rerr_l; /* 194 ifInErrors */ 251 }; 252 253 /** 254 * struct tgec_cfg - TGEC configuration 255 * 256 * @rx_error_discard: Receive Erroneous Frame Discard Enable. When set to 1 257 * any frame received with an error is discarded in the 258 * Core and not forwarded to the Client interface. 259 * When set to 0 (Reset value), erroneous Frames are 260 * forwarded to the Client interface with ff_rx_err 261 * asserted. 262 * @pause_ignore: Ignore Pause Frame Quanta. If set to 1 received pause 263 * frames are ignored by the MAC. When set to 0 264 * (Reset value) the transmit process is stopped for the 265 * amount of time specified in the pause quanta received 266 * within a pause frame. 267 * @pause_forward_enable: 268 * Terminate / Forward Pause Frames. If set to 1 pause 269 * frames are forwarded to the user application. When set 270 * to 0 (Reset value) pause frames are terminated and 271 * discarded within the MAC. 272 * @no_length_check_enable: 273 * Payload Length Check Disable. When set to 0 274 * (Reset value), the Core checks the frame's payload 275 * length with the Frame Length/Type field, when set to 1 276 * the payload length check is disabled. 277 * @cmd_frame_enable: Enables reception of all command frames. When set to 1 278 * all Command Frames are accepted, when set to 0 279 * (Reset Value) only Pause Frames are accepted and all 280 * other Command Frames are rejected. 281 * @send_idle_enable: Force Idle Generation. When set to 1, the MAC 282 * permanently sends XGMII Idle sequences even when faults 283 * are received. 284 * @wan_mode_enable: WAN Mode Enable. Sets WAN mode (1) or LAN mode 285 * (0, default) of operation. 286 * @promiscuous_mode_enable: 287 * Enables MAC promiscuous operation. When set to 1, all 288 * frames are received without any MAC address filtering, 289 * when set to 0 (Reset value) Unicast Frames with a 290 * destination address not matching the Core MAC Address 291 * (MAC Address programmed in Registers MAC_ADDR_0 and 292 * MAC_ADDR_1 or the MAC address programmed in Registers 293 * MAC_ADDR_2 and MAC_ADDR_3) are rejected. 294 * @tx_addr_ins_enable: Set Source MAC Address on Transmit. If set to 1 the 295 * MAC overwrites the source MAC address received from the 296 * Client Interface with one of the MAC addresses. If set 297 * to 0 (Reset value), the source MAC address from the 298 * Client Interface is transmitted unmodified to the line. 299 * @loopback_enable: PHY Interface Loopback. When set to 1, the signal 300 * loop_ena is set to '1', when set to 0 (Reset value) 301 * the signal loop_ena is set to 0. 302 * @lgth_check_nostdr: The Core interprets the Length/Type field differently 303 * depending on the value of this Bit 304 * @time_stamp_enable: This bit selects between enabling and disabling the 305 * IEEE 1588 functionality. 1: IEEE 1588 is enabled 306 * 0: IEEE 1588 is disabled 307 * @max_frame_length: Maximum supported received frame length. 308 * The 10GEC MAC supports reception of any frame size up 309 * to 16,352 bytes (0x3FE0). Typical settings are 310 * 0x05EE (1,518 bytes) for standard frames. 311 * Default setting is 0x0600 (1,536 bytes). 312 * Received frames that exceed this stated maximum 313 * are truncated. 314 * @pause_quant: Pause quanta value used with transmitted pause frames. 315 * Each quanta represents a 512 bit-times. 316 * @tx_ipg_length: Transmit Inter-Packet-Gap (IPG) value. A 6-bit value: 317 * Depending on LAN or WAN mode of operation the value has 318 * the following meaning: - LAN Mode: Number of octets in 319 * steps of 4. Valid values are 8, 12, 16, ... 100. DIC is 320 * fully supported (see 10.6.1 page 49) for any setting. A 321 * default of 12 (reset value) must be set to conform to 322 * IEEE802.3ae. Warning: When set to 8, PCS layers may not 323 * be able to perform clock rate compensation. - WAN Mode: 324 * Stretch factor. Valid values are 4..15. The stretch 325 * factor is calculated as (value+1)*8. A default of 12 326 * (reset value) must be set to conform to IEEE 802.3ae 327 * (i.e. 13*8=104). A larger value shrinks the IPG 328 * (increasing bandwidth). 329 * 330 * This structure contains basic TGEC configuration and must be passed to 331 * fman_tgec_init() function. A default set of configuration values can be 332 * obtained by calling fman_tgec_defconfig(). 333 */ 334 struct tgec_cfg { 335 bool rx_error_discard; 336 bool pause_ignore; 337 bool pause_forward_enable; 338 bool no_length_check_enable; 339 bool cmd_frame_enable; 340 bool send_idle_enable; 341 bool wan_mode_enable; 342 bool promiscuous_mode_enable; 343 bool tx_addr_ins_enable; 344 bool loopback_enable; 345 bool lgth_check_nostdr; 346 bool time_stamp_enable; 347 uint16_t max_frame_length; 348 uint16_t pause_quant; 349 uint32_t tx_ipg_length; 350 bool skip_fman11_workaround; 351 }; 352 353 354 void fman_tgec_defconfig(struct tgec_cfg *cfg); 355 356 /** 357 * fman_tgec_init() - Init tgec hardware block 358 * @regs: Pointer to tgec register block 359 * @cfg: tgec configuration data 360 * @exceptions_mask: initial exceptions mask 361 * 362 * This function initializes the tgec controller and applies its 363 * basic configuration. 364 * 365 * Returns: 0 if successful, an error code otherwise. 366 */ 367 368 int fman_tgec_init(struct tgec_regs *regs, struct tgec_cfg *cfg, 369 uint32_t exception_mask); 370 371 void fman_tgec_enable(struct tgec_regs *regs, bool apply_rx, bool apply_tx); 372 373 void fman_tgec_disable(struct tgec_regs *regs, bool apply_rx, bool apply_tx); 374 375 uint32_t fman_tgec_get_revision(struct tgec_regs *regs); 376 377 void fman_tgec_set_mac_address(struct tgec_regs *regs, uint8_t *macaddr); 378 379 void fman_tgec_set_promiscuous(struct tgec_regs *regs, bool val); 380 381 /** 382 * fman_tgec_reset_stat() - Completely resets all TGEC HW counters 383 * @regs: Pointer to TGEC register block 384 */ 385 void fman_tgec_reset_stat(struct tgec_regs *regs); 386 387 /** 388 * fman_tgec_get_counter() - Reads TGEC HW counters 389 * @regs: Pointer to TGEC register block 390 * @reg_name: Counter name according to the appropriate enum 391 * 392 * Returns: Required counter value 393 */ 394 uint64_t fman_tgec_get_counter(struct tgec_regs *regs, 395 enum tgec_counters reg_name); 396 397 /** 398 * fman_tgec_set_hash_table() - Sets the Hashtable Control Register 399 * @regs: Pointer to TGEC register block 400 * @value: Value to be written in Hashtable Control Register 401 */ 402 void fman_tgec_set_hash_table(struct tgec_regs *regs, uint32_t value); 403 404 /** 405 * fman_tgec_set_tx_pause_frames() - Sets the Pause Quanta Register 406 * @regs: Pointer to TGEC register block 407 * @pause_time: Pause quanta value used with transmitted pause frames. 408 * Each quanta represents a 512 bit-times 409 */ 410 void fman_tgec_set_tx_pause_frames(struct tgec_regs *regs, uint16_t pause_time); 411 412 /** 413 * fman_tgec_set_rx_ignore_pause_frames() - Changes the policy WRT pause frames 414 * @regs: Pointer to TGEC register block 415 * @en: Ignore/Respond to pause frame quanta 416 * 417 * Sets the value of PAUSE_IGNORE field in the COMMAND_CONFIG Register 418 * 0 - MAC stops transmit process for the duration specified 419 * in the Pause frame quanta of a received Pause frame. 420 * 1 - MAC ignores received Pause frames. 421 */ 422 void fman_tgec_set_rx_ignore_pause_frames(struct tgec_regs *regs, bool en); 423 424 /** 425 * fman_tgec_enable_1588_time_stamp() - change timestamp functionality 426 * @regs: Pointer to TGEC register block 427 * @en: enable/disable timestamp functionality 428 * 429 * Sets the value of EN_TIMESTAMP field in the COMMAND_CONFIG Register 430 * IEEE 1588 timestamp functionality control: 431 * 0 disabled, 1 enabled 432 */ 433 434 void fman_tgec_enable_1588_time_stamp(struct tgec_regs *regs, bool en); 435 436 uint32_t fman_tgec_get_event(struct tgec_regs *regs, uint32_t ev_mask); 437 438 void fman_tgec_ack_event(struct tgec_regs *regs, uint32_t ev_mask); 439 440 uint32_t fman_tgec_get_interrupt_mask(struct tgec_regs *regs); 441 442 /** 443 * fman_tgec_add_addr_in_paddr() - Sets additional exact match MAC address 444 * @regs: Pointer to TGEC register block 445 * @addr_ptr: Pointer to 6-byte array containing the MAC address 446 * 447 * Sets the additional station MAC address 448 */ 449 void fman_tgec_add_addr_in_paddr(struct tgec_regs *regs, uint8_t *addr_ptr); 450 451 void fman_tgec_clear_addr_in_paddr(struct tgec_regs *regs); 452 453 void fman_tgec_enable_interrupt(struct tgec_regs *regs, uint32_t ev_mask); 454 455 void fman_tgec_disable_interrupt(struct tgec_regs *regs, uint32_t ev_mask); 456 457 void fman_tgec_reset_filter_table(struct tgec_regs *regs); 458 459 void fman_tgec_set_hash_table_entry(struct tgec_regs *regs, uint32_t crc); 460 461 462 /** 463 * fman_tgec_get_max_frame_len() - Returns the maximum frame length value 464 * @regs: Pointer to TGEC register block 465 */ 466 uint16_t fman_tgec_get_max_frame_len(struct tgec_regs *regs); 467 468 /** 469 * fman_tgec_set_erratum_tx_fifo_corruption_10gmac_a007() - Initialize the 470 * main tgec configuration parameters 471 * @regs: Pointer to TGEC register block 472 * 473 * TODO 474 */ 475 void fman_tgec_set_erratum_tx_fifo_corruption_10gmac_a007(struct tgec_regs 476 *regs); 477 478 479 #endif /* __FSL_FMAN_TGEC_H */ 480