1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _HXGE_VMAC_HW_H 27 #define _HXGE_VMAC_HW_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #define VMAC_BASE_ADDR 0X00100000 36 37 #define VMAC_RST (VMAC_BASE_ADDR + 0x0) 38 #define VMAC_TX_CFG (VMAC_BASE_ADDR + 0x8) 39 #define VMAC_RX_CFG (VMAC_BASE_ADDR + 0x10) 40 #define VMAC_TX_STAT (VMAC_BASE_ADDR + 0x20) 41 #define VMAC_TX_MSK (VMAC_BASE_ADDR + 0x28) 42 #define VMAC_RX_STAT (VMAC_BASE_ADDR + 0x30) 43 #define VMAC_RX_MSK (VMAC_BASE_ADDR + 0x38) 44 #define VMAC_TX_STAT_MIRROR (VMAC_BASE_ADDR + 0x40) 45 #define VMAC_RX_STAT_MIRROR (VMAC_BASE_ADDR + 0x48) 46 #define VMAC_TX_FRAME_CNT (VMAC_BASE_ADDR + 0x100) 47 #define VMAC_TX_BYTE_CNT (VMAC_BASE_ADDR + 0x108) 48 #define VMAC_RX_FRAME_CNT (VMAC_BASE_ADDR + 0x120) 49 #define VMAC_RX_BYTE_CNT (VMAC_BASE_ADDR + 0x128) 50 #define VMAC_RX_DROP_FR_CNT (VMAC_BASE_ADDR + 0x130) 51 #define VMAC_RX_DROP_BYTE_CNT (VMAC_BASE_ADDR + 0x138) 52 #define VMAC_RX_CRC_CNT (VMAC_BASE_ADDR + 0x140) 53 #define VMAC_RX_PAUSE_CNT (VMAC_BASE_ADDR + 0x148) 54 #define VMAC_RX_BCAST_FR_CNT (VMAC_BASE_ADDR + 0x150) 55 #define VMAC_RX_MCAST_FR_CNT (VMAC_BASE_ADDR + 0x158) 56 57 58 /* 59 * Register: VmacRst 60 * VMAC Software Reset Command 61 * Description: 62 * Fields: 63 * Write a '1' to reset Rx VMAC; auto clears. This brings rx vmac 64 * to power on reset state. 65 * Write a '1' to reset Tx VMAC; auto clears. This brings tx vmac 66 * to power on reset state. 67 */ 68 typedef union { 69 uint64_t value; 70 struct { 71 #if defined(_BIG_ENDIAN) 72 uint64_t rsrvd:55; 73 uint64_t rx_reset:1; 74 uint64_t rsrvd1:7; 75 uint64_t tx_reset:1; 76 #else 77 uint64_t tx_reset:1; 78 uint64_t rsrvd1:7; 79 uint64_t rx_reset:1; 80 uint64_t rsrvd:55; 81 #endif 82 } bits; 83 } vmac_rst_t; 84 85 86 /* 87 * Register: VmacTxCfg 88 * Tx VMAC Configuration 89 * Description: 90 * Fields: 91 * Maximum length of any total transfer gathered by Tx VMAC, 92 * including packet data, header, crc, transmit header and any 93 * pad bytes. Default value of 0x2422 represents 9220 bytes of 94 * packet data, ethernet header, and crc, 14 bytes maximum pad, 95 * and 16 bytes transmit header = 9250 (0x2422). 96 * Enable padding of short packet to meet minimum frame length of 97 * 64 bytes. Software should note that if txPad functionality is 98 * used to pad runt packets to minimum length, that crcInsert 99 * functionality (below) must also be used to provide the packet 100 * with correct L2 crc. 101 * 1: Enable generation and appending of FCS to the packets. 0: 102 * Disable generation and appending of FCS to the packets. 103 * Enable Tx VMAC. Write a '1' to enable Tx VMAC; write a '0' to 104 * disable it. This bit also propagates as vmacTdcEn to the TDC 105 * block. In TDC, the vmacTdcEn bit disables the RTab state 106 * machine. Hence, the transmission from that blade would be 107 * stopped and be queued, but no packets would be dropped. Thus, 108 * the VMAC can only be enabled/disabled at packet boundary. The 109 * VMAC will not send out portion of a packet. The currently 110 * processed packet will continue to be sent out when Tx VMAC is 111 * disabled. 112 */ 113 typedef union { 114 uint64_t value; 115 struct { 116 #if defined(_BIG_ENDIAN) 117 uint64_t rsrvd:32; 118 uint64_t tx_max_frame_length:14; 119 uint64_t rsrvd1:15; 120 uint64_t tx_pad:1; 121 uint64_t crc_insert:1; 122 uint64_t tx_en:1; 123 #else 124 uint64_t tx_en:1; 125 uint64_t crc_insert:1; 126 uint64_t tx_pad:1; 127 uint64_t rsrvd1:15; 128 uint64_t tx_max_frame_length:14; 129 uint64_t rsrvd:32; 130 #endif 131 } bits; 132 } vmac_tx_cfg_t; 133 134 135 /* 136 * Register: VmacRxCfg 137 * Rx VMAC Configuration 138 * Description: MAC address and length in Type/Length field are 139 * checked in PFC. 140 * Fields: 141 * Maximum length of a frame accepted by Rx/Tx VMAC. Only packets 142 * with length between 64 bytes and maxFrameLength will be 143 * accepted by Rx/Tx VMAC. This length indicates just the packet 144 * length excluding the packet header, crc, and any pad bytes. 145 * Maximum value is 9K (9*1024) 146 * enable packets from the same blade to loopback 147 * Enable acceptance of all Unicast packets for L2 destination 148 * address, ie, allow all Unicast packets to pass the L2 149 * filtering. 150 * Enable acceptance of all multi-cast packets, ie, allow all 151 * multi-cast packets to pass the L2 filtering. 152 * Enable the passing through of flow control frames. 153 * Enable the stripping of FCS field in the packets. 154 * Disable of FCS checking. When enable, packets with incorrect 155 * FCS value are dropped by Rx VMAC. 156 * Enable rx VMAC. Write a '1' to enable rx VMAC; write a '0' to 157 * disable it. The VMAC will begin to accept packet at the 158 * detection of the SOP (start of packet). When disable, the 159 * currently processed packet will continue to be accepted. 160 */ 161 typedef union { 162 uint64_t value; 163 struct { 164 #if defined(_BIG_ENDIAN) 165 uint64_t rsrvd:32; 166 uint64_t rx_max_frame_length:14; 167 uint64_t reserved:11; 168 uint64_t loopback:1; 169 uint64_t promiscuous_mode:1; 170 uint64_t promiscuous_group:1; 171 uint64_t pass_flow_ctrl_fr:1; 172 uint64_t strip_crc:1; 173 uint64_t crc_check_disable:1; 174 uint64_t rx_en:1; 175 #else 176 uint64_t rx_en:1; 177 uint64_t crc_check_disable:1; 178 uint64_t strip_crc:1; 179 uint64_t pass_flow_ctrl_fr:1; 180 uint64_t promiscuous_group:1; 181 uint64_t promiscuous_mode:1; 182 uint64_t loopback:1; 183 uint64_t reserved:11; 184 uint64_t rx_max_frame_length:14; 185 uint64_t rsrvd:32; 186 #endif 187 } bits; 188 } vmac_rx_cfg_t; 189 190 191 /* 192 * Register: VmacTxStat 193 * Tx VMAC Status Register 194 * Description: A new interrupt will be generated only if Tx VMAC is 195 * enabled by vmacTxCfg::txEn=1. Disabling Tx VMAC does not affect 196 * currently-existing Ldf state. Writing this register affects 197 * vmacTxStatMirror register bits also the same way. 198 * Fields: 199 * Indicates that counter of byte transmitted has exceeded the 200 * max value. 201 * Indicates that counter of frame transmitted has exceeded the 202 * max value. 203 * A frame has been successfully transmitted. 204 */ 205 typedef union { 206 uint64_t value; 207 struct { 208 #if defined(_BIG_ENDIAN) 209 uint64_t rsrvd:61; 210 uint64_t tx_byte_cnt_overflow:1; 211 uint64_t tx_frame_cnt_overflow:1; 212 uint64_t frame_tx:1; 213 #else 214 uint64_t frame_tx:1; 215 uint64_t tx_frame_cnt_overflow:1; 216 uint64_t tx_byte_cnt_overflow:1; 217 uint64_t rsrvd:61; 218 #endif 219 } bits; 220 } vmac_tx_stat_t; 221 222 223 /* 224 * Register: VmacTxMsk 225 * Tx VMAC Status Mask 226 * Description: masking vmacTxStat from interrupt. 227 * Fields: 228 * 1: mask interrupt due to overflow of counter of byte 229 * transmitted 230 * 1: mask interrupt due to overflow of counter of frame 231 * transmitted 232 * 1: mask interrupt due to successful transmition of frame. 233 */ 234 typedef union { 235 uint64_t value; 236 struct { 237 #if defined(_BIG_ENDIAN) 238 uint64_t rsrvd:61; 239 uint64_t tx_byte_cnt_overflow_msk:1; 240 uint64_t tx_frame_cnt_overflow_msk:1; 241 uint64_t frame_tx_msk:1; 242 #else 243 uint64_t frame_tx_msk:1; 244 uint64_t tx_frame_cnt_overflow_msk:1; 245 uint64_t tx_byte_cnt_overflow_msk:1; 246 uint64_t rsrvd:61; 247 #endif 248 } bits; 249 } vmac_tx_msk_t; 250 251 252 /* 253 * Register: VmacRxStat 254 * Rx VMAC Status Register 255 * Description: Overflow indicators are read-only registers; Read off 256 * the counters to clear. A new interrupt will be generated only if 257 * Rx VMAC is enabled by vmacRxCfg::rxEn=1. Disabling Rx VMAC does 258 * not affect currently-existing Ldf state. Writing this register 259 * affects vmacRxStatMirror register bits also the same way. 260 * Fields: 261 * Indicates that the counter for broadcast packets has exceeded 262 * the max value. 263 * Indicates that the counter for multicast packets has exceeded 264 * the max value. 265 * Indicates that the counter for pause packets has exceeded the 266 * max value. 267 * Indicates that the counter for packets with mismatched FCS has 268 * exceeded the max value. 269 * Indicates that counter of dropped byte has exceeded the max 270 * value. 271 * Indicates that counter of dropped frame has exceeded the max 272 * value. 273 * Indicates that counter of byte received has exceeded the max 274 * value. 275 * Indicates that counter of frame received has exceeded the max 276 * value. 277 * A valid frame has been successfully received. 278 */ 279 typedef union { 280 uint64_t value; 281 struct { 282 #if defined(_BIG_ENDIAN) 283 uint64_t rsrvd:55; 284 uint64_t bcast_cnt_overflow:1; 285 uint64_t mcast_cnt_overflow:1; 286 uint64_t pause_cnt_overflow:1; 287 uint64_t crc_err_cnt_overflow:1; 288 uint64_t rx_drop_byte_cnt_overflow:1; 289 uint64_t rx_drop_frame_cnt_overflow:1; 290 uint64_t rx_byte_cnt_overflow:1; 291 uint64_t rx_frame_cnt_overflow:1; 292 uint64_t frame_rx:1; 293 #else 294 uint64_t frame_rx:1; 295 uint64_t rx_frame_cnt_overflow:1; 296 uint64_t rx_byte_cnt_overflow:1; 297 uint64_t rx_drop_frame_cnt_overflow:1; 298 uint64_t rx_drop_byte_cnt_overflow:1; 299 uint64_t crc_err_cnt_overflow:1; 300 uint64_t pause_cnt_overflow:1; 301 uint64_t mcast_cnt_overflow:1; 302 uint64_t bcast_cnt_overflow:1; 303 uint64_t rsrvd:55; 304 #endif 305 } bits; 306 } vmac_rx_stat_t; 307 308 309 /* 310 * Register: VmacRxMsk 311 * Rx VMAC Status Mask 312 * Description: 313 * Fields: 314 * 1: mask interrupt due to overflow of the counter for broadcast 315 * packets 316 * 1: mask interrupt due to overflow of the counter for multicast 317 * packets 318 * 1: mask interrupt due to overflow of the counter for pause 319 * packets 320 * 1: mask interrupt due to overflow of the counter for packets 321 * with mismatched FCS the max value. 322 * 1: mask interrupt due to overflow of dropped byte counter 323 * 1: mask interrupt due to overflow of dropped frame counter 324 * 1: mask interrupt due to overflow of received byte counter 325 * 1: mask interrupt due to overflow of received frame counter 326 * 1: mask interrupt due to a valid frame has been successfully 327 * received. 328 */ 329 typedef union { 330 uint64_t value; 331 struct { 332 #if defined(_BIG_ENDIAN) 333 uint64_t rsrvd:55; 334 uint64_t bcast_cnt_overflow_msk:1; 335 uint64_t mcast_cnt_overflow_msk:1; 336 uint64_t pause_cnt_overflow_msk:1; 337 uint64_t crc_err_cnt_overflow_msk:1; 338 uint64_t rx_drop_byte_cnt_overflow_msk:1; 339 uint64_t rx_drop_frame_cnt_overflow_msk:1; 340 uint64_t rx_byte_cnt_overflow_msk:1; 341 uint64_t rx_frame_cnt_overflow_msk:1; 342 uint64_t frame_rx_msk:1; 343 #else 344 uint64_t frame_rx_msk:1; 345 uint64_t rx_frame_cnt_overflow_msk:1; 346 uint64_t rx_byte_cnt_overflow_msk:1; 347 uint64_t rx_drop_frame_cnt_overflow_msk:1; 348 uint64_t rx_drop_byte_cnt_overflow_msk:1; 349 uint64_t crc_err_cnt_overflow_msk:1; 350 uint64_t pause_cnt_overflow_msk:1; 351 uint64_t mcast_cnt_overflow_msk:1; 352 uint64_t bcast_cnt_overflow_msk:1; 353 uint64_t rsrvd:55; 354 #endif 355 } bits; 356 } vmac_rx_msk_t; 357 358 359 /* 360 * Register: VmacTxStatMirror 361 * Tx VMAC Status Mirror Register 362 * Description: Write a 1 to this register to force the corresponding 363 * interrupt. Reading this register returns the current Tx interrupt 364 * status which would be the same as reading the vmacTxStat register. 365 * The bits are cleared by writing 1 to the corresponding register 366 * bit in the vmacTxStat register. ie, bit 0 of this register is 367 * cleared by writing 1 to bit 0 in the vmacTxStat register. 368 * 369 * Fields: 370 * 1 : Force tx byte counter overflow interrupt generation 371 * 1 : Force tx frame counter overflow interrupt generation 372 * 1 : Force frame transmitted interrupt generation 373 */ 374 typedef union { 375 uint64_t value; 376 struct { 377 #if defined(_BIG_ENDIAN) 378 uint64_t rsrvd:61; 379 uint64_t force_tx_byte_cnt_overflow:1; 380 uint64_t force_tx_frame_cnt_overflow:1; 381 uint64_t force_frame_tx:1; 382 #else 383 uint64_t force_frame_tx:1; 384 uint64_t force_tx_frame_cnt_overflow:1; 385 uint64_t force_tx_byte_cnt_overflow:1; 386 uint64_t rsrvd:61; 387 #endif 388 } bits; 389 } vmac_tx_stat_mirror_t; 390 391 392 /* 393 * Register: VmacRxStatMirror 394 * Rx VMAC Status Mirror Register 395 * Description: Write a 1 to this register to force the corresponding 396 * interrupt. Reading this register returns the current Rx interrupt 397 * status which would be the same as reading the vmacRxStat register. 398 * The bits are cleared by writing 1 to the corresponding register 399 * bit in the vmacRxStat register. ie, bit 0 of this register is 400 * cleared by writing 1 to bit 0 in the vmacRxStat register. 401 * Fields: 402 * 1 : Force broadcast frame counter overflow interrupt 403 * generation 404 * 1 : Force multicast frame counter overflow interrupt 405 * generation 406 * 1 : Force pause frame counter overflow interrupt generation 407 * 1 : Force crc error counter overflow interrupt generation 408 * 1 : Force dropped frames byte counter overflow interrupt 409 * generation 410 * 1 : Force dropped frame counter overflow interrupt generation 411 * 1 : Force rx byte counter overflow interrupt generation 412 * 1 : Force rx frame counter overflow interrupt generation 413 * 1 : Force frame received interrupt generation 414 */ 415 typedef union { 416 uint64_t value; 417 struct { 418 #if defined(_BIG_ENDIAN) 419 uint64_t rsrvd:55; 420 uint64_t force_bcast_cnt_overflow:1; 421 uint64_t force_mcast_cnt_overflow:1; 422 uint64_t force_pause_cnt_overflow:1; 423 uint64_t force_crc_err_cnt_overflow:1; 424 uint64_t force_rx_drop_byte_cnt_overflow:1; 425 uint64_t force_rx_drop_frame_cnt_overflow:1; 426 uint64_t force_rx_byte_cnt_overflow:1; 427 uint64_t force_rx_frame_cnt_overflow:1; 428 uint64_t force_frame_rx:1; 429 #else 430 uint64_t force_frame_rx:1; 431 uint64_t force_rx_frame_cnt_overflow:1; 432 uint64_t force_rx_byte_cnt_overflow:1; 433 uint64_t force_rx_drop_frame_cnt_overflow:1; 434 uint64_t force_rx_drop_byte_cnt_overflow:1; 435 uint64_t force_crc_err_cnt_overflow:1; 436 uint64_t force_pause_cnt_overflow:1; 437 uint64_t force_mcast_cnt_overflow:1; 438 uint64_t force_bcast_cnt_overflow:1; 439 uint64_t rsrvd:55; 440 #endif 441 } bits; 442 } vmac_rx_stat_mirror_t; 443 444 445 /* 446 * Register: VmacTxFrameCnt 447 * VMAC transmitted frame counter 448 * Description: 449 * Fields: 450 * Indicates the number of frames transmitted by Tx VMAC. The 451 * counter will saturate at max value. The counter is stalled 452 * when Tx VMAC is disabled by vmacTxCfg::txEn=0 453 */ 454 typedef union { 455 uint64_t value; 456 struct { 457 #if defined(_BIG_ENDIAN) 458 uint64_t rsrvd:32; 459 uint64_t tx_frame_cnt:32; 460 #else 461 uint64_t tx_frame_cnt:32; 462 uint64_t rsrvd:32; 463 #endif 464 } bits; 465 } vmac_tx_frame_cnt_t; 466 467 468 /* 469 * Register: VmacTxByteCnt 470 * VMAC transmitted byte counter 471 * Description: 472 * Fields: 473 * Indicates the number of byte (octet) of data transmitted by Tx 474 * VMAC. This counter counts all the bytes of the incoming data 475 * including packet header, packet data, crc, and pad bytes. The 476 * counter will saturate at max value. The counter is stalled 477 * when Tx VMAC is disabled by vmacTxCfg::txEn=0 478 */ 479 typedef union { 480 uint64_t value; 481 struct { 482 #if defined(_BIG_ENDIAN) 483 uint64_t rsrvd:32; 484 uint64_t tx_byte_cnt:32; 485 #else 486 uint64_t tx_byte_cnt:32; 487 uint64_t rsrvd:32; 488 #endif 489 } bits; 490 } vmac_tx_byte_cnt_t; 491 492 493 /* 494 * Register: VmacRxFrameCnt 495 * VMAC received frame counter 496 * Description: 497 * Fields: 498 * Indicates the number of frame received by Rx VMAC. The counter 499 * will saturate at max value. The counter is stalled when Rx 500 * VMAC is disabled by vmacRxCfg::rxEn=0. 501 */ 502 typedef union { 503 uint64_t value; 504 struct { 505 #if defined(_BIG_ENDIAN) 506 uint64_t rsrvd:32; 507 uint64_t rx_frame_cnt:32; 508 #else 509 uint64_t rx_frame_cnt:32; 510 uint64_t rsrvd:32; 511 #endif 512 } bits; 513 } vmac_rx_frame_cnt_t; 514 515 516 /* 517 * Register: VmacRxByteCnt 518 * VMAC received byte counter 519 * Description: 520 * Fields: 521 * Indicates the number of bytes (octet) of data received by Rx 522 * VMAC including any error frames. The counter will saturate at 523 * max value. The counter is stalled when Rx VMAC is disabled by 524 * vmacRxCfg::rxEn=0. 525 */ 526 typedef union { 527 uint64_t value; 528 struct { 529 #if defined(_BIG_ENDIAN) 530 uint64_t rsrvd:32; 531 uint64_t rx_byte_cnt:32; 532 #else 533 uint64_t rx_byte_cnt:32; 534 uint64_t rsrvd:32; 535 #endif 536 } bits; 537 } vmac_rx_byte_cnt_t; 538 539 540 /* 541 * Register: VmacRxDropFrCnt 542 * VMAC dropped frame counter 543 * Description: 544 * Fields: 545 * Indicates the number of frame dropped by Rx VMAC. The counter 546 * will This counter increments for every frame dropped for the 547 * following: - crc mismatch & crc check is enabled - failed the 548 * L2 address match & Vmac is not in promiscuous mode - pause 549 * packet & Vmac is not programmed to pass these frames The 550 * counter will saturate at max value. The counter is stalled 551 * when Rx VMAC is disabled by vmacRxCfg::rxEn=0. 552 */ 553 typedef union { 554 uint64_t value; 555 struct { 556 #if defined(_BIG_ENDIAN) 557 uint64_t rsrvd:32; 558 uint64_t rx_drop_frame_cnt:32; 559 #else 560 uint64_t rx_drop_frame_cnt:32; 561 uint64_t rsrvd:32; 562 #endif 563 } bits; 564 } vmac_rx_drop_fr_cnt_t; 565 566 567 /* 568 * Register: VmacRxDropByteCnt 569 * VMAC dropped byte counter 570 * Description: 571 * Fields: 572 * Indicates the number of byte of data dropped by Rx VMAC. 573 * Frames are dropped for one of the follg conditions : - crc 574 * mismatch & crc check is enabled - failed the L2 address match 575 * & Vmac is not in promiscuous mode - pause packet & Vmac is not 576 * programmed to pass these frames The counter will saturate at 577 * max value. The counter is stalled when Rx VMAC is disabled by 578 * vmacRxCfg::rxEn=0. 579 */ 580 typedef union { 581 uint64_t value; 582 struct { 583 #if defined(_BIG_ENDIAN) 584 uint64_t rsrvd:32; 585 uint64_t rx_drop_byte_cnt:32; 586 #else 587 uint64_t rx_drop_byte_cnt:32; 588 uint64_t rsrvd:32; 589 #endif 590 } bits; 591 } vmac_rx_drop_byte_cnt_t; 592 593 594 /* 595 * Register: VmacRxCrcCnt 596 * VMAC received CRC error frame counter 597 * Description: 598 * Fields: 599 * Indicates the number of frames with invalid CRC. When NMAC 600 * truncates a packet, it asserts crcError indication to VMAC 601 * which then counts it towards CRC error. Thus the VMAC crc 602 * error counter reflects the CRC mismatches on all the packets 603 * going out of RxMAC while the NMAC crc error counter reflects 604 * the CRC mismatches on all the packets coming into RxMAC. The 605 * counter will saturate at max value The counter is stalled when 606 * Rx VMAC is disabled by vmacRxCfg::rxEn=0. 607 */ 608 typedef union { 609 uint64_t value; 610 struct { 611 #if defined(_BIG_ENDIAN) 612 uint64_t rsrvd:32; 613 uint64_t rx_crc_cnt:32; 614 #else 615 uint64_t rx_crc_cnt:32; 616 uint64_t rsrvd:32; 617 #endif 618 } bits; 619 } vmac_rx_crc_cnt_t; 620 621 622 /* 623 * Register: VmacRxPauseCnt 624 * VMAC received pause frame counter 625 * Description: 626 * Fields: 627 * Count the number of pause frames received by Rx VMAC. The 628 * counter is stalled when Rx VMAC is disabled by 629 * vmacRxCfg::rxEn=0. 630 */ 631 typedef union { 632 uint64_t value; 633 struct { 634 #if defined(_BIG_ENDIAN) 635 uint64_t rsrvd:32; 636 uint64_t rx_pause_cnt:32; 637 #else 638 uint64_t rx_pause_cnt:32; 639 uint64_t rsrvd:32; 640 #endif 641 } bits; 642 } vmac_rx_pause_cnt_t; 643 644 645 /* 646 * Register: VmacRxBcastFrCnt 647 * VMAC received broadcast frame counter 648 * Description: 649 * Fields: 650 * Indicates the number of broadcast frames received The counter 651 * is stalled when Rx VMAC is disabled by vmacRxCfg::rxEn=0. 652 */ 653 typedef union { 654 uint64_t value; 655 struct { 656 #if defined(_BIG_ENDIAN) 657 uint64_t rsrvd:32; 658 uint64_t rx_bcast_fr_cnt:32; 659 #else 660 uint64_t rx_bcast_fr_cnt:32; 661 uint64_t rsrvd:32; 662 #endif 663 } bits; 664 } vmac_rx_bcast_fr_cnt_t; 665 666 667 /* 668 * Register: VmacRxMcastFrCnt 669 * VMAC received multicast frame counter 670 * Description: 671 * Fields: 672 * Indicates the number of multicast frames received The counter 673 * is stalled when Rx VMAC is disabled by vmacRxCfg::rxEn=0. 674 */ 675 typedef union { 676 uint64_t value; 677 struct { 678 #if defined(_BIG_ENDIAN) 679 uint64_t rsrvd:32; 680 uint64_t rx_mcast_fr_cnt:32; 681 #else 682 uint64_t rx_mcast_fr_cnt:32; 683 uint64_t rsrvd:32; 684 #endif 685 } bits; 686 } vmac_rx_mcast_fr_cnt_t; 687 688 689 #ifdef __cplusplus 690 } 691 #endif 692 693 #endif /* _HXGE_VMAC_HW_H */ 694