Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * AMD 10Gb Ethernet driver
0003  *
0004  * This file is available to you under your choice of the following two
0005  * licenses:
0006  *
0007  * License 1: GPLv2
0008  *
0009  * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
0010  *
0011  * This file is free software; you may copy, redistribute and/or modify
0012  * it under the terms of the GNU General Public License as published by
0013  * the Free Software Foundation, either version 2 of the License, or (at
0014  * your option) any later version.
0015  *
0016  * This file is distributed in the hope that it will be useful, but
0017  * WITHOUT ANY WARRANTY; without even the implied warranty of
0018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0019  * General Public License for more details.
0020  *
0021  * You should have received a copy of the GNU General Public License
0022  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0023  *
0024  * This file incorporates work covered by the following copyright and
0025  * permission notice:
0026  *     The Synopsys DWC ETHER XGMAC Software Driver and documentation
0027  *     (hereinafter "Software") is an unsupported proprietary work of Synopsys,
0028  *     Inc. unless otherwise expressly agreed to in writing between Synopsys
0029  *     and you.
0030  *
0031  *     The Software IS NOT an item of Licensed Software or Licensed Product
0032  *     under any End User Software License Agreement or Agreement for Licensed
0033  *     Product with Synopsys or any supplement thereto.  Permission is hereby
0034  *     granted, free of charge, to any person obtaining a copy of this software
0035  *     annotated with this license and the Software, to deal in the Software
0036  *     without restriction, including without limitation the rights to use,
0037  *     copy, modify, merge, publish, distribute, sublicense, and/or sell copies
0038  *     of the Software, and to permit persons to whom the Software is furnished
0039  *     to do so, subject to the following conditions:
0040  *
0041  *     The above copyright notice and this permission notice shall be included
0042  *     in all copies or substantial portions of the Software.
0043  *
0044  *     THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
0045  *     BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
0046  *     TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
0047  *     PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
0048  *     BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0049  *     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0050  *     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0051  *     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0052  *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0053  *     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
0054  *     THE POSSIBILITY OF SUCH DAMAGE.
0055  *
0056  *
0057  * License 2: Modified BSD
0058  *
0059  * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
0060  * All rights reserved.
0061  *
0062  * Redistribution and use in source and binary forms, with or without
0063  * modification, are permitted provided that the following conditions are met:
0064  *     * Redistributions of source code must retain the above copyright
0065  *       notice, this list of conditions and the following disclaimer.
0066  *     * Redistributions in binary form must reproduce the above copyright
0067  *       notice, this list of conditions and the following disclaimer in the
0068  *       documentation and/or other materials provided with the distribution.
0069  *     * Neither the name of Advanced Micro Devices, Inc. nor the
0070  *       names of its contributors may be used to endorse or promote products
0071  *       derived from this software without specific prior written permission.
0072  *
0073  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0074  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0075  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0076  * ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
0077  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
0078  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
0079  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
0080  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0081  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0082  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0083  *
0084  * This file incorporates work covered by the following copyright and
0085  * permission notice:
0086  *     The Synopsys DWC ETHER XGMAC Software Driver and documentation
0087  *     (hereinafter "Software") is an unsupported proprietary work of Synopsys,
0088  *     Inc. unless otherwise expressly agreed to in writing between Synopsys
0089  *     and you.
0090  *
0091  *     The Software IS NOT an item of Licensed Software or Licensed Product
0092  *     under any End User Software License Agreement or Agreement for Licensed
0093  *     Product with Synopsys or any supplement thereto.  Permission is hereby
0094  *     granted, free of charge, to any person obtaining a copy of this software
0095  *     annotated with this license and the Software, to deal in the Software
0096  *     without restriction, including without limitation the rights to use,
0097  *     copy, modify, merge, publish, distribute, sublicense, and/or sell copies
0098  *     of the Software, and to permit persons to whom the Software is furnished
0099  *     to do so, subject to the following conditions:
0100  *
0101  *     The above copyright notice and this permission notice shall be included
0102  *     in all copies or substantial portions of the Software.
0103  *
0104  *     THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
0105  *     BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
0106  *     TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
0107  *     PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS
0108  *     BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0109  *     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0110  *     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0111  *     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0112  *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0113  *     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
0114  *     THE POSSIBILITY OF SUCH DAMAGE.
0115  */
0116 
0117 #ifndef __XGBE_COMMON_H__
0118 #define __XGBE_COMMON_H__
0119 
0120 /* DMA register offsets */
0121 #define DMA_MR              0x3000
0122 #define DMA_SBMR            0x3004
0123 #define DMA_ISR             0x3008
0124 #define DMA_AXIARCR         0x3010
0125 #define DMA_AXIAWCR         0x3018
0126 #define DMA_AXIAWARCR           0x301c
0127 #define DMA_DSR0            0x3020
0128 #define DMA_DSR1            0x3024
0129 #define DMA_TXEDMACR            0x3040
0130 #define DMA_RXEDMACR            0x3044
0131 
0132 /* DMA register entry bit positions and sizes */
0133 #define DMA_ISR_MACIS_INDEX     17
0134 #define DMA_ISR_MACIS_WIDTH     1
0135 #define DMA_ISR_MTLIS_INDEX     16
0136 #define DMA_ISR_MTLIS_WIDTH     1
0137 #define DMA_MR_INTM_INDEX       12
0138 #define DMA_MR_INTM_WIDTH       2
0139 #define DMA_MR_SWR_INDEX        0
0140 #define DMA_MR_SWR_WIDTH        1
0141 #define DMA_RXEDMACR_RDPS_INDEX     0
0142 #define DMA_RXEDMACR_RDPS_WIDTH     3
0143 #define DMA_SBMR_AAL_INDEX      12
0144 #define DMA_SBMR_AAL_WIDTH      1
0145 #define DMA_SBMR_EAME_INDEX     11
0146 #define DMA_SBMR_EAME_WIDTH     1
0147 #define DMA_SBMR_BLEN_INDEX     1
0148 #define DMA_SBMR_BLEN_WIDTH     7
0149 #define DMA_SBMR_RD_OSR_LMT_INDEX   16
0150 #define DMA_SBMR_RD_OSR_LMT_WIDTH   6
0151 #define DMA_SBMR_UNDEF_INDEX        0
0152 #define DMA_SBMR_UNDEF_WIDTH        1
0153 #define DMA_SBMR_WR_OSR_LMT_INDEX   24
0154 #define DMA_SBMR_WR_OSR_LMT_WIDTH   6
0155 #define DMA_TXEDMACR_TDPS_INDEX     0
0156 #define DMA_TXEDMACR_TDPS_WIDTH     3
0157 
0158 /* DMA register values */
0159 #define DMA_SBMR_BLEN_256       256
0160 #define DMA_SBMR_BLEN_128       128
0161 #define DMA_SBMR_BLEN_64        64
0162 #define DMA_SBMR_BLEN_32        32
0163 #define DMA_SBMR_BLEN_16        16
0164 #define DMA_SBMR_BLEN_8         8
0165 #define DMA_SBMR_BLEN_4         4
0166 #define DMA_DSR_RPS_WIDTH       4
0167 #define DMA_DSR_TPS_WIDTH       4
0168 #define DMA_DSR_Q_WIDTH         (DMA_DSR_RPS_WIDTH + DMA_DSR_TPS_WIDTH)
0169 #define DMA_DSR0_RPS_START      8
0170 #define DMA_DSR0_TPS_START      12
0171 #define DMA_DSRX_FIRST_QUEUE        3
0172 #define DMA_DSRX_INC            4
0173 #define DMA_DSRX_QPR            4
0174 #define DMA_DSRX_RPS_START      0
0175 #define DMA_DSRX_TPS_START      4
0176 #define DMA_TPS_STOPPED         0x00
0177 #define DMA_TPS_SUSPENDED       0x06
0178 
0179 /* DMA channel register offsets
0180  *   Multiple channels can be active.  The first channel has registers
0181  *   that begin at 0x3100.  Each subsequent channel has registers that
0182  *   are accessed using an offset of 0x80 from the previous channel.
0183  */
0184 #define DMA_CH_BASE         0x3100
0185 #define DMA_CH_INC          0x80
0186 
0187 #define DMA_CH_CR           0x00
0188 #define DMA_CH_TCR          0x04
0189 #define DMA_CH_RCR          0x08
0190 #define DMA_CH_TDLR_HI          0x10
0191 #define DMA_CH_TDLR_LO          0x14
0192 #define DMA_CH_RDLR_HI          0x18
0193 #define DMA_CH_RDLR_LO          0x1c
0194 #define DMA_CH_TDTR_LO          0x24
0195 #define DMA_CH_RDTR_LO          0x2c
0196 #define DMA_CH_TDRLR            0x30
0197 #define DMA_CH_RDRLR            0x34
0198 #define DMA_CH_IER          0x38
0199 #define DMA_CH_RIWT         0x3c
0200 #define DMA_CH_CATDR_LO         0x44
0201 #define DMA_CH_CARDR_LO         0x4c
0202 #define DMA_CH_CATBR_HI         0x50
0203 #define DMA_CH_CATBR_LO         0x54
0204 #define DMA_CH_CARBR_HI         0x58
0205 #define DMA_CH_CARBR_LO         0x5c
0206 #define DMA_CH_SR           0x60
0207 
0208 /* DMA channel register entry bit positions and sizes */
0209 #define DMA_CH_CR_PBLX8_INDEX       16
0210 #define DMA_CH_CR_PBLX8_WIDTH       1
0211 #define DMA_CH_CR_SPH_INDEX     24
0212 #define DMA_CH_CR_SPH_WIDTH     1
0213 #define DMA_CH_IER_AIE20_INDEX      15
0214 #define DMA_CH_IER_AIE20_WIDTH      1
0215 #define DMA_CH_IER_AIE_INDEX        14
0216 #define DMA_CH_IER_AIE_WIDTH        1
0217 #define DMA_CH_IER_FBEE_INDEX       12
0218 #define DMA_CH_IER_FBEE_WIDTH       1
0219 #define DMA_CH_IER_NIE20_INDEX      16
0220 #define DMA_CH_IER_NIE20_WIDTH      1
0221 #define DMA_CH_IER_NIE_INDEX        15
0222 #define DMA_CH_IER_NIE_WIDTH        1
0223 #define DMA_CH_IER_RBUE_INDEX       7
0224 #define DMA_CH_IER_RBUE_WIDTH       1
0225 #define DMA_CH_IER_RIE_INDEX        6
0226 #define DMA_CH_IER_RIE_WIDTH        1
0227 #define DMA_CH_IER_RSE_INDEX        8
0228 #define DMA_CH_IER_RSE_WIDTH        1
0229 #define DMA_CH_IER_TBUE_INDEX       2
0230 #define DMA_CH_IER_TBUE_WIDTH       1
0231 #define DMA_CH_IER_TIE_INDEX        0
0232 #define DMA_CH_IER_TIE_WIDTH        1
0233 #define DMA_CH_IER_TXSE_INDEX       1
0234 #define DMA_CH_IER_TXSE_WIDTH       1
0235 #define DMA_CH_RCR_PBL_INDEX        16
0236 #define DMA_CH_RCR_PBL_WIDTH        6
0237 #define DMA_CH_RCR_RBSZ_INDEX       1
0238 #define DMA_CH_RCR_RBSZ_WIDTH       14
0239 #define DMA_CH_RCR_SR_INDEX     0
0240 #define DMA_CH_RCR_SR_WIDTH     1
0241 #define DMA_CH_RIWT_RWT_INDEX       0
0242 #define DMA_CH_RIWT_RWT_WIDTH       8
0243 #define DMA_CH_SR_FBE_INDEX     12
0244 #define DMA_CH_SR_FBE_WIDTH     1
0245 #define DMA_CH_SR_RBU_INDEX     7
0246 #define DMA_CH_SR_RBU_WIDTH     1
0247 #define DMA_CH_SR_RI_INDEX      6
0248 #define DMA_CH_SR_RI_WIDTH      1
0249 #define DMA_CH_SR_RPS_INDEX     8
0250 #define DMA_CH_SR_RPS_WIDTH     1
0251 #define DMA_CH_SR_TBU_INDEX     2
0252 #define DMA_CH_SR_TBU_WIDTH     1
0253 #define DMA_CH_SR_TI_INDEX      0
0254 #define DMA_CH_SR_TI_WIDTH      1
0255 #define DMA_CH_SR_TPS_INDEX     1
0256 #define DMA_CH_SR_TPS_WIDTH     1
0257 #define DMA_CH_TCR_OSP_INDEX        4
0258 #define DMA_CH_TCR_OSP_WIDTH        1
0259 #define DMA_CH_TCR_PBL_INDEX        16
0260 #define DMA_CH_TCR_PBL_WIDTH        6
0261 #define DMA_CH_TCR_ST_INDEX     0
0262 #define DMA_CH_TCR_ST_WIDTH     1
0263 #define DMA_CH_TCR_TSE_INDEX        12
0264 #define DMA_CH_TCR_TSE_WIDTH        1
0265 
0266 /* DMA channel register values */
0267 #define DMA_OSP_DISABLE         0x00
0268 #define DMA_OSP_ENABLE          0x01
0269 #define DMA_PBL_1           1
0270 #define DMA_PBL_2           2
0271 #define DMA_PBL_4           4
0272 #define DMA_PBL_8           8
0273 #define DMA_PBL_16          16
0274 #define DMA_PBL_32          32
0275 #define DMA_PBL_64          64      /* 8 x 8 */
0276 #define DMA_PBL_128         128     /* 8 x 16 */
0277 #define DMA_PBL_256         256     /* 8 x 32 */
0278 #define DMA_PBL_X8_DISABLE      0x00
0279 #define DMA_PBL_X8_ENABLE       0x01
0280 
0281 /* MAC register offsets */
0282 #define MAC_TCR             0x0000
0283 #define MAC_RCR             0x0004
0284 #define MAC_PFR             0x0008
0285 #define MAC_WTR             0x000c
0286 #define MAC_HTR0            0x0010
0287 #define MAC_VLANTR          0x0050
0288 #define MAC_VLANHTR         0x0058
0289 #define MAC_VLANIR          0x0060
0290 #define MAC_IVLANIR         0x0064
0291 #define MAC_RETMR           0x006c
0292 #define MAC_Q0TFCR          0x0070
0293 #define MAC_RFCR            0x0090
0294 #define MAC_RQC0R           0x00a0
0295 #define MAC_RQC1R           0x00a4
0296 #define MAC_RQC2R           0x00a8
0297 #define MAC_RQC3R           0x00ac
0298 #define MAC_ISR             0x00b0
0299 #define MAC_IER             0x00b4
0300 #define MAC_RTSR            0x00b8
0301 #define MAC_PMTCSR          0x00c0
0302 #define MAC_RWKPFR          0x00c4
0303 #define MAC_LPICSR          0x00d0
0304 #define MAC_LPITCR          0x00d4
0305 #define MAC_TIR             0x00e0
0306 #define MAC_VR              0x0110
0307 #define MAC_DR              0x0114
0308 #define MAC_HWF0R           0x011c
0309 #define MAC_HWF1R           0x0120
0310 #define MAC_HWF2R           0x0124
0311 #define MAC_MDIOSCAR            0x0200
0312 #define MAC_MDIOSCCDR           0x0204
0313 #define MAC_MDIOISR         0x0214
0314 #define MAC_MDIOIER         0x0218
0315 #define MAC_MDIOCL22R           0x0220
0316 #define MAC_GPIOCR          0x0278
0317 #define MAC_GPIOSR          0x027c
0318 #define MAC_MACA0HR         0x0300
0319 #define MAC_MACA0LR         0x0304
0320 #define MAC_MACA1HR         0x0308
0321 #define MAC_MACA1LR         0x030c
0322 #define MAC_RSSCR           0x0c80
0323 #define MAC_RSSAR           0x0c88
0324 #define MAC_RSSDR           0x0c8c
0325 #define MAC_TSCR            0x0d00
0326 #define MAC_SSIR            0x0d04
0327 #define MAC_STSR            0x0d08
0328 #define MAC_STNR            0x0d0c
0329 #define MAC_STSUR           0x0d10
0330 #define MAC_STNUR           0x0d14
0331 #define MAC_TSAR            0x0d18
0332 #define MAC_TSSR            0x0d20
0333 #define MAC_TXSNR           0x0d30
0334 #define MAC_TXSSR           0x0d34
0335 
0336 #define MAC_QTFCR_INC           4
0337 #define MAC_MACA_INC            4
0338 #define MAC_HTR_INC         4
0339 
0340 #define MAC_RQC2_INC            4
0341 #define MAC_RQC2_Q_PER_REG      4
0342 
0343 /* MAC register entry bit positions and sizes */
0344 #define MAC_HWF0R_ADDMACADRSEL_INDEX    18
0345 #define MAC_HWF0R_ADDMACADRSEL_WIDTH    5
0346 #define MAC_HWF0R_ARPOFFSEL_INDEX   9
0347 #define MAC_HWF0R_ARPOFFSEL_WIDTH   1
0348 #define MAC_HWF0R_EEESEL_INDEX      13
0349 #define MAC_HWF0R_EEESEL_WIDTH      1
0350 #define MAC_HWF0R_GMIISEL_INDEX     1
0351 #define MAC_HWF0R_GMIISEL_WIDTH     1
0352 #define MAC_HWF0R_MGKSEL_INDEX      7
0353 #define MAC_HWF0R_MGKSEL_WIDTH      1
0354 #define MAC_HWF0R_MMCSEL_INDEX      8
0355 #define MAC_HWF0R_MMCSEL_WIDTH      1
0356 #define MAC_HWF0R_RWKSEL_INDEX      6
0357 #define MAC_HWF0R_RWKSEL_WIDTH      1
0358 #define MAC_HWF0R_RXCOESEL_INDEX    16
0359 #define MAC_HWF0R_RXCOESEL_WIDTH    1
0360 #define MAC_HWF0R_SAVLANINS_INDEX   27
0361 #define MAC_HWF0R_SAVLANINS_WIDTH   1
0362 #define MAC_HWF0R_SMASEL_INDEX      5
0363 #define MAC_HWF0R_SMASEL_WIDTH      1
0364 #define MAC_HWF0R_TSSEL_INDEX       12
0365 #define MAC_HWF0R_TSSEL_WIDTH       1
0366 #define MAC_HWF0R_TSSTSSEL_INDEX    25
0367 #define MAC_HWF0R_TSSTSSEL_WIDTH    2
0368 #define MAC_HWF0R_TXCOESEL_INDEX    14
0369 #define MAC_HWF0R_TXCOESEL_WIDTH    1
0370 #define MAC_HWF0R_VLHASH_INDEX      4
0371 #define MAC_HWF0R_VLHASH_WIDTH      1
0372 #define MAC_HWF0R_VXN_INDEX     29
0373 #define MAC_HWF0R_VXN_WIDTH     1
0374 #define MAC_HWF1R_ADDR64_INDEX      14
0375 #define MAC_HWF1R_ADDR64_WIDTH      2
0376 #define MAC_HWF1R_ADVTHWORD_INDEX   13
0377 #define MAC_HWF1R_ADVTHWORD_WIDTH   1
0378 #define MAC_HWF1R_DBGMEMA_INDEX     19
0379 #define MAC_HWF1R_DBGMEMA_WIDTH     1
0380 #define MAC_HWF1R_DCBEN_INDEX       16
0381 #define MAC_HWF1R_DCBEN_WIDTH       1
0382 #define MAC_HWF1R_HASHTBLSZ_INDEX   24
0383 #define MAC_HWF1R_HASHTBLSZ_WIDTH   3
0384 #define MAC_HWF1R_L3L4FNUM_INDEX    27
0385 #define MAC_HWF1R_L3L4FNUM_WIDTH    4
0386 #define MAC_HWF1R_NUMTC_INDEX       21
0387 #define MAC_HWF1R_NUMTC_WIDTH       3
0388 #define MAC_HWF1R_RSSEN_INDEX       20
0389 #define MAC_HWF1R_RSSEN_WIDTH       1
0390 #define MAC_HWF1R_RXFIFOSIZE_INDEX  0
0391 #define MAC_HWF1R_RXFIFOSIZE_WIDTH  5
0392 #define MAC_HWF1R_SPHEN_INDEX       17
0393 #define MAC_HWF1R_SPHEN_WIDTH       1
0394 #define MAC_HWF1R_TSOEN_INDEX       18
0395 #define MAC_HWF1R_TSOEN_WIDTH       1
0396 #define MAC_HWF1R_TXFIFOSIZE_INDEX  6
0397 #define MAC_HWF1R_TXFIFOSIZE_WIDTH  5
0398 #define MAC_HWF2R_AUXSNAPNUM_INDEX  28
0399 #define MAC_HWF2R_AUXSNAPNUM_WIDTH  3
0400 #define MAC_HWF2R_PPSOUTNUM_INDEX   24
0401 #define MAC_HWF2R_PPSOUTNUM_WIDTH   3
0402 #define MAC_HWF2R_RXCHCNT_INDEX     12
0403 #define MAC_HWF2R_RXCHCNT_WIDTH     4
0404 #define MAC_HWF2R_RXQCNT_INDEX      0
0405 #define MAC_HWF2R_RXQCNT_WIDTH      4
0406 #define MAC_HWF2R_TXCHCNT_INDEX     18
0407 #define MAC_HWF2R_TXCHCNT_WIDTH     4
0408 #define MAC_HWF2R_TXQCNT_INDEX      6
0409 #define MAC_HWF2R_TXQCNT_WIDTH      4
0410 #define MAC_IER_TSIE_INDEX      12
0411 #define MAC_IER_TSIE_WIDTH      1
0412 #define MAC_ISR_MMCRXIS_INDEX       9
0413 #define MAC_ISR_MMCRXIS_WIDTH       1
0414 #define MAC_ISR_MMCTXIS_INDEX       10
0415 #define MAC_ISR_MMCTXIS_WIDTH       1
0416 #define MAC_ISR_PMTIS_INDEX     4
0417 #define MAC_ISR_PMTIS_WIDTH     1
0418 #define MAC_ISR_SMI_INDEX       1
0419 #define MAC_ISR_SMI_WIDTH       1
0420 #define MAC_ISR_TSIS_INDEX      12
0421 #define MAC_ISR_TSIS_WIDTH      1
0422 #define MAC_MACA1HR_AE_INDEX        31
0423 #define MAC_MACA1HR_AE_WIDTH        1
0424 #define MAC_MDIOIER_SNGLCOMPIE_INDEX    12
0425 #define MAC_MDIOIER_SNGLCOMPIE_WIDTH    1
0426 #define MAC_MDIOISR_SNGLCOMPINT_INDEX   12
0427 #define MAC_MDIOISR_SNGLCOMPINT_WIDTH   1
0428 #define MAC_MDIOSCAR_DA_INDEX       21
0429 #define MAC_MDIOSCAR_DA_WIDTH       5
0430 #define MAC_MDIOSCAR_PA_INDEX       16
0431 #define MAC_MDIOSCAR_PA_WIDTH       5
0432 #define MAC_MDIOSCAR_RA_INDEX       0
0433 #define MAC_MDIOSCAR_RA_WIDTH       16
0434 #define MAC_MDIOSCCDR_BUSY_INDEX    22
0435 #define MAC_MDIOSCCDR_BUSY_WIDTH    1
0436 #define MAC_MDIOSCCDR_CMD_INDEX     16
0437 #define MAC_MDIOSCCDR_CMD_WIDTH     2
0438 #define MAC_MDIOSCCDR_CR_INDEX      19
0439 #define MAC_MDIOSCCDR_CR_WIDTH      3
0440 #define MAC_MDIOSCCDR_DATA_INDEX    0
0441 #define MAC_MDIOSCCDR_DATA_WIDTH    16
0442 #define MAC_MDIOSCCDR_SADDR_INDEX   18
0443 #define MAC_MDIOSCCDR_SADDR_WIDTH   1
0444 #define MAC_PFR_HMC_INDEX       2
0445 #define MAC_PFR_HMC_WIDTH       1
0446 #define MAC_PFR_HPF_INDEX       10
0447 #define MAC_PFR_HPF_WIDTH       1
0448 #define MAC_PFR_HUC_INDEX       1
0449 #define MAC_PFR_HUC_WIDTH       1
0450 #define MAC_PFR_PM_INDEX        4
0451 #define MAC_PFR_PM_WIDTH        1
0452 #define MAC_PFR_PR_INDEX        0
0453 #define MAC_PFR_PR_WIDTH        1
0454 #define MAC_PFR_VTFE_INDEX      16
0455 #define MAC_PFR_VTFE_WIDTH      1
0456 #define MAC_PFR_VUCC_INDEX      22
0457 #define MAC_PFR_VUCC_WIDTH      1
0458 #define MAC_PMTCSR_MGKPKTEN_INDEX   1
0459 #define MAC_PMTCSR_MGKPKTEN_WIDTH   1
0460 #define MAC_PMTCSR_PWRDWN_INDEX     0
0461 #define MAC_PMTCSR_PWRDWN_WIDTH     1
0462 #define MAC_PMTCSR_RWKFILTRST_INDEX 31
0463 #define MAC_PMTCSR_RWKFILTRST_WIDTH 1
0464 #define MAC_PMTCSR_RWKPKTEN_INDEX   2
0465 #define MAC_PMTCSR_RWKPKTEN_WIDTH   1
0466 #define MAC_Q0TFCR_PT_INDEX     16
0467 #define MAC_Q0TFCR_PT_WIDTH     16
0468 #define MAC_Q0TFCR_TFE_INDEX        1
0469 #define MAC_Q0TFCR_TFE_WIDTH        1
0470 #define MAC_RCR_ACS_INDEX       1
0471 #define MAC_RCR_ACS_WIDTH       1
0472 #define MAC_RCR_CST_INDEX       2
0473 #define MAC_RCR_CST_WIDTH       1
0474 #define MAC_RCR_DCRCC_INDEX     3
0475 #define MAC_RCR_DCRCC_WIDTH     1
0476 #define MAC_RCR_HDSMS_INDEX     12
0477 #define MAC_RCR_HDSMS_WIDTH     3
0478 #define MAC_RCR_IPC_INDEX       9
0479 #define MAC_RCR_IPC_WIDTH       1
0480 #define MAC_RCR_JE_INDEX        8
0481 #define MAC_RCR_JE_WIDTH        1
0482 #define MAC_RCR_LM_INDEX        10
0483 #define MAC_RCR_LM_WIDTH        1
0484 #define MAC_RCR_RE_INDEX        0
0485 #define MAC_RCR_RE_WIDTH        1
0486 #define MAC_RFCR_PFCE_INDEX     8
0487 #define MAC_RFCR_PFCE_WIDTH     1
0488 #define MAC_RFCR_RFE_INDEX      0
0489 #define MAC_RFCR_RFE_WIDTH      1
0490 #define MAC_RFCR_UP_INDEX       1
0491 #define MAC_RFCR_UP_WIDTH       1
0492 #define MAC_RQC0R_RXQ0EN_INDEX      0
0493 #define MAC_RQC0R_RXQ0EN_WIDTH      2
0494 #define MAC_RSSAR_ADDRT_INDEX       2
0495 #define MAC_RSSAR_ADDRT_WIDTH       1
0496 #define MAC_RSSAR_CT_INDEX      1
0497 #define MAC_RSSAR_CT_WIDTH      1
0498 #define MAC_RSSAR_OB_INDEX      0
0499 #define MAC_RSSAR_OB_WIDTH      1
0500 #define MAC_RSSAR_RSSIA_INDEX       8
0501 #define MAC_RSSAR_RSSIA_WIDTH       8
0502 #define MAC_RSSCR_IP2TE_INDEX       1
0503 #define MAC_RSSCR_IP2TE_WIDTH       1
0504 #define MAC_RSSCR_RSSE_INDEX        0
0505 #define MAC_RSSCR_RSSE_WIDTH        1
0506 #define MAC_RSSCR_TCP4TE_INDEX      2
0507 #define MAC_RSSCR_TCP4TE_WIDTH      1
0508 #define MAC_RSSCR_UDP4TE_INDEX      3
0509 #define MAC_RSSCR_UDP4TE_WIDTH      1
0510 #define MAC_RSSDR_DMCH_INDEX        0
0511 #define MAC_RSSDR_DMCH_WIDTH        4
0512 #define MAC_SSIR_SNSINC_INDEX       8
0513 #define MAC_SSIR_SNSINC_WIDTH       8
0514 #define MAC_SSIR_SSINC_INDEX        16
0515 #define MAC_SSIR_SSINC_WIDTH        8
0516 #define MAC_TCR_SS_INDEX        29
0517 #define MAC_TCR_SS_WIDTH        2
0518 #define MAC_TCR_TE_INDEX        0
0519 #define MAC_TCR_TE_WIDTH        1
0520 #define MAC_TCR_VNE_INDEX       24
0521 #define MAC_TCR_VNE_WIDTH       1
0522 #define MAC_TCR_VNM_INDEX       25
0523 #define MAC_TCR_VNM_WIDTH       1
0524 #define MAC_TIR_TNID_INDEX      0
0525 #define MAC_TIR_TNID_WIDTH      16
0526 #define MAC_TSCR_AV8021ASMEN_INDEX  28
0527 #define MAC_TSCR_AV8021ASMEN_WIDTH  1
0528 #define MAC_TSCR_SNAPTYPSEL_INDEX   16
0529 #define MAC_TSCR_SNAPTYPSEL_WIDTH   2
0530 #define MAC_TSCR_TSADDREG_INDEX     5
0531 #define MAC_TSCR_TSADDREG_WIDTH     1
0532 #define MAC_TSCR_TSCFUPDT_INDEX     1
0533 #define MAC_TSCR_TSCFUPDT_WIDTH     1
0534 #define MAC_TSCR_TSCTRLSSR_INDEX    9
0535 #define MAC_TSCR_TSCTRLSSR_WIDTH    1
0536 #define MAC_TSCR_TSENA_INDEX        0
0537 #define MAC_TSCR_TSENA_WIDTH        1
0538 #define MAC_TSCR_TSENALL_INDEX      8
0539 #define MAC_TSCR_TSENALL_WIDTH      1
0540 #define MAC_TSCR_TSEVNTENA_INDEX    14
0541 #define MAC_TSCR_TSEVNTENA_WIDTH    1
0542 #define MAC_TSCR_TSINIT_INDEX       2
0543 #define MAC_TSCR_TSINIT_WIDTH       1
0544 #define MAC_TSCR_TSIPENA_INDEX      11
0545 #define MAC_TSCR_TSIPENA_WIDTH      1
0546 #define MAC_TSCR_TSIPV4ENA_INDEX    13
0547 #define MAC_TSCR_TSIPV4ENA_WIDTH    1
0548 #define MAC_TSCR_TSIPV6ENA_INDEX    12
0549 #define MAC_TSCR_TSIPV6ENA_WIDTH    1
0550 #define MAC_TSCR_TSMSTRENA_INDEX    15
0551 #define MAC_TSCR_TSMSTRENA_WIDTH    1
0552 #define MAC_TSCR_TSVER2ENA_INDEX    10
0553 #define MAC_TSCR_TSVER2ENA_WIDTH    1
0554 #define MAC_TSCR_TXTSSTSM_INDEX     24
0555 #define MAC_TSCR_TXTSSTSM_WIDTH     1
0556 #define MAC_TSSR_TXTSC_INDEX        15
0557 #define MAC_TSSR_TXTSC_WIDTH        1
0558 #define MAC_TXSNR_TXTSSTSMIS_INDEX  31
0559 #define MAC_TXSNR_TXTSSTSMIS_WIDTH  1
0560 #define MAC_VLANHTR_VLHT_INDEX      0
0561 #define MAC_VLANHTR_VLHT_WIDTH      16
0562 #define MAC_VLANIR_VLTI_INDEX       20
0563 #define MAC_VLANIR_VLTI_WIDTH       1
0564 #define MAC_VLANIR_CSVL_INDEX       19
0565 #define MAC_VLANIR_CSVL_WIDTH       1
0566 #define MAC_VLANTR_DOVLTC_INDEX     20
0567 #define MAC_VLANTR_DOVLTC_WIDTH     1
0568 #define MAC_VLANTR_ERSVLM_INDEX     19
0569 #define MAC_VLANTR_ERSVLM_WIDTH     1
0570 #define MAC_VLANTR_ESVL_INDEX       18
0571 #define MAC_VLANTR_ESVL_WIDTH       1
0572 #define MAC_VLANTR_ETV_INDEX        16
0573 #define MAC_VLANTR_ETV_WIDTH        1
0574 #define MAC_VLANTR_EVLS_INDEX       21
0575 #define MAC_VLANTR_EVLS_WIDTH       2
0576 #define MAC_VLANTR_EVLRXS_INDEX     24
0577 #define MAC_VLANTR_EVLRXS_WIDTH     1
0578 #define MAC_VLANTR_VL_INDEX     0
0579 #define MAC_VLANTR_VL_WIDTH     16
0580 #define MAC_VLANTR_VTHM_INDEX       25
0581 #define MAC_VLANTR_VTHM_WIDTH       1
0582 #define MAC_VLANTR_VTIM_INDEX       17
0583 #define MAC_VLANTR_VTIM_WIDTH       1
0584 #define MAC_VR_DEVID_INDEX      8
0585 #define MAC_VR_DEVID_WIDTH      8
0586 #define MAC_VR_SNPSVER_INDEX        0
0587 #define MAC_VR_SNPSVER_WIDTH        8
0588 #define MAC_VR_USERVER_INDEX        16
0589 #define MAC_VR_USERVER_WIDTH        8
0590 
0591 /* MMC register offsets */
0592 #define MMC_CR              0x0800
0593 #define MMC_RISR            0x0804
0594 #define MMC_TISR            0x0808
0595 #define MMC_RIER            0x080c
0596 #define MMC_TIER            0x0810
0597 #define MMC_TXOCTETCOUNT_GB_LO      0x0814
0598 #define MMC_TXOCTETCOUNT_GB_HI      0x0818
0599 #define MMC_TXFRAMECOUNT_GB_LO      0x081c
0600 #define MMC_TXFRAMECOUNT_GB_HI      0x0820
0601 #define MMC_TXBROADCASTFRAMES_G_LO  0x0824
0602 #define MMC_TXBROADCASTFRAMES_G_HI  0x0828
0603 #define MMC_TXMULTICASTFRAMES_G_LO  0x082c
0604 #define MMC_TXMULTICASTFRAMES_G_HI  0x0830
0605 #define MMC_TX64OCTETS_GB_LO        0x0834
0606 #define MMC_TX64OCTETS_GB_HI        0x0838
0607 #define MMC_TX65TO127OCTETS_GB_LO   0x083c
0608 #define MMC_TX65TO127OCTETS_GB_HI   0x0840
0609 #define MMC_TX128TO255OCTETS_GB_LO  0x0844
0610 #define MMC_TX128TO255OCTETS_GB_HI  0x0848
0611 #define MMC_TX256TO511OCTETS_GB_LO  0x084c
0612 #define MMC_TX256TO511OCTETS_GB_HI  0x0850
0613 #define MMC_TX512TO1023OCTETS_GB_LO 0x0854
0614 #define MMC_TX512TO1023OCTETS_GB_HI 0x0858
0615 #define MMC_TX1024TOMAXOCTETS_GB_LO 0x085c
0616 #define MMC_TX1024TOMAXOCTETS_GB_HI 0x0860
0617 #define MMC_TXUNICASTFRAMES_GB_LO   0x0864
0618 #define MMC_TXUNICASTFRAMES_GB_HI   0x0868
0619 #define MMC_TXMULTICASTFRAMES_GB_LO 0x086c
0620 #define MMC_TXMULTICASTFRAMES_GB_HI 0x0870
0621 #define MMC_TXBROADCASTFRAMES_GB_LO 0x0874
0622 #define MMC_TXBROADCASTFRAMES_GB_HI 0x0878
0623 #define MMC_TXUNDERFLOWERROR_LO     0x087c
0624 #define MMC_TXUNDERFLOWERROR_HI     0x0880
0625 #define MMC_TXOCTETCOUNT_G_LO       0x0884
0626 #define MMC_TXOCTETCOUNT_G_HI       0x0888
0627 #define MMC_TXFRAMECOUNT_G_LO       0x088c
0628 #define MMC_TXFRAMECOUNT_G_HI       0x0890
0629 #define MMC_TXPAUSEFRAMES_LO        0x0894
0630 #define MMC_TXPAUSEFRAMES_HI        0x0898
0631 #define MMC_TXVLANFRAMES_G_LO       0x089c
0632 #define MMC_TXVLANFRAMES_G_HI       0x08a0
0633 #define MMC_RXFRAMECOUNT_GB_LO      0x0900
0634 #define MMC_RXFRAMECOUNT_GB_HI      0x0904
0635 #define MMC_RXOCTETCOUNT_GB_LO      0x0908
0636 #define MMC_RXOCTETCOUNT_GB_HI      0x090c
0637 #define MMC_RXOCTETCOUNT_G_LO       0x0910
0638 #define MMC_RXOCTETCOUNT_G_HI       0x0914
0639 #define MMC_RXBROADCASTFRAMES_G_LO  0x0918
0640 #define MMC_RXBROADCASTFRAMES_G_HI  0x091c
0641 #define MMC_RXMULTICASTFRAMES_G_LO  0x0920
0642 #define MMC_RXMULTICASTFRAMES_G_HI  0x0924
0643 #define MMC_RXCRCERROR_LO       0x0928
0644 #define MMC_RXCRCERROR_HI       0x092c
0645 #define MMC_RXRUNTERROR         0x0930
0646 #define MMC_RXJABBERERROR       0x0934
0647 #define MMC_RXUNDERSIZE_G       0x0938
0648 #define MMC_RXOVERSIZE_G        0x093c
0649 #define MMC_RX64OCTETS_GB_LO        0x0940
0650 #define MMC_RX64OCTETS_GB_HI        0x0944
0651 #define MMC_RX65TO127OCTETS_GB_LO   0x0948
0652 #define MMC_RX65TO127OCTETS_GB_HI   0x094c
0653 #define MMC_RX128TO255OCTETS_GB_LO  0x0950
0654 #define MMC_RX128TO255OCTETS_GB_HI  0x0954
0655 #define MMC_RX256TO511OCTETS_GB_LO  0x0958
0656 #define MMC_RX256TO511OCTETS_GB_HI  0x095c
0657 #define MMC_RX512TO1023OCTETS_GB_LO 0x0960
0658 #define MMC_RX512TO1023OCTETS_GB_HI 0x0964
0659 #define MMC_RX1024TOMAXOCTETS_GB_LO 0x0968
0660 #define MMC_RX1024TOMAXOCTETS_GB_HI 0x096c
0661 #define MMC_RXUNICASTFRAMES_G_LO    0x0970
0662 #define MMC_RXUNICASTFRAMES_G_HI    0x0974
0663 #define MMC_RXLENGTHERROR_LO        0x0978
0664 #define MMC_RXLENGTHERROR_HI        0x097c
0665 #define MMC_RXOUTOFRANGETYPE_LO     0x0980
0666 #define MMC_RXOUTOFRANGETYPE_HI     0x0984
0667 #define MMC_RXPAUSEFRAMES_LO        0x0988
0668 #define MMC_RXPAUSEFRAMES_HI        0x098c
0669 #define MMC_RXFIFOOVERFLOW_LO       0x0990
0670 #define MMC_RXFIFOOVERFLOW_HI       0x0994
0671 #define MMC_RXVLANFRAMES_GB_LO      0x0998
0672 #define MMC_RXVLANFRAMES_GB_HI      0x099c
0673 #define MMC_RXWATCHDOGERROR     0x09a0
0674 
0675 /* MMC register entry bit positions and sizes */
0676 #define MMC_CR_CR_INDEX             0
0677 #define MMC_CR_CR_WIDTH             1
0678 #define MMC_CR_CSR_INDEX            1
0679 #define MMC_CR_CSR_WIDTH            1
0680 #define MMC_CR_ROR_INDEX            2
0681 #define MMC_CR_ROR_WIDTH            1
0682 #define MMC_CR_MCF_INDEX            3
0683 #define MMC_CR_MCF_WIDTH            1
0684 #define MMC_CR_MCT_INDEX            4
0685 #define MMC_CR_MCT_WIDTH            2
0686 #define MMC_RIER_ALL_INTERRUPTS_INDEX       0
0687 #define MMC_RIER_ALL_INTERRUPTS_WIDTH       23
0688 #define MMC_RISR_RXFRAMECOUNT_GB_INDEX      0
0689 #define MMC_RISR_RXFRAMECOUNT_GB_WIDTH      1
0690 #define MMC_RISR_RXOCTETCOUNT_GB_INDEX      1
0691 #define MMC_RISR_RXOCTETCOUNT_GB_WIDTH      1
0692 #define MMC_RISR_RXOCTETCOUNT_G_INDEX       2
0693 #define MMC_RISR_RXOCTETCOUNT_G_WIDTH       1
0694 #define MMC_RISR_RXBROADCASTFRAMES_G_INDEX  3
0695 #define MMC_RISR_RXBROADCASTFRAMES_G_WIDTH  1
0696 #define MMC_RISR_RXMULTICASTFRAMES_G_INDEX  4
0697 #define MMC_RISR_RXMULTICASTFRAMES_G_WIDTH  1
0698 #define MMC_RISR_RXCRCERROR_INDEX       5
0699 #define MMC_RISR_RXCRCERROR_WIDTH       1
0700 #define MMC_RISR_RXRUNTERROR_INDEX      6
0701 #define MMC_RISR_RXRUNTERROR_WIDTH      1
0702 #define MMC_RISR_RXJABBERERROR_INDEX        7
0703 #define MMC_RISR_RXJABBERERROR_WIDTH        1
0704 #define MMC_RISR_RXUNDERSIZE_G_INDEX        8
0705 #define MMC_RISR_RXUNDERSIZE_G_WIDTH        1
0706 #define MMC_RISR_RXOVERSIZE_G_INDEX     9
0707 #define MMC_RISR_RXOVERSIZE_G_WIDTH     1
0708 #define MMC_RISR_RX64OCTETS_GB_INDEX        10
0709 #define MMC_RISR_RX64OCTETS_GB_WIDTH        1
0710 #define MMC_RISR_RX65TO127OCTETS_GB_INDEX   11
0711 #define MMC_RISR_RX65TO127OCTETS_GB_WIDTH   1
0712 #define MMC_RISR_RX128TO255OCTETS_GB_INDEX  12
0713 #define MMC_RISR_RX128TO255OCTETS_GB_WIDTH  1
0714 #define MMC_RISR_RX256TO511OCTETS_GB_INDEX  13
0715 #define MMC_RISR_RX256TO511OCTETS_GB_WIDTH  1
0716 #define MMC_RISR_RX512TO1023OCTETS_GB_INDEX 14
0717 #define MMC_RISR_RX512TO1023OCTETS_GB_WIDTH 1
0718 #define MMC_RISR_RX1024TOMAXOCTETS_GB_INDEX 15
0719 #define MMC_RISR_RX1024TOMAXOCTETS_GB_WIDTH 1
0720 #define MMC_RISR_RXUNICASTFRAMES_G_INDEX    16
0721 #define MMC_RISR_RXUNICASTFRAMES_G_WIDTH    1
0722 #define MMC_RISR_RXLENGTHERROR_INDEX        17
0723 #define MMC_RISR_RXLENGTHERROR_WIDTH        1
0724 #define MMC_RISR_RXOUTOFRANGETYPE_INDEX     18
0725 #define MMC_RISR_RXOUTOFRANGETYPE_WIDTH     1
0726 #define MMC_RISR_RXPAUSEFRAMES_INDEX        19
0727 #define MMC_RISR_RXPAUSEFRAMES_WIDTH        1
0728 #define MMC_RISR_RXFIFOOVERFLOW_INDEX       20
0729 #define MMC_RISR_RXFIFOOVERFLOW_WIDTH       1
0730 #define MMC_RISR_RXVLANFRAMES_GB_INDEX      21
0731 #define MMC_RISR_RXVLANFRAMES_GB_WIDTH      1
0732 #define MMC_RISR_RXWATCHDOGERROR_INDEX      22
0733 #define MMC_RISR_RXWATCHDOGERROR_WIDTH      1
0734 #define MMC_TIER_ALL_INTERRUPTS_INDEX       0
0735 #define MMC_TIER_ALL_INTERRUPTS_WIDTH       18
0736 #define MMC_TISR_TXOCTETCOUNT_GB_INDEX      0
0737 #define MMC_TISR_TXOCTETCOUNT_GB_WIDTH      1
0738 #define MMC_TISR_TXFRAMECOUNT_GB_INDEX      1
0739 #define MMC_TISR_TXFRAMECOUNT_GB_WIDTH      1
0740 #define MMC_TISR_TXBROADCASTFRAMES_G_INDEX  2
0741 #define MMC_TISR_TXBROADCASTFRAMES_G_WIDTH  1
0742 #define MMC_TISR_TXMULTICASTFRAMES_G_INDEX  3
0743 #define MMC_TISR_TXMULTICASTFRAMES_G_WIDTH  1
0744 #define MMC_TISR_TX64OCTETS_GB_INDEX        4
0745 #define MMC_TISR_TX64OCTETS_GB_WIDTH        1
0746 #define MMC_TISR_TX65TO127OCTETS_GB_INDEX   5
0747 #define MMC_TISR_TX65TO127OCTETS_GB_WIDTH   1
0748 #define MMC_TISR_TX128TO255OCTETS_GB_INDEX  6
0749 #define MMC_TISR_TX128TO255OCTETS_GB_WIDTH  1
0750 #define MMC_TISR_TX256TO511OCTETS_GB_INDEX  7
0751 #define MMC_TISR_TX256TO511OCTETS_GB_WIDTH  1
0752 #define MMC_TISR_TX512TO1023OCTETS_GB_INDEX 8
0753 #define MMC_TISR_TX512TO1023OCTETS_GB_WIDTH 1
0754 #define MMC_TISR_TX1024TOMAXOCTETS_GB_INDEX 9
0755 #define MMC_TISR_TX1024TOMAXOCTETS_GB_WIDTH 1
0756 #define MMC_TISR_TXUNICASTFRAMES_GB_INDEX   10
0757 #define MMC_TISR_TXUNICASTFRAMES_GB_WIDTH   1
0758 #define MMC_TISR_TXMULTICASTFRAMES_GB_INDEX 11
0759 #define MMC_TISR_TXMULTICASTFRAMES_GB_WIDTH 1
0760 #define MMC_TISR_TXBROADCASTFRAMES_GB_INDEX 12
0761 #define MMC_TISR_TXBROADCASTFRAMES_GB_WIDTH 1
0762 #define MMC_TISR_TXUNDERFLOWERROR_INDEX     13
0763 #define MMC_TISR_TXUNDERFLOWERROR_WIDTH     1
0764 #define MMC_TISR_TXOCTETCOUNT_G_INDEX       14
0765 #define MMC_TISR_TXOCTETCOUNT_G_WIDTH       1
0766 #define MMC_TISR_TXFRAMECOUNT_G_INDEX       15
0767 #define MMC_TISR_TXFRAMECOUNT_G_WIDTH       1
0768 #define MMC_TISR_TXPAUSEFRAMES_INDEX        16
0769 #define MMC_TISR_TXPAUSEFRAMES_WIDTH        1
0770 #define MMC_TISR_TXVLANFRAMES_G_INDEX       17
0771 #define MMC_TISR_TXVLANFRAMES_G_WIDTH       1
0772 
0773 /* MTL register offsets */
0774 #define MTL_OMR             0x1000
0775 #define MTL_FDCR            0x1008
0776 #define MTL_FDSR            0x100c
0777 #define MTL_FDDR            0x1010
0778 #define MTL_ISR             0x1020
0779 #define MTL_RQDCM0R         0x1030
0780 #define MTL_TCPM0R          0x1040
0781 #define MTL_TCPM1R          0x1044
0782 
0783 #define MTL_RQDCM_INC           4
0784 #define MTL_RQDCM_Q_PER_REG     4
0785 #define MTL_TCPM_INC            4
0786 #define MTL_TCPM_TC_PER_REG     4
0787 
0788 /* MTL register entry bit positions and sizes */
0789 #define MTL_OMR_ETSALG_INDEX        5
0790 #define MTL_OMR_ETSALG_WIDTH        2
0791 #define MTL_OMR_RAA_INDEX       2
0792 #define MTL_OMR_RAA_WIDTH       1
0793 
0794 /* MTL queue register offsets
0795  *   Multiple queues can be active.  The first queue has registers
0796  *   that begin at 0x1100.  Each subsequent queue has registers that
0797  *   are accessed using an offset of 0x80 from the previous queue.
0798  */
0799 #define MTL_Q_BASE          0x1100
0800 #define MTL_Q_INC           0x80
0801 
0802 #define MTL_Q_TQOMR         0x00
0803 #define MTL_Q_TQUR          0x04
0804 #define MTL_Q_TQDR          0x08
0805 #define MTL_Q_RQOMR         0x40
0806 #define MTL_Q_RQMPOCR           0x44
0807 #define MTL_Q_RQDR          0x48
0808 #define MTL_Q_RQFCR         0x50
0809 #define MTL_Q_IER           0x70
0810 #define MTL_Q_ISR           0x74
0811 
0812 /* MTL queue register entry bit positions and sizes */
0813 #define MTL_Q_RQDR_PRXQ_INDEX       16
0814 #define MTL_Q_RQDR_PRXQ_WIDTH       14
0815 #define MTL_Q_RQDR_RXQSTS_INDEX     4
0816 #define MTL_Q_RQDR_RXQSTS_WIDTH     2
0817 #define MTL_Q_RQFCR_RFA_INDEX       1
0818 #define MTL_Q_RQFCR_RFA_WIDTH       6
0819 #define MTL_Q_RQFCR_RFD_INDEX       17
0820 #define MTL_Q_RQFCR_RFD_WIDTH       6
0821 #define MTL_Q_RQOMR_EHFC_INDEX      7
0822 #define MTL_Q_RQOMR_EHFC_WIDTH      1
0823 #define MTL_Q_RQOMR_RQS_INDEX       16
0824 #define MTL_Q_RQOMR_RQS_WIDTH       9
0825 #define MTL_Q_RQOMR_RSF_INDEX       5
0826 #define MTL_Q_RQOMR_RSF_WIDTH       1
0827 #define MTL_Q_RQOMR_RTC_INDEX       0
0828 #define MTL_Q_RQOMR_RTC_WIDTH       2
0829 #define MTL_Q_TQDR_TRCSTS_INDEX     1
0830 #define MTL_Q_TQDR_TRCSTS_WIDTH     2
0831 #define MTL_Q_TQDR_TXQSTS_INDEX     4
0832 #define MTL_Q_TQDR_TXQSTS_WIDTH     1
0833 #define MTL_Q_TQOMR_FTQ_INDEX       0
0834 #define MTL_Q_TQOMR_FTQ_WIDTH       1
0835 #define MTL_Q_TQOMR_Q2TCMAP_INDEX   8
0836 #define MTL_Q_TQOMR_Q2TCMAP_WIDTH   3
0837 #define MTL_Q_TQOMR_TQS_INDEX       16
0838 #define MTL_Q_TQOMR_TQS_WIDTH       10
0839 #define MTL_Q_TQOMR_TSF_INDEX       1
0840 #define MTL_Q_TQOMR_TSF_WIDTH       1
0841 #define MTL_Q_TQOMR_TTC_INDEX       4
0842 #define MTL_Q_TQOMR_TTC_WIDTH       3
0843 #define MTL_Q_TQOMR_TXQEN_INDEX     2
0844 #define MTL_Q_TQOMR_TXQEN_WIDTH     2
0845 
0846 /* MTL queue register value */
0847 #define MTL_RSF_DISABLE         0x00
0848 #define MTL_RSF_ENABLE          0x01
0849 #define MTL_TSF_DISABLE         0x00
0850 #define MTL_TSF_ENABLE          0x01
0851 
0852 #define MTL_RX_THRESHOLD_64     0x00
0853 #define MTL_RX_THRESHOLD_96     0x02
0854 #define MTL_RX_THRESHOLD_128        0x03
0855 #define MTL_TX_THRESHOLD_32     0x01
0856 #define MTL_TX_THRESHOLD_64     0x00
0857 #define MTL_TX_THRESHOLD_96     0x02
0858 #define MTL_TX_THRESHOLD_128        0x03
0859 #define MTL_TX_THRESHOLD_192        0x04
0860 #define MTL_TX_THRESHOLD_256        0x05
0861 #define MTL_TX_THRESHOLD_384        0x06
0862 #define MTL_TX_THRESHOLD_512        0x07
0863 
0864 #define MTL_ETSALG_WRR          0x00
0865 #define MTL_ETSALG_WFQ          0x01
0866 #define MTL_ETSALG_DWRR         0x02
0867 #define MTL_RAA_SP          0x00
0868 #define MTL_RAA_WSP         0x01
0869 
0870 #define MTL_Q_DISABLED          0x00
0871 #define MTL_Q_ENABLED           0x02
0872 
0873 /* MTL traffic class register offsets
0874  *   Multiple traffic classes can be active.  The first class has registers
0875  *   that begin at 0x1100.  Each subsequent queue has registers that
0876  *   are accessed using an offset of 0x80 from the previous queue.
0877  */
0878 #define MTL_TC_BASE         MTL_Q_BASE
0879 #define MTL_TC_INC          MTL_Q_INC
0880 
0881 #define MTL_TC_ETSCR            0x10
0882 #define MTL_TC_ETSSR            0x14
0883 #define MTL_TC_QWR          0x18
0884 
0885 /* MTL traffic class register entry bit positions and sizes */
0886 #define MTL_TC_ETSCR_TSA_INDEX      0
0887 #define MTL_TC_ETSCR_TSA_WIDTH      2
0888 #define MTL_TC_QWR_QW_INDEX     0
0889 #define MTL_TC_QWR_QW_WIDTH     21
0890 
0891 /* MTL traffic class register value */
0892 #define MTL_TSA_SP          0x00
0893 #define MTL_TSA_ETS         0x02
0894 
0895 /* PCS register offsets */
0896 #define PCS_V1_WINDOW_SELECT        0x03fc
0897 #define PCS_V2_WINDOW_DEF       0x9060
0898 #define PCS_V2_WINDOW_SELECT        0x9064
0899 #define PCS_V2_RV_WINDOW_DEF        0x1060
0900 #define PCS_V2_RV_WINDOW_SELECT     0x1064
0901 #define PCS_V2_YC_WINDOW_DEF        0x18060
0902 #define PCS_V2_YC_WINDOW_SELECT     0x18064
0903 
0904 /* PCS register entry bit positions and sizes */
0905 #define PCS_V2_WINDOW_DEF_OFFSET_INDEX  6
0906 #define PCS_V2_WINDOW_DEF_OFFSET_WIDTH  14
0907 #define PCS_V2_WINDOW_DEF_SIZE_INDEX    2
0908 #define PCS_V2_WINDOW_DEF_SIZE_WIDTH    4
0909 
0910 /* SerDes integration register offsets */
0911 #define SIR0_KR_RT_1            0x002c
0912 #define SIR0_STATUS         0x0040
0913 #define SIR1_SPEED          0x0000
0914 
0915 /* SerDes integration register entry bit positions and sizes */
0916 #define SIR0_KR_RT_1_RESET_INDEX    11
0917 #define SIR0_KR_RT_1_RESET_WIDTH    1
0918 #define SIR0_STATUS_RX_READY_INDEX  0
0919 #define SIR0_STATUS_RX_READY_WIDTH  1
0920 #define SIR0_STATUS_TX_READY_INDEX  8
0921 #define SIR0_STATUS_TX_READY_WIDTH  1
0922 #define SIR1_SPEED_CDR_RATE_INDEX   12
0923 #define SIR1_SPEED_CDR_RATE_WIDTH   4
0924 #define SIR1_SPEED_DATARATE_INDEX   4
0925 #define SIR1_SPEED_DATARATE_WIDTH   2
0926 #define SIR1_SPEED_PLLSEL_INDEX     3
0927 #define SIR1_SPEED_PLLSEL_WIDTH     1
0928 #define SIR1_SPEED_RATECHANGE_INDEX 6
0929 #define SIR1_SPEED_RATECHANGE_WIDTH 1
0930 #define SIR1_SPEED_TXAMP_INDEX      8
0931 #define SIR1_SPEED_TXAMP_WIDTH      4
0932 #define SIR1_SPEED_WORDMODE_INDEX   0
0933 #define SIR1_SPEED_WORDMODE_WIDTH   3
0934 
0935 /* SerDes RxTx register offsets */
0936 #define RXTX_REG6           0x0018
0937 #define RXTX_REG20          0x0050
0938 #define RXTX_REG22          0x0058
0939 #define RXTX_REG114         0x01c8
0940 #define RXTX_REG129         0x0204
0941 
0942 /* SerDes RxTx register entry bit positions and sizes */
0943 #define RXTX_REG6_RESETB_RXD_INDEX  8
0944 #define RXTX_REG6_RESETB_RXD_WIDTH  1
0945 #define RXTX_REG20_BLWC_ENA_INDEX   2
0946 #define RXTX_REG20_BLWC_ENA_WIDTH   1
0947 #define RXTX_REG114_PQ_REG_INDEX    9
0948 #define RXTX_REG114_PQ_REG_WIDTH    7
0949 #define RXTX_REG129_RXDFE_CONFIG_INDEX  14
0950 #define RXTX_REG129_RXDFE_CONFIG_WIDTH  2
0951 
0952 /* MAC Control register offsets */
0953 #define XP_PROP_0           0x0000
0954 #define XP_PROP_1           0x0004
0955 #define XP_PROP_2           0x0008
0956 #define XP_PROP_3           0x000c
0957 #define XP_PROP_4           0x0010
0958 #define XP_PROP_5           0x0014
0959 #define XP_MAC_ADDR_LO          0x0020
0960 #define XP_MAC_ADDR_HI          0x0024
0961 #define XP_ECC_ISR          0x0030
0962 #define XP_ECC_IER          0x0034
0963 #define XP_ECC_CNT0         0x003c
0964 #define XP_ECC_CNT1         0x0040
0965 #define XP_DRIVER_INT_REQ       0x0060
0966 #define XP_DRIVER_INT_RO        0x0064
0967 #define XP_DRIVER_SCRATCH_0     0x0068
0968 #define XP_DRIVER_SCRATCH_1     0x006c
0969 #define XP_INT_REISSUE_EN       0x0074
0970 #define XP_INT_EN           0x0078
0971 #define XP_I2C_MUTEX            0x0080
0972 #define XP_MDIO_MUTEX           0x0084
0973 
0974 /* MAC Control register entry bit positions and sizes */
0975 #define XP_DRIVER_INT_REQ_REQUEST_INDEX     0
0976 #define XP_DRIVER_INT_REQ_REQUEST_WIDTH     1
0977 #define XP_DRIVER_INT_RO_STATUS_INDEX       0
0978 #define XP_DRIVER_INT_RO_STATUS_WIDTH       1
0979 #define XP_DRIVER_SCRATCH_0_COMMAND_INDEX   0
0980 #define XP_DRIVER_SCRATCH_0_COMMAND_WIDTH   8
0981 #define XP_DRIVER_SCRATCH_0_SUB_COMMAND_INDEX   8
0982 #define XP_DRIVER_SCRATCH_0_SUB_COMMAND_WIDTH   8
0983 #define XP_ECC_CNT0_RX_DED_INDEX        24
0984 #define XP_ECC_CNT0_RX_DED_WIDTH        8
0985 #define XP_ECC_CNT0_RX_SEC_INDEX        16
0986 #define XP_ECC_CNT0_RX_SEC_WIDTH        8
0987 #define XP_ECC_CNT0_TX_DED_INDEX        8
0988 #define XP_ECC_CNT0_TX_DED_WIDTH        8
0989 #define XP_ECC_CNT0_TX_SEC_INDEX        0
0990 #define XP_ECC_CNT0_TX_SEC_WIDTH        8
0991 #define XP_ECC_CNT1_DESC_DED_INDEX      8
0992 #define XP_ECC_CNT1_DESC_DED_WIDTH      8
0993 #define XP_ECC_CNT1_DESC_SEC_INDEX      0
0994 #define XP_ECC_CNT1_DESC_SEC_WIDTH      8
0995 #define XP_ECC_IER_DESC_DED_INDEX       5
0996 #define XP_ECC_IER_DESC_DED_WIDTH       1
0997 #define XP_ECC_IER_DESC_SEC_INDEX       4
0998 #define XP_ECC_IER_DESC_SEC_WIDTH       1
0999 #define XP_ECC_IER_RX_DED_INDEX         3
1000 #define XP_ECC_IER_RX_DED_WIDTH         1
1001 #define XP_ECC_IER_RX_SEC_INDEX         2
1002 #define XP_ECC_IER_RX_SEC_WIDTH         1
1003 #define XP_ECC_IER_TX_DED_INDEX         1
1004 #define XP_ECC_IER_TX_DED_WIDTH         1
1005 #define XP_ECC_IER_TX_SEC_INDEX         0
1006 #define XP_ECC_IER_TX_SEC_WIDTH         1
1007 #define XP_ECC_ISR_DESC_DED_INDEX       5
1008 #define XP_ECC_ISR_DESC_DED_WIDTH       1
1009 #define XP_ECC_ISR_DESC_SEC_INDEX       4
1010 #define XP_ECC_ISR_DESC_SEC_WIDTH       1
1011 #define XP_ECC_ISR_RX_DED_INDEX         3
1012 #define XP_ECC_ISR_RX_DED_WIDTH         1
1013 #define XP_ECC_ISR_RX_SEC_INDEX         2
1014 #define XP_ECC_ISR_RX_SEC_WIDTH         1
1015 #define XP_ECC_ISR_TX_DED_INDEX         1
1016 #define XP_ECC_ISR_TX_DED_WIDTH         1
1017 #define XP_ECC_ISR_TX_SEC_INDEX         0
1018 #define XP_ECC_ISR_TX_SEC_WIDTH         1
1019 #define XP_I2C_MUTEX_BUSY_INDEX         31
1020 #define XP_I2C_MUTEX_BUSY_WIDTH         1
1021 #define XP_I2C_MUTEX_ID_INDEX           29
1022 #define XP_I2C_MUTEX_ID_WIDTH           2
1023 #define XP_I2C_MUTEX_ACTIVE_INDEX       0
1024 #define XP_I2C_MUTEX_ACTIVE_WIDTH       1
1025 #define XP_MAC_ADDR_HI_VALID_INDEX      31
1026 #define XP_MAC_ADDR_HI_VALID_WIDTH      1
1027 #define XP_PROP_0_CONN_TYPE_INDEX       28
1028 #define XP_PROP_0_CONN_TYPE_WIDTH       3
1029 #define XP_PROP_0_MDIO_ADDR_INDEX       16
1030 #define XP_PROP_0_MDIO_ADDR_WIDTH       5
1031 #define XP_PROP_0_PORT_ID_INDEX         0
1032 #define XP_PROP_0_PORT_ID_WIDTH         8
1033 #define XP_PROP_0_PORT_MODE_INDEX       8
1034 #define XP_PROP_0_PORT_MODE_WIDTH       4
1035 #define XP_PROP_0_PORT_SPEEDS_INDEX     22
1036 #define XP_PROP_0_PORT_SPEEDS_WIDTH     5
1037 #define XP_PROP_1_MAX_RX_DMA_INDEX      24
1038 #define XP_PROP_1_MAX_RX_DMA_WIDTH      5
1039 #define XP_PROP_1_MAX_RX_QUEUES_INDEX       8
1040 #define XP_PROP_1_MAX_RX_QUEUES_WIDTH       5
1041 #define XP_PROP_1_MAX_TX_DMA_INDEX      16
1042 #define XP_PROP_1_MAX_TX_DMA_WIDTH      5
1043 #define XP_PROP_1_MAX_TX_QUEUES_INDEX       0
1044 #define XP_PROP_1_MAX_TX_QUEUES_WIDTH       5
1045 #define XP_PROP_2_RX_FIFO_SIZE_INDEX        16
1046 #define XP_PROP_2_RX_FIFO_SIZE_WIDTH        16
1047 #define XP_PROP_2_TX_FIFO_SIZE_INDEX        0
1048 #define XP_PROP_2_TX_FIFO_SIZE_WIDTH        16
1049 #define XP_PROP_3_GPIO_MASK_INDEX       28
1050 #define XP_PROP_3_GPIO_MASK_WIDTH       4
1051 #define XP_PROP_3_GPIO_MOD_ABS_INDEX        20
1052 #define XP_PROP_3_GPIO_MOD_ABS_WIDTH        4
1053 #define XP_PROP_3_GPIO_RATE_SELECT_INDEX    16
1054 #define XP_PROP_3_GPIO_RATE_SELECT_WIDTH    4
1055 #define XP_PROP_3_GPIO_RX_LOS_INDEX     24
1056 #define XP_PROP_3_GPIO_RX_LOS_WIDTH     4
1057 #define XP_PROP_3_GPIO_TX_FAULT_INDEX       12
1058 #define XP_PROP_3_GPIO_TX_FAULT_WIDTH       4
1059 #define XP_PROP_3_GPIO_ADDR_INDEX       8
1060 #define XP_PROP_3_GPIO_ADDR_WIDTH       3
1061 #define XP_PROP_3_MDIO_RESET_INDEX      0
1062 #define XP_PROP_3_MDIO_RESET_WIDTH      2
1063 #define XP_PROP_3_MDIO_RESET_I2C_ADDR_INDEX 8
1064 #define XP_PROP_3_MDIO_RESET_I2C_ADDR_WIDTH 3
1065 #define XP_PROP_3_MDIO_RESET_I2C_GPIO_INDEX 12
1066 #define XP_PROP_3_MDIO_RESET_I2C_GPIO_WIDTH 4
1067 #define XP_PROP_3_MDIO_RESET_INT_GPIO_INDEX 4
1068 #define XP_PROP_3_MDIO_RESET_INT_GPIO_WIDTH 2
1069 #define XP_PROP_4_MUX_ADDR_HI_INDEX     8
1070 #define XP_PROP_4_MUX_ADDR_HI_WIDTH     5
1071 #define XP_PROP_4_MUX_ADDR_LO_INDEX     0
1072 #define XP_PROP_4_MUX_ADDR_LO_WIDTH     3
1073 #define XP_PROP_4_MUX_CHAN_INDEX        4
1074 #define XP_PROP_4_MUX_CHAN_WIDTH        3
1075 #define XP_PROP_4_REDRV_ADDR_INDEX      16
1076 #define XP_PROP_4_REDRV_ADDR_WIDTH      7
1077 #define XP_PROP_4_REDRV_IF_INDEX        23
1078 #define XP_PROP_4_REDRV_IF_WIDTH        1
1079 #define XP_PROP_4_REDRV_LANE_INDEX      24
1080 #define XP_PROP_4_REDRV_LANE_WIDTH      3
1081 #define XP_PROP_4_REDRV_MODEL_INDEX     28
1082 #define XP_PROP_4_REDRV_MODEL_WIDTH     3
1083 #define XP_PROP_4_REDRV_PRESENT_INDEX       31
1084 #define XP_PROP_4_REDRV_PRESENT_WIDTH       1
1085 
1086 /* I2C Control register offsets */
1087 #define IC_CON                  0x0000
1088 #define IC_TAR                  0x0004
1089 #define IC_DATA_CMD             0x0010
1090 #define IC_INTR_STAT                0x002c
1091 #define IC_INTR_MASK                0x0030
1092 #define IC_RAW_INTR_STAT            0x0034
1093 #define IC_CLR_INTR             0x0040
1094 #define IC_CLR_TX_ABRT              0x0054
1095 #define IC_CLR_STOP_DET             0x0060
1096 #define IC_ENABLE               0x006c
1097 #define IC_TXFLR                0x0074
1098 #define IC_RXFLR                0x0078
1099 #define IC_TX_ABRT_SOURCE           0x0080
1100 #define IC_ENABLE_STATUS            0x009c
1101 #define IC_COMP_PARAM_1             0x00f4
1102 
1103 /* I2C Control register entry bit positions and sizes */
1104 #define IC_COMP_PARAM_1_MAX_SPEED_MODE_INDEX    2
1105 #define IC_COMP_PARAM_1_MAX_SPEED_MODE_WIDTH    2
1106 #define IC_COMP_PARAM_1_RX_BUFFER_DEPTH_INDEX   8
1107 #define IC_COMP_PARAM_1_RX_BUFFER_DEPTH_WIDTH   8
1108 #define IC_COMP_PARAM_1_TX_BUFFER_DEPTH_INDEX   16
1109 #define IC_COMP_PARAM_1_TX_BUFFER_DEPTH_WIDTH   8
1110 #define IC_CON_MASTER_MODE_INDEX        0
1111 #define IC_CON_MASTER_MODE_WIDTH        1
1112 #define IC_CON_RESTART_EN_INDEX         5
1113 #define IC_CON_RESTART_EN_WIDTH         1
1114 #define IC_CON_RX_FIFO_FULL_HOLD_INDEX      9
1115 #define IC_CON_RX_FIFO_FULL_HOLD_WIDTH      1
1116 #define IC_CON_SLAVE_DISABLE_INDEX      6
1117 #define IC_CON_SLAVE_DISABLE_WIDTH      1
1118 #define IC_CON_SPEED_INDEX          1
1119 #define IC_CON_SPEED_WIDTH          2
1120 #define IC_DATA_CMD_CMD_INDEX           8
1121 #define IC_DATA_CMD_CMD_WIDTH           1
1122 #define IC_DATA_CMD_STOP_INDEX          9
1123 #define IC_DATA_CMD_STOP_WIDTH          1
1124 #define IC_ENABLE_ABORT_INDEX           1
1125 #define IC_ENABLE_ABORT_WIDTH           1
1126 #define IC_ENABLE_EN_INDEX          0
1127 #define IC_ENABLE_EN_WIDTH          1
1128 #define IC_ENABLE_STATUS_EN_INDEX       0
1129 #define IC_ENABLE_STATUS_EN_WIDTH       1
1130 #define IC_INTR_MASK_TX_EMPTY_INDEX     4
1131 #define IC_INTR_MASK_TX_EMPTY_WIDTH     1
1132 #define IC_RAW_INTR_STAT_RX_FULL_INDEX      2
1133 #define IC_RAW_INTR_STAT_RX_FULL_WIDTH      1
1134 #define IC_RAW_INTR_STAT_STOP_DET_INDEX     9
1135 #define IC_RAW_INTR_STAT_STOP_DET_WIDTH     1
1136 #define IC_RAW_INTR_STAT_TX_ABRT_INDEX      6
1137 #define IC_RAW_INTR_STAT_TX_ABRT_WIDTH      1
1138 #define IC_RAW_INTR_STAT_TX_EMPTY_INDEX     4
1139 #define IC_RAW_INTR_STAT_TX_EMPTY_WIDTH     1
1140 
1141 /* I2C Control register value */
1142 #define IC_TX_ABRT_7B_ADDR_NOACK        0x0001
1143 #define IC_TX_ABRT_ARB_LOST         0x1000
1144 
1145 /* Descriptor/Packet entry bit positions and sizes */
1146 #define RX_PACKET_ERRORS_CRC_INDEX      2
1147 #define RX_PACKET_ERRORS_CRC_WIDTH      1
1148 #define RX_PACKET_ERRORS_FRAME_INDEX        3
1149 #define RX_PACKET_ERRORS_FRAME_WIDTH        1
1150 #define RX_PACKET_ERRORS_LENGTH_INDEX       0
1151 #define RX_PACKET_ERRORS_LENGTH_WIDTH       1
1152 #define RX_PACKET_ERRORS_OVERRUN_INDEX      1
1153 #define RX_PACKET_ERRORS_OVERRUN_WIDTH      1
1154 
1155 #define RX_PACKET_ATTRIBUTES_CSUM_DONE_INDEX    0
1156 #define RX_PACKET_ATTRIBUTES_CSUM_DONE_WIDTH    1
1157 #define RX_PACKET_ATTRIBUTES_VLAN_CTAG_INDEX    1
1158 #define RX_PACKET_ATTRIBUTES_VLAN_CTAG_WIDTH    1
1159 #define RX_PACKET_ATTRIBUTES_LAST_INDEX     2
1160 #define RX_PACKET_ATTRIBUTES_LAST_WIDTH     1
1161 #define RX_PACKET_ATTRIBUTES_CONTEXT_NEXT_INDEX 3
1162 #define RX_PACKET_ATTRIBUTES_CONTEXT_NEXT_WIDTH 1
1163 #define RX_PACKET_ATTRIBUTES_CONTEXT_INDEX  4
1164 #define RX_PACKET_ATTRIBUTES_CONTEXT_WIDTH  1
1165 #define RX_PACKET_ATTRIBUTES_RX_TSTAMP_INDEX    5
1166 #define RX_PACKET_ATTRIBUTES_RX_TSTAMP_WIDTH    1
1167 #define RX_PACKET_ATTRIBUTES_RSS_HASH_INDEX 6
1168 #define RX_PACKET_ATTRIBUTES_RSS_HASH_WIDTH 1
1169 #define RX_PACKET_ATTRIBUTES_FIRST_INDEX    7
1170 #define RX_PACKET_ATTRIBUTES_FIRST_WIDTH    1
1171 #define RX_PACKET_ATTRIBUTES_TNP_INDEX      8
1172 #define RX_PACKET_ATTRIBUTES_TNP_WIDTH      1
1173 #define RX_PACKET_ATTRIBUTES_TNPCSUM_DONE_INDEX 9
1174 #define RX_PACKET_ATTRIBUTES_TNPCSUM_DONE_WIDTH 1
1175 
1176 #define RX_NORMAL_DESC0_OVT_INDEX       0
1177 #define RX_NORMAL_DESC0_OVT_WIDTH       16
1178 #define RX_NORMAL_DESC2_HL_INDEX        0
1179 #define RX_NORMAL_DESC2_HL_WIDTH        10
1180 #define RX_NORMAL_DESC2_TNP_INDEX       11
1181 #define RX_NORMAL_DESC2_TNP_WIDTH       1
1182 #define RX_NORMAL_DESC3_CDA_INDEX       27
1183 #define RX_NORMAL_DESC3_CDA_WIDTH       1
1184 #define RX_NORMAL_DESC3_CTXT_INDEX      30
1185 #define RX_NORMAL_DESC3_CTXT_WIDTH      1
1186 #define RX_NORMAL_DESC3_ES_INDEX        15
1187 #define RX_NORMAL_DESC3_ES_WIDTH        1
1188 #define RX_NORMAL_DESC3_ETLT_INDEX      16
1189 #define RX_NORMAL_DESC3_ETLT_WIDTH      4
1190 #define RX_NORMAL_DESC3_FD_INDEX        29
1191 #define RX_NORMAL_DESC3_FD_WIDTH        1
1192 #define RX_NORMAL_DESC3_INTE_INDEX      30
1193 #define RX_NORMAL_DESC3_INTE_WIDTH      1
1194 #define RX_NORMAL_DESC3_L34T_INDEX      20
1195 #define RX_NORMAL_DESC3_L34T_WIDTH      4
1196 #define RX_NORMAL_DESC3_LD_INDEX        28
1197 #define RX_NORMAL_DESC3_LD_WIDTH        1
1198 #define RX_NORMAL_DESC3_OWN_INDEX       31
1199 #define RX_NORMAL_DESC3_OWN_WIDTH       1
1200 #define RX_NORMAL_DESC3_PL_INDEX        0
1201 #define RX_NORMAL_DESC3_PL_WIDTH        14
1202 #define RX_NORMAL_DESC3_RSV_INDEX       26
1203 #define RX_NORMAL_DESC3_RSV_WIDTH       1
1204 
1205 #define RX_DESC3_L34T_IPV4_TCP          1
1206 #define RX_DESC3_L34T_IPV4_UDP          2
1207 #define RX_DESC3_L34T_IPV4_ICMP         3
1208 #define RX_DESC3_L34T_IPV4_UNKNOWN      7
1209 #define RX_DESC3_L34T_IPV6_TCP          9
1210 #define RX_DESC3_L34T_IPV6_UDP          10
1211 #define RX_DESC3_L34T_IPV6_ICMP         11
1212 #define RX_DESC3_L34T_IPV6_UNKNOWN      15
1213 
1214 #define RX_CONTEXT_DESC3_TSA_INDEX      4
1215 #define RX_CONTEXT_DESC3_TSA_WIDTH      1
1216 #define RX_CONTEXT_DESC3_TSD_INDEX      6
1217 #define RX_CONTEXT_DESC3_TSD_WIDTH      1
1218 
1219 #define TX_PACKET_ATTRIBUTES_CSUM_ENABLE_INDEX  0
1220 #define TX_PACKET_ATTRIBUTES_CSUM_ENABLE_WIDTH  1
1221 #define TX_PACKET_ATTRIBUTES_TSO_ENABLE_INDEX   1
1222 #define TX_PACKET_ATTRIBUTES_TSO_ENABLE_WIDTH   1
1223 #define TX_PACKET_ATTRIBUTES_VLAN_CTAG_INDEX    2
1224 #define TX_PACKET_ATTRIBUTES_VLAN_CTAG_WIDTH    1
1225 #define TX_PACKET_ATTRIBUTES_PTP_INDEX      3
1226 #define TX_PACKET_ATTRIBUTES_PTP_WIDTH      1
1227 #define TX_PACKET_ATTRIBUTES_VXLAN_INDEX    4
1228 #define TX_PACKET_ATTRIBUTES_VXLAN_WIDTH    1
1229 
1230 #define TX_CONTEXT_DESC2_MSS_INDEX      0
1231 #define TX_CONTEXT_DESC2_MSS_WIDTH      15
1232 #define TX_CONTEXT_DESC3_CTXT_INDEX     30
1233 #define TX_CONTEXT_DESC3_CTXT_WIDTH     1
1234 #define TX_CONTEXT_DESC3_TCMSSV_INDEX       26
1235 #define TX_CONTEXT_DESC3_TCMSSV_WIDTH       1
1236 #define TX_CONTEXT_DESC3_VLTV_INDEX     16
1237 #define TX_CONTEXT_DESC3_VLTV_WIDTH     1
1238 #define TX_CONTEXT_DESC3_VT_INDEX       0
1239 #define TX_CONTEXT_DESC3_VT_WIDTH       16
1240 
1241 #define TX_NORMAL_DESC2_HL_B1L_INDEX        0
1242 #define TX_NORMAL_DESC2_HL_B1L_WIDTH        14
1243 #define TX_NORMAL_DESC2_IC_INDEX        31
1244 #define TX_NORMAL_DESC2_IC_WIDTH        1
1245 #define TX_NORMAL_DESC2_TTSE_INDEX      30
1246 #define TX_NORMAL_DESC2_TTSE_WIDTH      1
1247 #define TX_NORMAL_DESC2_VTIR_INDEX      14
1248 #define TX_NORMAL_DESC2_VTIR_WIDTH      2
1249 #define TX_NORMAL_DESC3_CIC_INDEX       16
1250 #define TX_NORMAL_DESC3_CIC_WIDTH       2
1251 #define TX_NORMAL_DESC3_CPC_INDEX       26
1252 #define TX_NORMAL_DESC3_CPC_WIDTH       2
1253 #define TX_NORMAL_DESC3_CTXT_INDEX      30
1254 #define TX_NORMAL_DESC3_CTXT_WIDTH      1
1255 #define TX_NORMAL_DESC3_FD_INDEX        29
1256 #define TX_NORMAL_DESC3_FD_WIDTH        1
1257 #define TX_NORMAL_DESC3_FL_INDEX        0
1258 #define TX_NORMAL_DESC3_FL_WIDTH        15
1259 #define TX_NORMAL_DESC3_LD_INDEX        28
1260 #define TX_NORMAL_DESC3_LD_WIDTH        1
1261 #define TX_NORMAL_DESC3_OWN_INDEX       31
1262 #define TX_NORMAL_DESC3_OWN_WIDTH       1
1263 #define TX_NORMAL_DESC3_TCPHDRLEN_INDEX     19
1264 #define TX_NORMAL_DESC3_TCPHDRLEN_WIDTH     4
1265 #define TX_NORMAL_DESC3_TCPPL_INDEX     0
1266 #define TX_NORMAL_DESC3_TCPPL_WIDTH     18
1267 #define TX_NORMAL_DESC3_TSE_INDEX       18
1268 #define TX_NORMAL_DESC3_TSE_WIDTH       1
1269 #define TX_NORMAL_DESC3_VNP_INDEX       23
1270 #define TX_NORMAL_DESC3_VNP_WIDTH       3
1271 
1272 #define TX_NORMAL_DESC2_VLAN_INSERT     0x2
1273 #define TX_NORMAL_DESC3_VXLAN_PACKET        0x3
1274 
1275 /* MDIO undefined or vendor specific registers */
1276 #ifndef MDIO_PMA_10GBR_PMD_CTRL
1277 #define MDIO_PMA_10GBR_PMD_CTRL     0x0096
1278 #endif
1279 
1280 #ifndef MDIO_PMA_10GBR_FECCTRL
1281 #define MDIO_PMA_10GBR_FECCTRL      0x00ab
1282 #endif
1283 
1284 #ifndef MDIO_PMA_RX_CTRL1
1285 #define MDIO_PMA_RX_CTRL1       0x8051
1286 #endif
1287 
1288 #ifndef MDIO_PCS_DIG_CTRL
1289 #define MDIO_PCS_DIG_CTRL       0x8000
1290 #endif
1291 
1292 #ifndef MDIO_PCS_DIGITAL_STAT
1293 #define MDIO_PCS_DIGITAL_STAT       0x8010
1294 #endif
1295 
1296 #ifndef MDIO_AN_XNP
1297 #define MDIO_AN_XNP         0x0016
1298 #endif
1299 
1300 #ifndef MDIO_AN_LPX
1301 #define MDIO_AN_LPX         0x0019
1302 #endif
1303 
1304 #ifndef MDIO_AN_COMP_STAT
1305 #define MDIO_AN_COMP_STAT       0x0030
1306 #endif
1307 
1308 #ifndef MDIO_AN_INTMASK
1309 #define MDIO_AN_INTMASK         0x8001
1310 #endif
1311 
1312 #ifndef MDIO_AN_INT
1313 #define MDIO_AN_INT         0x8002
1314 #endif
1315 
1316 #ifndef MDIO_VEND2_AN_ADVERTISE
1317 #define MDIO_VEND2_AN_ADVERTISE     0x0004
1318 #endif
1319 
1320 #ifndef MDIO_VEND2_AN_LP_ABILITY
1321 #define MDIO_VEND2_AN_LP_ABILITY    0x0005
1322 #endif
1323 
1324 #ifndef MDIO_VEND2_AN_CTRL
1325 #define MDIO_VEND2_AN_CTRL      0x8001
1326 #endif
1327 
1328 #ifndef MDIO_VEND2_AN_STAT
1329 #define MDIO_VEND2_AN_STAT      0x8002
1330 #endif
1331 
1332 #ifndef MDIO_VEND2_PMA_CDR_CONTROL
1333 #define MDIO_VEND2_PMA_CDR_CONTROL  0x8056
1334 #endif
1335 
1336 #ifndef MDIO_VEND2_PMA_MISC_CTRL0
1337 #define MDIO_VEND2_PMA_MISC_CTRL0   0x8090
1338 #endif
1339 
1340 #ifndef MDIO_CTRL1_SPEED1G
1341 #define MDIO_CTRL1_SPEED1G      (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100)
1342 #endif
1343 
1344 #ifndef MDIO_VEND2_CTRL1_AN_ENABLE
1345 #define MDIO_VEND2_CTRL1_AN_ENABLE  BIT(12)
1346 #endif
1347 
1348 #ifndef MDIO_VEND2_CTRL1_AN_RESTART
1349 #define MDIO_VEND2_CTRL1_AN_RESTART BIT(9)
1350 #endif
1351 
1352 #ifndef MDIO_VEND2_CTRL1_SS6
1353 #define MDIO_VEND2_CTRL1_SS6        BIT(6)
1354 #endif
1355 
1356 #ifndef MDIO_VEND2_CTRL1_SS13
1357 #define MDIO_VEND2_CTRL1_SS13       BIT(13)
1358 #endif
1359 
1360 /* MDIO mask values */
1361 #define XGBE_AN_CL73_INT_CMPLT      BIT(0)
1362 #define XGBE_AN_CL73_INC_LINK       BIT(1)
1363 #define XGBE_AN_CL73_PG_RCV     BIT(2)
1364 #define XGBE_AN_CL73_INT_MASK       0x07
1365 
1366 #define XGBE_XNP_MCF_NULL_MESSAGE   0x001
1367 #define XGBE_XNP_ACK_PROCESSED      BIT(12)
1368 #define XGBE_XNP_MP_FORMATTED       BIT(13)
1369 #define XGBE_XNP_NP_EXCHANGE        BIT(15)
1370 
1371 #define XGBE_KR_TRAINING_START      BIT(0)
1372 #define XGBE_KR_TRAINING_ENABLE     BIT(1)
1373 
1374 #define XGBE_PCS_CL37_BP        BIT(12)
1375 #define XGBE_PCS_PSEQ_STATE_MASK    0x1c
1376 #define XGBE_PCS_PSEQ_STATE_POWER_GOOD  0x10
1377 
1378 #define XGBE_AN_CL37_INT_CMPLT      BIT(0)
1379 #define XGBE_AN_CL37_INT_MASK       0x01
1380 
1381 #define XGBE_AN_CL37_HD_MASK        0x40
1382 #define XGBE_AN_CL37_FD_MASK        0x20
1383 
1384 #define XGBE_AN_CL37_PCS_MODE_MASK  0x06
1385 #define XGBE_AN_CL37_PCS_MODE_BASEX 0x00
1386 #define XGBE_AN_CL37_PCS_MODE_SGMII 0x04
1387 #define XGBE_AN_CL37_TX_CONFIG_MASK 0x08
1388 #define XGBE_AN_CL37_MII_CTRL_8BIT  0x0100
1389 
1390 #define XGBE_PMA_CDR_TRACK_EN_MASK  0x01
1391 #define XGBE_PMA_CDR_TRACK_EN_OFF   0x00
1392 #define XGBE_PMA_CDR_TRACK_EN_ON    0x01
1393 
1394 #define XGBE_PMA_RX_RST_0_MASK      BIT(4)
1395 #define XGBE_PMA_RX_RST_0_RESET_ON  0x10
1396 #define XGBE_PMA_RX_RST_0_RESET_OFF 0x00
1397 
1398 #define XGBE_PMA_PLL_CTRL_MASK      BIT(15)
1399 #define XGBE_PMA_PLL_CTRL_ENABLE    BIT(15)
1400 #define XGBE_PMA_PLL_CTRL_DISABLE   0x0000
1401 
1402 /* Bit setting and getting macros
1403  *  The get macro will extract the current bit field value from within
1404  *  the variable
1405  *
1406  *  The set macro will clear the current bit field value within the
1407  *  variable and then set the bit field of the variable to the
1408  *  specified value
1409  */
1410 #define GET_BITS(_var, _index, _width)                  \
1411     (((_var) >> (_index)) & ((0x1 << (_width)) - 1))
1412 
1413 #define SET_BITS(_var, _index, _width, _val)                \
1414 do {                                    \
1415     (_var) &= ~(((0x1 << (_width)) - 1) << (_index));       \
1416     (_var) |= (((_val) & ((0x1 << (_width)) - 1)) << (_index)); \
1417 } while (0)
1418 
1419 #define GET_BITS_LE(_var, _index, _width)               \
1420     ((le32_to_cpu((_var)) >> (_index)) & ((0x1 << (_width)) - 1))
1421 
1422 #define SET_BITS_LE(_var, _index, _width, _val)             \
1423 do {                                    \
1424     (_var) &= cpu_to_le32(~(((0x1 << (_width)) - 1) << (_index)));  \
1425     (_var) |= cpu_to_le32((((_val) &                \
1426                   ((0x1 << (_width)) - 1)) << (_index)));   \
1427 } while (0)
1428 
1429 /* Bit setting and getting macros based on register fields
1430  *  The get macro uses the bit field definitions formed using the input
1431  *  names to extract the current bit field value from within the
1432  *  variable
1433  *
1434  *  The set macro uses the bit field definitions formed using the input
1435  *  names to set the bit field of the variable to the specified value
1436  */
1437 #define XGMAC_GET_BITS(_var, _prefix, _field)               \
1438     GET_BITS((_var),                        \
1439          _prefix##_##_field##_INDEX,                \
1440          _prefix##_##_field##_WIDTH)
1441 
1442 #define XGMAC_SET_BITS(_var, _prefix, _field, _val)         \
1443     SET_BITS((_var),                        \
1444          _prefix##_##_field##_INDEX,                \
1445          _prefix##_##_field##_WIDTH, (_val))
1446 
1447 #define XGMAC_GET_BITS_LE(_var, _prefix, _field)            \
1448     GET_BITS_LE((_var),                     \
1449          _prefix##_##_field##_INDEX,                \
1450          _prefix##_##_field##_WIDTH)
1451 
1452 #define XGMAC_SET_BITS_LE(_var, _prefix, _field, _val)          \
1453     SET_BITS_LE((_var),                     \
1454          _prefix##_##_field##_INDEX,                \
1455          _prefix##_##_field##_WIDTH, (_val))
1456 
1457 /* Macros for reading or writing registers
1458  *  The ioread macros will get bit fields or full values using the
1459  *  register definitions formed using the input names
1460  *
1461  *  The iowrite macros will set bit fields or full values using the
1462  *  register definitions formed using the input names
1463  */
1464 #define XGMAC_IOREAD(_pdata, _reg)                  \
1465     ioread32((_pdata)->xgmac_regs + _reg)
1466 
1467 #define XGMAC_IOREAD_BITS(_pdata, _reg, _field)             \
1468     GET_BITS(XGMAC_IOREAD((_pdata), _reg),              \
1469          _reg##_##_field##_INDEX,               \
1470          _reg##_##_field##_WIDTH)
1471 
1472 #define XGMAC_IOWRITE(_pdata, _reg, _val)               \
1473     iowrite32((_val), (_pdata)->xgmac_regs + _reg)
1474 
1475 #define XGMAC_IOWRITE_BITS(_pdata, _reg, _field, _val)          \
1476 do {                                    \
1477     u32 reg_val = XGMAC_IOREAD((_pdata), _reg);         \
1478     SET_BITS(reg_val,                       \
1479          _reg##_##_field##_INDEX,               \
1480          _reg##_##_field##_WIDTH, (_val));          \
1481     XGMAC_IOWRITE((_pdata), _reg, reg_val);             \
1482 } while (0)
1483 
1484 /* Macros for reading or writing MTL queue or traffic class registers
1485  *  Similar to the standard read and write macros except that the
1486  *  base register value is calculated by the queue or traffic class number
1487  */
1488 #define XGMAC_MTL_IOREAD(_pdata, _n, _reg)              \
1489     ioread32((_pdata)->xgmac_regs +                 \
1490          MTL_Q_BASE + ((_n) * MTL_Q_INC) + _reg)
1491 
1492 #define XGMAC_MTL_IOREAD_BITS(_pdata, _n, _reg, _field)         \
1493     GET_BITS(XGMAC_MTL_IOREAD((_pdata), (_n), _reg),        \
1494          _reg##_##_field##_INDEX,               \
1495          _reg##_##_field##_WIDTH)
1496 
1497 #define XGMAC_MTL_IOWRITE(_pdata, _n, _reg, _val)           \
1498     iowrite32((_val), (_pdata)->xgmac_regs +            \
1499           MTL_Q_BASE + ((_n) * MTL_Q_INC) + _reg)
1500 
1501 #define XGMAC_MTL_IOWRITE_BITS(_pdata, _n, _reg, _field, _val)      \
1502 do {                                    \
1503     u32 reg_val = XGMAC_MTL_IOREAD((_pdata), (_n), _reg);       \
1504     SET_BITS(reg_val,                       \
1505          _reg##_##_field##_INDEX,               \
1506          _reg##_##_field##_WIDTH, (_val));          \
1507     XGMAC_MTL_IOWRITE((_pdata), (_n), _reg, reg_val);       \
1508 } while (0)
1509 
1510 /* Macros for reading or writing DMA channel registers
1511  *  Similar to the standard read and write macros except that the
1512  *  base register value is obtained from the ring
1513  */
1514 #define XGMAC_DMA_IOREAD(_channel, _reg)                \
1515     ioread32((_channel)->dma_regs + _reg)
1516 
1517 #define XGMAC_DMA_IOREAD_BITS(_channel, _reg, _field)           \
1518     GET_BITS(XGMAC_DMA_IOREAD((_channel), _reg),            \
1519          _reg##_##_field##_INDEX,               \
1520          _reg##_##_field##_WIDTH)
1521 
1522 #define XGMAC_DMA_IOWRITE(_channel, _reg, _val)             \
1523     iowrite32((_val), (_channel)->dma_regs + _reg)
1524 
1525 #define XGMAC_DMA_IOWRITE_BITS(_channel, _reg, _field, _val)        \
1526 do {                                    \
1527     u32 reg_val = XGMAC_DMA_IOREAD((_channel), _reg);       \
1528     SET_BITS(reg_val,                       \
1529          _reg##_##_field##_INDEX,               \
1530          _reg##_##_field##_WIDTH, (_val));          \
1531     XGMAC_DMA_IOWRITE((_channel), _reg, reg_val);           \
1532 } while (0)
1533 
1534 /* Macros for building, reading or writing register values or bits
1535  * within the register values of XPCS registers.
1536  */
1537 #define XPCS_GET_BITS(_var, _prefix, _field)                \
1538     GET_BITS((_var),                                                \
1539          _prefix##_##_field##_INDEX,                            \
1540          _prefix##_##_field##_WIDTH)
1541 
1542 #define XPCS_SET_BITS(_var, _prefix, _field, _val)                      \
1543     SET_BITS((_var),                                                \
1544          _prefix##_##_field##_INDEX,                            \
1545          _prefix##_##_field##_WIDTH, (_val))
1546 
1547 #define XPCS32_IOWRITE(_pdata, _off, _val)              \
1548     iowrite32(_val, (_pdata)->xpcs_regs + (_off))
1549 
1550 #define XPCS32_IOREAD(_pdata, _off)                 \
1551     ioread32((_pdata)->xpcs_regs + (_off))
1552 
1553 #define XPCS16_IOWRITE(_pdata, _off, _val)              \
1554     iowrite16(_val, (_pdata)->xpcs_regs + (_off))
1555 
1556 #define XPCS16_IOREAD(_pdata, _off)                 \
1557     ioread16((_pdata)->xpcs_regs + (_off))
1558 
1559 /* Macros for building, reading or writing register values or bits
1560  * within the register values of SerDes integration registers.
1561  */
1562 #define XSIR_GET_BITS(_var, _prefix, _field)                            \
1563     GET_BITS((_var),                                                \
1564          _prefix##_##_field##_INDEX,                            \
1565          _prefix##_##_field##_WIDTH)
1566 
1567 #define XSIR_SET_BITS(_var, _prefix, _field, _val)                      \
1568     SET_BITS((_var),                                                \
1569          _prefix##_##_field##_INDEX,                            \
1570          _prefix##_##_field##_WIDTH, (_val))
1571 
1572 #define XSIR0_IOREAD(_pdata, _reg)                  \
1573     ioread16((_pdata)->sir0_regs + _reg)
1574 
1575 #define XSIR0_IOREAD_BITS(_pdata, _reg, _field)             \
1576     GET_BITS(XSIR0_IOREAD((_pdata), _reg),              \
1577          _reg##_##_field##_INDEX,               \
1578          _reg##_##_field##_WIDTH)
1579 
1580 #define XSIR0_IOWRITE(_pdata, _reg, _val)               \
1581     iowrite16((_val), (_pdata)->sir0_regs + _reg)
1582 
1583 #define XSIR0_IOWRITE_BITS(_pdata, _reg, _field, _val)          \
1584 do {                                    \
1585     u16 reg_val = XSIR0_IOREAD((_pdata), _reg);         \
1586     SET_BITS(reg_val,                       \
1587          _reg##_##_field##_INDEX,               \
1588          _reg##_##_field##_WIDTH, (_val));          \
1589     XSIR0_IOWRITE((_pdata), _reg, reg_val);             \
1590 } while (0)
1591 
1592 #define XSIR1_IOREAD(_pdata, _reg)                  \
1593     ioread16((_pdata)->sir1_regs + _reg)
1594 
1595 #define XSIR1_IOREAD_BITS(_pdata, _reg, _field)             \
1596     GET_BITS(XSIR1_IOREAD((_pdata), _reg),              \
1597          _reg##_##_field##_INDEX,               \
1598          _reg##_##_field##_WIDTH)
1599 
1600 #define XSIR1_IOWRITE(_pdata, _reg, _val)               \
1601     iowrite16((_val), (_pdata)->sir1_regs + _reg)
1602 
1603 #define XSIR1_IOWRITE_BITS(_pdata, _reg, _field, _val)          \
1604 do {                                    \
1605     u16 reg_val = XSIR1_IOREAD((_pdata), _reg);         \
1606     SET_BITS(reg_val,                       \
1607          _reg##_##_field##_INDEX,               \
1608          _reg##_##_field##_WIDTH, (_val));          \
1609     XSIR1_IOWRITE((_pdata), _reg, reg_val);             \
1610 } while (0)
1611 
1612 /* Macros for building, reading or writing register values or bits
1613  * within the register values of SerDes RxTx registers.
1614  */
1615 #define XRXTX_IOREAD(_pdata, _reg)                  \
1616     ioread16((_pdata)->rxtx_regs + _reg)
1617 
1618 #define XRXTX_IOREAD_BITS(_pdata, _reg, _field)             \
1619     GET_BITS(XRXTX_IOREAD((_pdata), _reg),              \
1620          _reg##_##_field##_INDEX,               \
1621          _reg##_##_field##_WIDTH)
1622 
1623 #define XRXTX_IOWRITE(_pdata, _reg, _val)               \
1624     iowrite16((_val), (_pdata)->rxtx_regs + _reg)
1625 
1626 #define XRXTX_IOWRITE_BITS(_pdata, _reg, _field, _val)          \
1627 do {                                    \
1628     u16 reg_val = XRXTX_IOREAD((_pdata), _reg);         \
1629     SET_BITS(reg_val,                       \
1630          _reg##_##_field##_INDEX,               \
1631          _reg##_##_field##_WIDTH, (_val));          \
1632     XRXTX_IOWRITE((_pdata), _reg, reg_val);             \
1633 } while (0)
1634 
1635 /* Macros for building, reading or writing register values or bits
1636  * within the register values of MAC Control registers.
1637  */
1638 #define XP_GET_BITS(_var, _prefix, _field)              \
1639     GET_BITS((_var),                        \
1640          _prefix##_##_field##_INDEX,                \
1641          _prefix##_##_field##_WIDTH)
1642 
1643 #define XP_SET_BITS(_var, _prefix, _field, _val)            \
1644     SET_BITS((_var),                        \
1645          _prefix##_##_field##_INDEX,                \
1646          _prefix##_##_field##_WIDTH, (_val))
1647 
1648 #define XP_IOREAD(_pdata, _reg)                     \
1649     ioread32((_pdata)->xprop_regs + (_reg))
1650 
1651 #define XP_IOREAD_BITS(_pdata, _reg, _field)                \
1652     GET_BITS(XP_IOREAD((_pdata), (_reg)),               \
1653          _reg##_##_field##_INDEX,               \
1654          _reg##_##_field##_WIDTH)
1655 
1656 #define XP_IOWRITE(_pdata, _reg, _val)                  \
1657     iowrite32((_val), (_pdata)->xprop_regs + (_reg))
1658 
1659 #define XP_IOWRITE_BITS(_pdata, _reg, _field, _val)         \
1660 do {                                    \
1661     u32 reg_val = XP_IOREAD((_pdata), (_reg));          \
1662     SET_BITS(reg_val,                       \
1663          _reg##_##_field##_INDEX,               \
1664          _reg##_##_field##_WIDTH, (_val));          \
1665     XP_IOWRITE((_pdata), (_reg), reg_val);              \
1666 } while (0)
1667 
1668 /* Macros for building, reading or writing register values or bits
1669  * within the register values of I2C Control registers.
1670  */
1671 #define XI2C_GET_BITS(_var, _prefix, _field)                \
1672     GET_BITS((_var),                        \
1673          _prefix##_##_field##_INDEX,                \
1674          _prefix##_##_field##_WIDTH)
1675 
1676 #define XI2C_SET_BITS(_var, _prefix, _field, _val)          \
1677     SET_BITS((_var),                        \
1678          _prefix##_##_field##_INDEX,                \
1679          _prefix##_##_field##_WIDTH, (_val))
1680 
1681 #define XI2C_IOREAD(_pdata, _reg)                   \
1682     ioread32((_pdata)->xi2c_regs + (_reg))
1683 
1684 #define XI2C_IOREAD_BITS(_pdata, _reg, _field)              \
1685     GET_BITS(XI2C_IOREAD((_pdata), (_reg)),             \
1686          _reg##_##_field##_INDEX,               \
1687          _reg##_##_field##_WIDTH)
1688 
1689 #define XI2C_IOWRITE(_pdata, _reg, _val)                \
1690     iowrite32((_val), (_pdata)->xi2c_regs + (_reg))
1691 
1692 #define XI2C_IOWRITE_BITS(_pdata, _reg, _field, _val)           \
1693 do {                                    \
1694     u32 reg_val = XI2C_IOREAD((_pdata), (_reg));            \
1695     SET_BITS(reg_val,                       \
1696          _reg##_##_field##_INDEX,               \
1697          _reg##_##_field##_WIDTH, (_val));          \
1698     XI2C_IOWRITE((_pdata), (_reg), reg_val);            \
1699 } while (0)
1700 
1701 /* Macros for building, reading or writing register values or bits
1702  * using MDIO.  Different from above because of the use of standardized
1703  * Linux include values.  No shifting is performed with the bit
1704  * operations, everything works on mask values.
1705  */
1706 #define XMDIO_READ(_pdata, _mmd, _reg)                  \
1707     ((_pdata)->hw_if.read_mmd_regs((_pdata), 0,         \
1708         MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff)))
1709 
1710 #define XMDIO_READ_BITS(_pdata, _mmd, _reg, _mask)          \
1711     (XMDIO_READ((_pdata), _mmd, _reg) & _mask)
1712 
1713 #define XMDIO_WRITE(_pdata, _mmd, _reg, _val)               \
1714     ((_pdata)->hw_if.write_mmd_regs((_pdata), 0,            \
1715         MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff), (_val)))
1716 
1717 #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val)       \
1718 do {                                    \
1719     u32 mmd_val = XMDIO_READ((_pdata), _mmd, _reg);         \
1720     mmd_val &= ~_mask;                      \
1721     mmd_val |= (_val);                      \
1722     XMDIO_WRITE((_pdata), _mmd, _reg, mmd_val);         \
1723 } while (0)
1724 
1725 #endif