blob: 7b0d73be8a60ad7ae119d3001482b64ba02d8659 [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms. Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.
********************************************************************************
Marvell Commercial License Option
If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Marvell nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#ifndef __mvNetaRegs_h__
#define __mvNetaRegs_h__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "mvSysEthConfig.h"
#define NETA_REG_BASE(port) MV_ETH_REGS_BASE(port)
/************************** NETA TX Registers ******************************/
#ifdef CONFIG_MV_PON
#define NETA_TX_REG_BASE(p, txp) (MV_PON_PORT(p) ? \
(MV_PON_REG_BASE + 0x4000 + ((txp) >> 1) * 0x2000 + ((txp) & 0x1) * 0x400) : \
(NETA_REG_BASE(p) + 0x2400))
#else
#define NETA_TX_REG_BASE(p, txp) (NETA_REG_BASE(p) + 0x2400)
#endif /* CONFIG_MV_PON */
/************************** NETA RX Registers ******************************/
/* PxRXyC: Port RX queues Configuration Register */
#define NETA_RXQ_CONFIG_REG(p, q) (NETA_REG_BASE(p) + 0x1400 + ((q) << 2))
#define NETA_RXQ_HW_BUF_ALLOC_BIT 0
#define NETA_RXQ_HW_BUF_ALLOC_MASK (1 << NETA_RXQ_HW_BUF_ALLOC_BIT)
#define NETA_RXQ_SHORT_POOL_ID_OFFS 4
#define NETA_RXQ_SHORT_POOL_ID_MASK (0x3 << NETA_RXQ_SHORT_POOL_ID_OFFS)
#define NETA_RXQ_LONG_POOL_ID_OFFS 6
#define NETA_RXQ_LONG_POOL_ID_MASK (0x3 << NETA_RXQ_LONG_POOL_ID_OFFS)
#define NETA_RXQ_PACKET_OFFSET_OFFS 8
#define NETA_RXQ_PACKET_OFFSET_ALL_MASK (0xF << NETA_RXQ_PACKET_OFFSET_OFFS)
#define NETA_RXQ_PACKET_OFFSET_MASK(offs) ((offs) << NETA_RXQ_PACKET_OFFSET_OFFS)
#define NETA_RXQ_INTR_ENABLE_BIT 15
#define NETA_RXQ_INTR_ENABLE_MASK (0x1 << NETA_RXQ_INTR_ENABLE_BIT)
/* ????? What about PREFETCH commands 1, 2, 3 */
#define NETA_RXQ_PREFETCH_MODE_BIT 16
#define NETA_RXQ_PREFETCH_PNC (0 << NETA_RXQ_PREFETCH_MODE_BIT)
#define NETA_RXQ_PREFETCH_CMD_0 (1 << NETA_RXQ_PREFETCH_MODE_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_RXQ_SNOOP_REG(p, q) (NETA_REG_BASE(p) + 0x1420 + ((q) << 2))
#define NETA_RXQ_SNOOP_BYTES_OFFS 0
#define NETA_RXQ_SNOOP_BYTES_MASK (0x3FFF << NETA_RXQ_SNOOP_BYTES_OFFS)
#define NETA_RXQ_L2_DEPOSIT_BYTES_OFFS 16
#define NETA_RXQ_L2_DEPOSIT_BYTES_MASK (0x3FFF << NETA_RXQ_L2_DEPOSIT_BYTES_OFFS)
#define NETA_RXQ_PREFETCH_01_REG(p, q) (NETA_REG_BASE(p) + 0x1440 + ((q) << 2))
#define NETA_RXQ_PREFETCH_23_REG(p, q) (NETA_REG_BASE(p) + 0x1460 + ((q) << 2))
#define NETA_RXQ_PREFETCH_CMD_OFFS(cmd) (((cmd) & 1) ? 16 : 0)
#define NETA_RXQ_PREFETCH_CMD_MASK(cmd) (0xFFFF << NETA_RXQ_PREFETCH_CMD_OFFS(cmd))
/*-------------------------------------------------------------------------------*/
#define NETA_RXQ_BASE_ADDR_REG(p, q) (NETA_REG_BASE(p) + 0x1480 + ((q) << 2))
#define NETA_RXQ_SIZE_REG(p, q) (NETA_REG_BASE(p) + 0x14A0 + ((q) << 2))
#define NETA_RXQ_DESC_NUM_OFFS 0
#define NETA_RXQ_DESC_NUM_MASK (0x3FFF << NETA_RXQ_DESC_NUM_OFFS)
#define NETA_RXQ_BUF_SIZE_OFFS 19
#define NETA_RXQ_BUF_SIZE_MASK (0x1FFF << NETA_RXQ_BUF_SIZE_OFFS)
/*-------------------------------------------------------------------------------*/
#define NETA_RXQ_THRESHOLD_REG(p, q) (NETA_REG_BASE(p) + 0x14C0 + ((q) << 2))
#define NETA_RXQ_STATUS_REG(p, q) (NETA_REG_BASE(p) + 0x14E0 + ((q) << 2))
#define NETA_RXQ_OCCUPIED_DESC_OFFS 0
#define NETA_RXQ_OCCUPIED_DESC_ALL_MASK (0x3FFF << NETA_RXQ_OCCUPIED_DESC_OFFS)
#define NETA_RXQ_OCCUPIED_DESC_MASK(val) ((val) << NETA_RXQ_OCCUPIED_DESC_OFFS)
#define NETA_RXQ_NON_OCCUPIED_DESC_OFFS 16
#define NETA_RXQ_NON_OCCUPIED_DESC_ALL_MASK (0x3FFF << NETA_RXQ_NON_OCCUPIED_DESC_OFFS)
#define NETA_RXQ_NON_OCCUPIED_DESC_MASK(v) ((v) << NETA_RXQ_NON_OCCUPIED_DESC_OFFS)
/*-------------------------------------------------------------------------------*/
#define NETA_RXQ_STATUS_UPDATE_REG(p, q) (NETA_REG_BASE(p) + 0x1500 + ((q) << 2))
/* Decrement OCCUPIED Descriptors counter */
#define NETA_RXQ_DEC_OCCUPIED_OFFS 0
#define NETA_RXQ_DEC_OCCUPIED_MASK (0xFF << NETA_RXQ_DEC_OCCUPIED_OFFS)
/* Increment NON_OCCUPIED Descriptors counter */
#define NETA_RXQ_ADD_NON_OCCUPIED_OFFS 16
#define NETA_RXQ_ADD_NON_OCCUPIED_MASK (0xFF << NETA_RXQ_ADD_NON_OCCUPIED_OFFS)
/*-------------------------------------------------------------------------------*/
/* Port RX queues Descriptors Index Register (a register per RX Queue) */
#define NETA_RXQ_INDEX_REG(p, q) (NETA_REG_BASE(p) + 0x1520 + ((q) << 2))
#define NETA_RXQ_NEXT_DESC_INDEX_OFFS 0
#define NETA_RXQ_NEXT_DESC_INDEX_MASK (0x3FFF << NETA_RXQ_NEXT_DESC_INDEX_OFFS)
/*-------------------------------------------------------------------------------*/
/* Port Pool-N Buffer Size Register - 8 bytes alignment */
#define NETA_POOL_BUF_SIZE_REG(p, pool) (NETA_REG_BASE(p) + 0x1700 + ((pool) << 2))
#define NETA_POOL_BUF_SIZE_ALIGN 8
#define NETA_POOL_BUF_SIZE_OFFS 3
#define NETA_POOL_BUF_SIZE_MASK (0x1FFF << NETA_POOL_BUF_SIZE_OFFS)
/*-------------------------------------------------------------------------------*/
/* Port RX Flow Control register */
#define NETA_FLOW_CONTROL_REG(p) (NETA_REG_BASE(p) + 0x1710)
#define NETA_PRIO_PAUSE_PKT_GEN_BIT 0
#define NETA_PRIO_PAUSE_PKT_GEN_GIGA (0 << NETA_PRIO_PAUSE_PKT_GEN_BIT)
#define NETA_PRIO_PAUSE_PKT_GEN_CPU (1 << NETA_PRIO_PAUSE_PKT_GEN_BIT)
#define NETA_PRIO_TX_PAUSE_BIT 1
#define NETA_PRIO_TX_PAUSE_GIGA (0 << NETA_PRIO_TX_PAUSE_BIT)
#define NETA_PRIO_TX_PAUSE_CPU (1 << NETA_PRIO_TX_PAUSE_BIT)
/*-------------------------------------------------------------------------------*/
/* Port TX pause control register */
#define NETA_TX_PAUSE_REG(p) (NETA_REG_BASE(p) + 0x1714)
/* ????? One register for all TXQs - problem for multi-core */
#define NETA_TXQ_PAUSE_ENABLE_OFFS 0
#define NETA_TXQ_PAUSE_ENABLE_ALL_MASK (0xFF << NETA_TXQ_PAUSE_ENABLE_OFFS)
#define NETA_TXQ_PAUSE_ENABLE_MASK(q) ((1 << q) << NETA_TXQ_PAUSE_ENABLE_OFFS)
/*-------------------------------------------------------------------------------*/
/* Port Flow Control generation control register */
#define NETA_FC_GEN_REG(p) (NETA_REG_BASE(p) + 0x1718)
#define NETA_PAUSE_PKT_GEN_DATA_BIT 0
#define NETA_PAUSE_PKT_GEN_DATA_OFF (0 << NETA_PAUSE_PKT_GEN_DATA_BIT)
#define NETA_PAUSE_PKT_GEN_DATA_ON (1 << NETA_PAUSE_PKT_GEN_DATA_BIT)
#define NETA_TXQ_PAUSE_PKT_GEN_OFFS 4
#define NETA_TXQ_PAUSE_PKT_GEN_ALL_MASK (0x7 << NETA_TXQ_PAUSE_PKT_GEN_OFFS)
#define NETA_TXQ_PAUSE_PKT_GEN_MASK(q) ((1 << q) << NETA_TXQ_PAUSE_PKT_GEN_OFFS)
#define NETA_RX_DEBUG_REG(p) (NETA_REG_BASE(p) + 0x17f0)
/* RXQ memory dump: offset = 1c00 - 1cbc */
/* PxRXINIT: Port RX Initialization Register */
#define NETA_PORT_RX_RESET_REG(p) (NETA_REG_BASE(p) + 0x1cc0)
#define NETA_PORT_RX_DMA_RESET_BIT 0
#define NETA_PORT_RX_DMA_RESET_MASK (1 << NETA_PORT_RX_DMA_RESET_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_HWF_RX_CTRL_REG(p) (NETA_REG_BASE(p) + 0x1d00)
#define NETA_COLOR_SRC_SEL_BIT 0
#define NETA_COLOR_SRC_SEL_MASK (1 << NETA_COLOR_SRC_SEL_BIT)
#define NETA_GEM_PID_SRC_SEL_OFFS 4
#define NETA_GEM_PID_SRC_SEL_MASK (7 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_GEM_PID_SRC_GPON_HDR (0 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_GEM_PID_SRC_EXT_DSA_TAG (1 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_GEM_PID_SRC_FLOW_ID (2 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_GEM_PID_SRC_DSA_TAG (3 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_GEM_PID_SRC_ZERO (4 << NETA_GEM_PID_SRC_SEL_OFFS)
#define NETA_TXQ_SRC_SEL_BIT 8
#define NETA_TXQ_SRC_SEL_MASK (1 << NETA_TXQ_SRC_SEL_BIT)
#define NETA_TXQ_SRC_FLOW_ID (0 << NETA_TXQ_SRC_SEL_BIT)
#define NETA_TXQ_SRC_RES_INFO (1 << NETA_TXQ_SRC_SEL_BIT)
#ifdef MV_ETH_PMT_NEW
#define NETA_MH_SEL_OFFS 12
#define NETA_MH_SEL_MASK (0xF << NETA_MH_SEL_OFFS)
#define NETA_MH_DONT_CHANGE (0)
#define NETA_MH_REPLACE_GPON_HDR (1)
#define NETA_MH_REPLACE_MH_REG(r) (r + 1)
#define NETA_MH_SRC_PNC_BIT 16
#define NETA_MH_SRC_PNC_MASK (1 << NETA_MH_SRC_PNC_BIT)
#define NETA_HWF_ENABLE_BIT 17
#define NETA_HWF_ENABLE_MASK (1 << NETA_HWF_ENABLE_BIT)
#else
#define NETA_MH_SEL_OFFS 12
#define NETA_MH_SEL_MASK (0x7 << NETA_MH_SEL_OFFS)
#define NETA_MH_DONT_CHANGE (0)
#define NETA_MH_REPLACE_GPON_HDR (1)
#define NETA_MH_REPLACE_MH_REG(r) (r + 1)
#define NETA_MH_SRC_PNC_BIT 15
#define NETA_MH_SRC_PNC_MASK (1 << NETA_MH_SRC_PNC_BIT)
#define NETA_HWF_ENABLE_BIT 16
#define NETA_HWF_ENABLE_MASK (1 << NETA_HWF_ENABLE_BIT)
#endif /* MV_ETH_PMT_NEW */
#define NETA_HWF_SHORT_POOL_OFFS 20
#define NETA_HWF_SHORT_POOL_MASK (3 << NETA_HWF_SHORT_POOL_OFFS)
#define NETA_HWF_SHORT_POOL_ID(pool) ((pool) << NETA_HWF_SHORT_POOL_OFFS)
#define NETA_HWF_LONG_POOL_OFFS 22
#define NETA_HWF_LONG_POOL_MASK (3 << NETA_HWF_LONG_POOL_OFFS)
#define NETA_HWF_LONG_POOL_ID(pool) ((pool) << NETA_HWF_LONG_POOL_OFFS)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_RX_THRESH_REG(p) (NETA_REG_BASE(p) + 0x1d04)
#ifdef MV_ETH_PMT_NEW
#define NETA_HWF_RX_FIFO_WORDS_OFFS 0
#define NETA_HWF_RX_FIFO_WORDS_MASK (0x3FF << NETA_HWF_RX_FIFO_WORDS_OFFS)
#define NETA_HWF_RX_FIFO_PKTS_OFFS 16
#define NETA_HWF_RX_FIFO_PKTS_MASK (0x7F << NETA_HWF_RX_FIFO_PKTS_OFFS)
#else
#define NETA_HWF_RX_FIFO_WORDS_OFFS 0
#define NETA_HWF_RX_FIFO_WORDS_MASK (0xFF << NETA_HWF_RX_FIFO_WORDS_OFFS)
#define NETA_HWF_RX_FIFO_PKTS_OFFS 8
#define NETA_HWF_RX_FIFO_PKTS_MASK (0x1F << NETA_HWF_RX_FIFO_PKTS_OFFS)
#endif /* MV_ETH_PMT_NEW */
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_TXP_CFG_REG(p, txp) (NETA_REG_BASE(p) + 0x1d10 + ((txp) >> 1) * 4)
#define NETA_TXP_BASE_ADDR_OFFS(txp) (((txp) & 0x1) ? 18 : 2)
#define NETA_TXP_BASE_ADDR_MASK(txp) (0xFFFF << NETA_TXP_BASE_ADDR_OFFS(txp))
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_TX_PTR_REG(p) (NETA_REG_BASE(p) + 0x1d30)
#define NETA_HWF_TX_PORT_OFFS 11
#define NETA_HWF_TX_PORT_ALL_MASK (0xF << NETA_HWF_TX_PORT_OFFS)
#define NETA_HWF_TX_PORT_MASK(txp) ((txp) << NETA_HWF_TX_PORT_OFFS)
#define NETA_HWF_TXQ_OFFS 8
#define NETA_HWF_TXQ_ALL_MASK (0x7 << NETA_HWF_TXQ_OFFS)
#define NETA_HWF_TXQ_MASK(txq) ((txq) << NETA_HWF_TXQ_OFFS)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_DROP_TH_REG(p) (NETA_REG_BASE(p) + 0x1d40)
#define NETA_YELLOW_DROP_THRESH_OFFS 0
#define NETA_YELLOW_DROP_THRESH_MASK (0x3fff << NETA_YELLOW_DROP_THRESH_OFFS)
#define NETA_YELLOW_DROP_RND_GEN_OFFS 16
#define NETA_YELLOW_DROP_RND_GEN_MASK (0xf << NETA_YELLOW_DROP_RND_GEN_OFFS)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_TXQ_BASE_REG(p) (NETA_REG_BASE(p) + 0x1d44)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_TXQ_SIZE_REG(p) (NETA_REG_BASE(p) + 0x1d48)
#define NETA_HWF_TXQ_SIZE_OFFS 0
#define NETA_HWF_TXQ_SIZE_MASK (0x3fff << NETA_HWF_TXQ_SIZE_OFFS)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_TXQ_ENABLE_REG(p) (NETA_REG_BASE(p) + 0x1d4c)
#define NETA_HWF_TXQ_ENABLE_BIT 0
#define NETA_HWF_TXQ_ENABLE_MASK (1 << NETA_HWF_TXQ_ENABLE_BIT)
/*-----------------------------------------------------------------------------------*/
#define NETA_HWF_ACCEPTED_CNTR(p) (NETA_REG_BASE(p) + 0x1d50)
#define NETA_HWF_YELLOW_DROP_CNTR(p) (NETA_REG_BASE(p) + 0x1d54)
#define NETA_HWF_GREEN_DROP_CNTR(p) (NETA_REG_BASE(p) + 0x1d58)
#define NETA_HWF_THRESH_DROP_CNTR(p) (NETA_REG_BASE(p) + 0x1d5c)
#define NETA_HWF_MEMORY_REG(p) (NETA_REG_BASE(p) + 0x1d60)
/* Hardware Forwarding TX access gap register */
#define NETA_HWF_TX_GAP_REG(p) (NETA_REG_BASE(p) + 0x1d6C)
#define NETA_HWF_SMALL_TX_GAP_BIT 0
#define NETA_HWF_SMALL_TX_GAP_MASK (1 << NETA_HWF_SMALL_TX_GAP_BIT)
/*-----------------------------------------------------------------------------------*/
/**************************** NETA General Registers ***********************/
/* Cross Bar registers per Giga Unit */
#define NETA_MBUS_RETRY_REG(p) (NETA_REG_BASE((p) & ~0x1) + 0x2010)
#define NETA_MBUS_RETRY_DISABLE_BIT 16
#define NETA_MBUS_RETRY_DISABLE_MASK (1 << NETA_MBUS_RETRY_DISABLE_BIT)
#define NETA_MBUS_RETRY_CYCLES_OFFS 0
#define NETA_MBUS_RETRY_CYCLES_MASK (0xFF << NETA_MBUS_RETRY_CYCLES_OFFS)
#define NETA_MBUS_RETRY_CYCLES(val) ((val) << NETA_MBUS_RETRY_CYCLES_OFFS)
/*-------------------------------------------------------------------------------*/
#define NETA_MBUS_ARBITER_REG(p) (NETA_REG_BASE((p) & ~0x1) + 0x20C0)
/*-------------------------------------------------------------------------------*/
/* PACC - Port Acceleration Register */
#define NETA_ACC_MODE_REG(p) (NETA_REG_BASE(p) + 0x2500)
#define NETA_ACC_MODE_OFFS 0
#define NETA_ACC_MODE_ALL_MASK (7 << NETA_ACC_MODE_OFFS)
#define NETA_ACC_MODE_MASK(mode) ((mode) << NETA_ACC_MODE_OFFS)
#define NETA_ACC_MODE_LEGACY 0
#define NETA_ACC_MODE_EXT 1
#define NETA_ACC_MODE_EXT_BMU 2
#define NETA_ACC_MODE_EXT_PNC 3
#define NETA_ACC_MODE_EXT_PNC_BMU 4
/*-------------------------------------------------------------------------------*/
#define NETA_BM_ADDR_REG(p) (NETA_REG_BASE(p) + 0x2504)
#define NETA_CPU_MAP_REG(p, cpu) (NETA_REG_BASE(p) + 0x2540 + ((cpu) << 2))
#define NETA_CPU_RXQ_ACCESS_OFFS 0
#define NETA_CPU_RXQ_ACCESS_ALL_MASK (0xFF << NETA_CPU_RXQ_ACCESS_OFFS)
#define NETA_CPU_RXQ_ACCESS_MASK(q) (1 << (NETA_CPU_RXQ_ACCESS_OFFS + (q)))
#define NETA_CPU_TXQ_ACCESS_OFFS 8
#define NETA_CPU_TXQ_ACCESS_ALL_MASK (0xFF << NETA_CPU_TXQ_ACCESS_OFFS)
#define NETA_CPU_TXQ_ACCESS_MASK(q) (1 << (NETA_CPU_TXQ_ACCESS_OFFS + (q)))
/* Interrupt coalescing mechanism */
#define NETA_RXQ_INTR_TIME_COAL_REG(p, q) (NETA_REG_BASE(p) + 0x2580 + ((q) << 2))
/* Exception Interrupt Port/Queue Cause register */
#define NETA_INTR_NEW_CAUSE_REG(p) (NETA_REG_BASE(p) + 0x25A0)
#define NETA_INTR_NEW_MASK_REG(p) (NETA_REG_BASE(p) + 0x25A4)
#ifdef CONFIG_MV_PON
# define GPON_CAUSE_TXQ_SENT_SUM_OFFS 0
# define GPON_CAUSE_TXQ_SENT_SUM_MASK (3 << GPON_CAUSE_TXQ_SENT_SUM_OFFS)
#endif /* CONFIG_MV_PON */
#define NETA_CAUSE_TXQ_SENT_DESC_OFFS 0
#define NETA_CAUSE_TXQ_SENT_DESC_BIT(q) (NETA_CAUSE_TXQ_SENT_DESC_OFFS + (q))
#define NETA_CAUSE_TXQ_SENT_DESC_ALL_MASK (0xFF << NETA_CAUSE_TXQ_SENT_DESC_OFFS)
#define NETA_CAUSE_TXQ_SENT_DESC_MASK(q) (1 << (NETA_CAUSE_TXQ_SENT_DESC_BIT(q)))
#define NETA_CAUSE_RXQ_OCCUP_DESC_OFFS 8
#define NETA_CAUSE_RXQ_OCCUP_DESC_BIT(q) (NETA_CAUSE_RXQ_OCCUP_DESC_OFFS + (q))
#define NETA_CAUSE_RXQ_OCCUP_DESC_ALL_MASK (0xFF << NETA_CAUSE_RXQ_OCCUP_DESC_OFFS)
#define NETA_CAUSE_RXQ_OCCUP_DESC_MASK(q) (1 << (NETA_CAUSE_RXQ_OCCUP_DESC_BIT(q)))
#define NETA_CAUSE_RXQ_FREE_DESC_OFFS 16
#define NETA_CAUSE_RXQ_FREE_DESC_BIT(q) (NETA_CAUSE_RXQ_FREE_DESC_OFFS + (q))
#define NETA_CAUSE_RXQ_FREE_DESC_MASK(q) (1 << (NETA_CAUSE_RXQ_FREE_DESC_BIT(q)))
#define NETA_CAUSE_OLD_REG_SUM_BIT 29
#define NETA_CAUSE_OLD_REG_SUM_MASK (1 << NETA_CAUSE_OLD_REG_SUM_BIT)
#define NETA_CAUSE_TX_ERR_SUM_BIT 30
#define NETA_CAUSE_TX_ERR_SUM_MASK (1 << NETA_CAUSE_TX_ERR_SUM_BIT)
#define NETA_CAUSE_MISC_SUM_BIT 31
#define NETA_CAUSE_MISC_SUM_MASK (1 << NETA_CAUSE_MISC_SUM_BIT)
#define NETA_CAUSE_TXQ_SENT_DESC_TXP_SUM 4 /* How many Tx ports are summarized by each bit */
/*-------------------------------------------------------------------------------*/
/* Data Path Port/Queue Cause Register */
#define NETA_INTR_OLD_CAUSE_REG(p) (NETA_REG_BASE(p) + 0x25A8)
#define NETA_INTR_OLD_MASK_REG(p) (NETA_REG_BASE(p) + 0x25AC)
#ifdef CONFIG_MV_PON
# define GPON_CAUSE_TXQ_BUF_OFFS 0
# define GPON_CAUSE_TXQ_BUF_MASK (3 << GPON_CAUSE_TXQ_BUF_OFFS)
#endif /* CONFIG_MV_PON */
#define NETA_CAUSE_TXQ_BUF_OFFS 0
#define NETA_CAUSE_TXQ_BUF_BIT(q) (NETA_CAUSE_TXQ_BUF_OFFS + (q))
#define NETA_CAUSE_TXQ_BUF_ALL_MASK (0xFF << NETA_CAUSE_TXQ_BUF_OFFS)
#define NETA_CAUSE_TXQ_BUF_MASK(q) (1 << (NETA_CAUSE_TXQ_BUF_BIT(q)))
#define NETA_CAUSE_RXQ_PKT_OFFS 8
#define NETA_CAUSE_RXQ_PKT_BIT(q) (NETA_CAUSE_RXQ_PKT_OFFS + (q))
#define NETA_CAUSE_RXQ_PKT_ALL_MASK (0xFF << NETA_CAUSE_RXQ_PKT_OFFS)
#define NETA_CAUSE_RXQ_PKT_MASK(q) (1 << (NETA_CAUSE_RXQ_PKT_BIT(q)))
#define NETA_CAUSE_RXQ_ERROR_OFFS 16
#define NETA_CAUSE_RXQ_ERROR_BIT(q) (NETA_CAUSE_RXQ_ERROR_OFFS + (q))
#define NETA_CAUSE_RXQ_ERROR_ALL_MASK (0xFF << NETA_CAUSE_RXQ_ERROR_OFFS)
#define NETA_CAUSE_RXQ_ERROR_MASK(q) (1 << (NETA_CAUSE_RXQ_ERROR_BIT(q)))
#define NETA_CAUSE_NEW_REG_SUM_BIT 29
#define NETA_CAUSE_NEW_REG_SUM_MASK (1 << NETA_CAUSE_NEW_REG_SUM_BIT)
/*-------------------------------------------------------------------------------*/
/* Misc Port Cause Register */
#define NETA_INTR_MISC_CAUSE_REG(p) (NETA_REG_BASE(p) + 0x25B0)
#define NETA_INTR_MISC_MASK_REG(p) (NETA_REG_BASE(p) + 0x25B4)
#define NETA_CAUSE_PHY_STATUS_CHANGE_BIT 0
#define NETA_CAUSE_PHY_STATUS_CHANGE_MASK (1 << NETA_CAUSE_PHY_STATUS_CHANGE_BIT)
#define NETA_CAUSE_LINK_CHANGE_BIT 1
#define NETA_CAUSE_LINK_CHANGE_MASK (1 << NETA_CAUSE_LINK_CHANGE_BIT)
#define NETA_CAUSE_PTP_BIT 4
#define NETA_CAUSE_INTERNAL_ADDR_ERR_BIT 7
#define NETA_CAUSE_RX_OVERRUN_BIT 8
#define NETA_CAUSE_RX_CRC_ERROR_BIT 9
#define NETA_CAUSE_RX_LARGE_PKT_BIT 10
#define NETA_CAUSE_TX_UNDERUN_BIT 11
#define NETA_CAUSE_PRBS_ERR_BIT 12
#define NETA_CAUSE_PSC_SYNC_CHANGE_BIT 13
#define NETA_CAUSE_SERDES_SYNC_ERR_BIT 14
#define NETA_CAUSE_BMU_ALLOC_ERR_OFFS 16
#define NETA_CAUSE_BMU_ALLOC_ERR_ALL_MASK (0xF << NETA_CAUSE_BMU_ALLOC_ERR_OFFS)
#define NETA_CAUSE_BMU_ALLOC_ERR_MASK(pool) (1 << (NETA_CAUSE_BMU_ALLOC_ERR_OFFS + (pool)))
#define NETA_CAUSE_TXQ_ERROR_OFFS 24
#define NETA_CAUSE_TXQ_ERROR_BIT(q) (NETA_CAUSE_TXQ_ERROR_OFFS + (q))
#define NETA_CAUSE_TXQ_ERROR_ALL_MASK (0xFF << NETA_CAUSE_TXQ_ERROR_OFFS)
#define NETA_CAUSE_TXQ_ERROR_MASK(q) (1 << (NETA_CAUSE_TXQ_ERROR_BIT(q)))
#ifdef CONFIG_MV_PON
# define GPON_CAUSE_TXQ_ERROR_OFFS 24
# define GPON_CAUSE_TXQ_ERROR_MASK (0x3 << GPON_CAUSE_TXQ_ERROR_OFFS)
#endif /* CONFIG_MV_PON */
/*-------------------------------------------------------------------------------*/
/* one register for all queues - problem for Multi-Core */
#define NETA_INTR_ENABLE_REG(p) (NETA_REG_BASE(p) + 0x25B8)
#define NETA_RXQ_PKT_INTR_ENABLE_OFFS 0
#define NETA_RXQ_PKT_INTR_ENABLE_ALL_MASK (0xFF << NETA_RXQ_PKT_INTR_ENABLE_OFFS)
#define NETA_RXQ_PKT_INTR_ENABLE_MASK(q) ((1 << NETA_RXQ_PKT_INTR_ENABLE_OFFS + (q))
#define NETA_TXQ_PKT_INTR_ENABLE_OFFS 8
#define NETA_TXQ_PKT_INTR_ENABLE_ALL_MASK (0xFF << NETA_TXQ_PKT_INTR_ENABLE_OFFS)
#define NETA_TXQ_PKT_INTR_ENABLE_MASK(q) ((1 << NETA_TXQ_PKT_INTR_ENABLE_OFFS + (q))
/*-------------------------------------------------------------------------------*/
#define NETA_VERSION_REG(p) (NETA_REG_BASE(p) + 0x25BC)
#define NETA_VERSION_OFFS 0
#define NETA_VERSION_MASK (0xFF << NETA_VERSION_OFFS)
#define NETA_LEGACY_DBA_REG(p) (NETA_REG_BASE(p) + 0x25F0)
#define NETA_LEGACY_DBA_OFFS 0
#define NETA_LEGACY_DBA_MASK (0x1 << NETA_LEGACY_DBA_OFFS)
/* Serdes registres: 0x72E00-0x72FFC */
#ifdef CONFIG_MV_PON
/* Extra registers for GPON port only */
# define GPON_TXQ_INTR_ENABLE_REG(txq) (MV_PON_REG_BASE + 0x0480 + (txq / 32) * 4)
# define GPON_TXQ_INTR_NEW_CAUSE_REG(txq) (MV_PON_REG_BASE + 0x0500 + (txq / 32) * 8)
# define GPON_TXQ_INTR_NEW_MASK_REG(txq) (MV_PON_REG_BASE + 0x0504 + (txq / 32) * 8)
# define GPON_TXQ_INTR_OLD_CAUSE_REG(txq) (MV_PON_REG_BASE + 0x0540 + (txq / 32) * 8)
# define GPON_TXQ_INTR_OLD_MASK_REG(txq) (MV_PON_REG_BASE + 0x0544 + (txq / 32) * 8)
# define GPON_TXQ_INTR_ERR_CAUSE_REG(txq) (MV_PON_REG_BASE + 0x0580 + (txq / 32) * 8)
# define GPON_TXQ_INTR_ERR_MASK_REG(txq) (MV_PON_REG_BASE + 0x0584 + (txq / 32) * 8)
#endif /* CONFIG_MV_PON */
/*-------------------------------------------------------------------------------*/
#ifdef MV_ETH_GMAC_NEW
/******* New GigE MAC registers *******/
#define NETA_GMAC_CTRL_0_REG(p) (NETA_REG_BASE(p) + 0x2C00)
#define NETA_GMAC_PORT_EN_BIT 0
#define NETA_GMAC_PORT_EN_MASK (1 << NETA_GMAC_PORT_EN_BIT)
#define NETA_GMAC_PORT_TYPE_BIT 1
#define NETA_GMAC_PORT_TYPE_MASK (1 << NETA_GMAC_PORT_TYPE_BIT)
#define NETA_GMAC_PORT_TYPE_SGMII (0 << NETA_GMAC_PORT_TYPE_BIT)
#define NETA_GMAC_PORT_TYPE_1000X (1 << NETA_GMAC_PORT_TYPE_BIT)
#define NETA_GMAC_MAX_RX_SIZE_OFFS 2
#define NETA_GMAC_MAX_RX_SIZE_MASK (0x1FFF << NETA_GMAC_MAX_RX_SIZE_OFFS)
#define NETA_GMAC_MIB_CNTR_EN_BIT 15
#define NETA_GMAC_MIB_CNTR_EN_MASK (1 << NETA_GMAC_MIB_CNTR_EN_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_GMAC_CTRL_1_REG(p) (NETA_REG_BASE(p) + 0x2C04)
#define NETA_GMAC_CTRL_2_REG(p) (NETA_REG_BASE(p) + 0x2C08)
#define NETA_GMAC_PSC_ENABLE_BIT 3
#define NETA_GMAC_PSC_ENABLE_MASK (1 << NETA_GMAC_PSC_ENABLE_BIT)
#define NETA_GMAC_PORT_RGMII_BIT 4
#define NETA_GMAC_PORT_RGMII_MASK (1 << NETA_GMAC_PORT_RGMII_BIT)
#define NETA_GMAC_PORT_RESET_BIT 6
#define NETA_GMAC_PORT_RESET_MASK (1 << NETA_GMAC_PORT_RESET_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_GMAC_AN_CTRL_REG(p) (NETA_REG_BASE(p) + 0x2C0C)
#define NETA_FORCE_LINK_FAIL_BIT 0
#define NETA_FORCE_LINK_FAIL_MASK (1 << NETA_FORCE_LINK_FAIL_BIT)
#define NETA_FORCE_LINK_PASS_BIT 1
#define NETA_FORCE_LINK_PASS_MASK (1 << NETA_FORCE_LINK_PASS_BIT)
#define NETA_SET_MII_SPEED_100_BIT 5
#define NETA_SET_MII_SPEED_100_MASK (1 << NETA_SET_MII_SPEED_100_BIT)
#define NETA_SET_GMII_SPEED_1000_BIT 6
#define NETA_SET_GMII_SPEED_1000_MASK (1 << NETA_SET_GMII_SPEED_1000_BIT)
#define NETA_ENABLE_SPEED_AUTO_NEG_BIT 7
#define NETA_ENABLE_SPEED_AUTO_NEG_MASK (1 << NETA_ENABLE_SPEED_AUTO_NEG_BIT)
#define NETA_SET_FLOW_CONTROL_BIT 8
#define NETA_SET_FLOW_CONTROL_MASK (1 << NETA_SET_FLOW_CONTROL_BIT)
#define NETA_FLOW_CONTROL_ADVERTISE_BIT 9
#define NETA_FLOW_CONTROL_ADVERTISE_MASK (1 << NETA_FLOW_CONTROL_ADVERTISE_BIT)
#define NETA_FLOW_CONTROL_ASYMETRIC_BIT 10
#define NETA_FLOW_CONTROL_ASYMETRIC_MASK (1 << NETA_FLOW_CONTROL_ASYMETRIC_BIT)
#define NETA_ENABLE_FLOW_CONTROL_AUTO_NEG_BIT 11
#define NETA_ENABLE_FLOW_CONTROL_AUTO_NEG_MASK (1 << NETA_ENABLE_FLOW_CONTROL_AUTO_NEG_BIT)
#define NETA_SET_FULL_DUPLEX_BIT 12
#define NETA_SET_FULL_DUPLEX_MASK (1 << NETA_SET_FULL_DUPLEX_BIT)
#define NETA_ENABLE_DUPLEX_AUTO_NEG_BIT 13
#define NETA_ENABLE_DUPLEX_AUTO_NEG_MASK (1 << NETA_ENABLE_DUPLEX_AUTO_NEG_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_GMAC_STATUS_REG(p) (NETA_REG_BASE(p) + 0x2C10)
#define NETA_GMAC_LINK_UP_BIT 0
#define NETA_GMAC_LINK_UP_MASK (1 << NETA_GMAC_LINK_UP_BIT)
#define NETA_GMAC_SPEED_1000_BIT 1
#define NETA_GMAC_SPEED_1000_MASK (1 << NETA_GMAC_SPEED_1000_BIT)
#define NETA_GMAC_SPEED_100_BIT 2
#define NETA_GMAC_SPEED_100_MASK (1 << NETA_GMAC_SPEED_100_BIT)
#define NETA_GMAC_FULL_DUPLEX_BIT 3
#define NETA_GMAC_FULL_DUPLEX_MASK (1 << NETA_GMAC_FULL_DUPLEX_BIT)
#define NETA_RX_FLOW_CTRL_ENABLE_BIT 4
#define NETA_RX_FLOW_CTRL_ENABLE_MASK (1 << NETA_RX_FLOW_CTRL_ENABLE_BIT)
#define NETA_TX_FLOW_CTRL_ENABLE_BIT 5
#define NETA_TX_FLOW_CTRL_ENABLE_MASK (1 << NETA_TX_FLOW_CTRL_ENABLE_BIT)
#define NETA_RX_FLOW_CTRL_ACTIVE_BIT 6
#define NETA_RX_FLOW_CTRL_ACTIVE_MASK (1 << NETA_RX_FLOW_CTRL_ACTIVE_BIT)
#define NETA_TX_FLOW_CTRL_ACTIVE_BIT 7
#define NETA_TX_FLOW_CTRL_ACTIVE_MASK (1 << NETA_TX_FLOW_CTRL_ACTIVE_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_GMAC_SERIAL_REG(p) (NETA_REG_BASE(p) + 0x2C14)
#define NETA_GMAC_FIFO_PARAM_0_REG(p) (NETA_REG_BASE(p) + 0x2C18)
#define NETA_GMAC_FIFO_PARAM_1_REG(p) (NETA_REG_BASE(p) + 0x2C1C)
#define NETA_GMAC_CAUSE_REG(p) (NETA_REG_BASE(p) + 0x2C20)
#define NETA_GMAC_MASK_REG(p) (NETA_REG_BASE(p) + 0x2C24)
#define NETA_GMAC_SERDES_CFG_0_REG(p) (NETA_REG_BASE(p) + 0x2C28)
#define NETA_GMAC_SERDES_CFG_1_REG(p) (NETA_REG_BASE(p) + 0x2C2C)
#define NETA_GMAC_SERDES_CFG_2_REG(p) (NETA_REG_BASE(p) + 0x2C30)
#define NETA_GMAC_SERDES_CFG_3_REG(p) (NETA_REG_BASE(p) + 0x2C34)
#define NETA_GMAC_PRBS_STATUS_REG(p) (NETA_REG_BASE(p) + 0x2C38)
#define NETA_GMAC_PRBS_ERR_CNTR_REG(p) (NETA_REG_BASE(p) + 0x2C3C)
#define NETA_GMAC_STATUS_1_REG(p) (NETA_REG_BASE(p) + 0x2C40)
#define NETA_GMAC_MIB_CTRL_REG(p) (NETA_REG_BASE(p) + 0x2C44)
#define NETA_GMAC_CTRL_3_REG(p) (NETA_REG_BASE(p) + 0x2C48)
#define NETA_GMAC_IPG_SIZE_OFFS 6
#define NETA_GMAC_IPG_SIZE_ALL_MASK (0x1FF << NETA_GMAC_IPG_SIZE_OFFS)
#define NETA_GMAC_IPG_SIZE_MASK(size) ((size) << NETA_GMAC_IPG_SIZE_OFFS)
#define NETA_GMAC_QSGMII_REG(p) (NETA_REG_BASE(p) + 0x2C4C)
#define NETA_GMAC_QSGMII_STATUS_REG(p) (NETA_REG_BASE(p) + 0x2C50)
#define NETA_GMAC_QSGMII_ERR_CNTR_REG(p) (NETA_REG_BASE(p) + 0x2C54)
/* 8 FC Timer registers: 0x2c58 .. 0x2c74 */
#define NETA_GMAC_FC_TIMER_REG(p, r) (NETA_REG_BASE(p) + 0x2C58 + ((r) << 2))
/* 4 DSA Tag registers: 0x2c78 .. 0x2c84 */
#define NETA_GMAC_DSA_TAG_REG(p, r) (NETA_REG_BASE(p) + 0x2C78 + ((r) << 2))
#define NETA_GMAC_FC_WIN_0_REG(p) (NETA_REG_BASE(p) + 0x2C88)
#define NETA_GMAC_FC_WIN_1_REG(p) (NETA_REG_BASE(p) + 0x2C8C)
#define NETA_GMAC_CTRL_4_REG(p) (NETA_REG_BASE(p) + 0x2C90)
#define NETA_GMAC_SERIAL_1_REG(p) (NETA_REG_BASE(p) + 0x2C94)
#define NETA_LOW_POWER_CTRL_0_REG(p) (NETA_REG_BASE(p) + 0x2CC0)
/* Low Power Idle Control #1 register */
#define NETA_LOW_POWER_CTRL_1_REG(p) (NETA_REG_BASE(p) + 0x2CC4)
#define NETA_LPI_REQUEST_EN_BIT 0
#define NETA_LPI_REQUEST_EN_MASK (1 << NETA_LPI_REQUEST_EN_BIT)
#define NETA_LPI_REQUEST_FORCE_BIT 1
#define NETA_LPI_REQUEST_FORCE_MASK (1 << NETA_LPI_REQUEST_FORCE_BIT)
#define NETA_LPI_MANUAL_MODE_BIT 2
#define NETA_LPI_MANUAL_MODE_MASK (1 << NETA_LPI_MANUAL_MODE_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_LOW_POWER_CTRL_2_REG(p) (NETA_REG_BASE(p) + 0x2CC8)
#define NETA_LOW_POWER_STATUS_REG(p) (NETA_REG_BASE(p) + 0x2CCC)
#define NETA_LOW_POWER_CNTR_REG(p) (NETA_REG_BASE(p) + 0x2CD0)
#endif /* MV_ETH_GMAC_NEW */
#ifdef MV_PON_MIB_SUPPORT
/* Special registers for PON MIB support */
#define NETA_PON_MIB_MAX_GEM_PID 32
#define NETA_PON_MIB_RX_CTRL_REG(idx) (MV_PON_REG_BASE + 0x3800 + ((idx) << 2))
#define NETA_PON_MIB_RX_DEF_REG (MV_PON_REG_BASE + 0x3880)
#define NETA_PON_MIB_RX_GEM_PID_OFFS 0
#define NETA_PON_MIB_RX_GEM_PID_ALL_MASK (0xFFF << NETA_PON_MIB_RX_GEM_PID_OFFS)
#define NETA_PON_MIB_RX_GEM_PID_MASK(pid) ((pid) << NETA_PON_MIB_RX_GEM_PID_OFFS)
#define NETA_PON_MIB_RX_MIB_NO_OFFS 12
#define NETA_PON_MIB_RX_MIB_NO_MASK (0x7 << NETA_PON_MIB_RX_MIB_NO_OFFS)
#define NETA_PON_MIB_RX_MIB_NO(mib) ((mib) << NETA_PON_MIB_RX_MIB_NO_OFFS)
#define NETA_PON_MIB_RX_VALID_BIT 15
#define NETA_PON_MIB_RX_VALID_MASK (1 << NETA_PON_MIB_RX_VALID_BIT)
#endif /* MV_PON_MIB_SUPPORT */
/******************************** NETA TX Registers *****************************/
#define NETA_TXQ_BASE_ADDR_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1800 + ((q) << 2))
#define NETA_TXQ_SIZE_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1820 + ((q) << 2))
#define NETA_TXQ_DESC_NUM_OFFS 0
#define NETA_TXQ_DESC_NUM_ALL_MASK (0x3FFF << NETA_TXQ_DESC_NUM_OFFS)
#define NETA_TXQ_DESC_NUM_MASK(size) ((size) << NETA_TXQ_DESC_NUM_OFFS)
#define NETA_TXQ_SENT_DESC_TRESH_OFFS 16
#define NETA_TXQ_SENT_DESC_TRESH_ALL_MASK (0x3FFF << NETA_TXQ_SENT_DESC_TRESH_OFFS)
#define NETA_TXQ_SENT_DESC_TRESH_MASK(coal) ((coal) << NETA_TXQ_SENT_DESC_TRESH_OFFS)
#define NETA_TXQ_STATUS_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1840 + ((q) << 2))
#define NETA_TXQ_PENDING_DESC_OFFS 0
#define NETA_TXQ_PENDING_DESC_MASK (0x3FFF << NETA_TXQ_PENDING_DESC_OFFS)
#define NETA_TXQ_SENT_DESC_OFFS 16
#define NETA_TXQ_SENT_DESC_MASK (0x3FFF << NETA_TXQ_SENT_DESC_OFFS)
#define NETA_TXQ_UPDATE_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1860 + ((q) << 2))
#define NETA_TXQ_ADD_PENDING_OFFS 0
#define NETA_TXQ_ADD_PENDING_MASK (0xFF << NETA_TXQ_ADD_PENDING_OFFS)
#define NETA_TXQ_DEC_SENT_OFFS 16
#define NETA_TXQ_DEC_SENT_MASK (0xFF << NETA_TXQ_DEC_SENT_OFFS)
#define NETA_TXQ_INDEX_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1880 + ((q) << 2))
#define NETA_TXQ_NEXT_DESC_INDEX_OFFS 0
#define NETA_TXQ_NEXT_DESC_INDEX_MASK (0x3FFF << NETA_TXQ_NEXT_DESC_INDEX_OFFS)
#define NETA_TXQ_SENT_DESC_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x18A0 + ((q) << 2))
/* Use NETA_TXQ_SENT_DESC_OFFS and NETA_TXQ_SENT_DESC_MASK */
#ifdef MV_ETH_PMT_NEW
#define NETA_TX_BAD_FCS_CNTR_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x18C0)
#define NETA_TX_DROP_CNTR_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x18C4)
#endif /* MV_ETH_PMT_NEW */
#define NETA_PORT_TX_RESET_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x18F0)
#define NETA_PORT_TX_DMA_RESET_BIT 0
#define NETA_PORT_TX_DMA_RESET_MASK (1 << NETA_PORT_TX_DMA_RESET_BIT)
#ifdef MV_ETH_PMT_NEW
#define NETA_TX_ADD_BYTES_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x18FC)
#define NETA_TX_NEW_BYTES_OFFS 0
#define NETA_TX_NEW_BYTES_ALL_MASK (0xFFFF << NETA_TX_NEW_BYTES_OFFS)
#define NETA_TX_NEW_BYTES_MASK(bytes) ((bytes) << NETA_TX_NEW_BYTES_OFFS)
#define NETA_TX_NEW_BYTES_TXQ_OFFS 28
#define NETA_TX_NEW_BYTES_TXQ_MASK(txq) ((txq) << NETA_TX_NEW_BYTES_TXQ_OFFS)
#define NETA_TX_NEW_BYTES_COLOR_BIT 31
#define NETA_TX_NEW_BYTES_COLOR_GREEN (0 << NETA_TX_NEW_BYTES_COLOR_BIT)
#define NETA_TX_NEW_BYTES_COLOR_YELLOW (1 << NETA_TX_NEW_BYTES_COLOR_BIT)
/*-------------------------------------------------------------------------------*/
#define NETA_TXQ_NEW_BYTES_REG(p, txp, txq) (NETA_TX_REG_BASE((p), (txp)) + 0x1900 + ((txq) << 2))
#define NETA_TX_MAX_MH_REGS 15
#define NETA_TX_MH_REG(p, txp, idx) (NETA_TX_REG_BASE((p), (txp)) + 0x1944 + ((idx) << 2))
/*************** Packet Modification Registers *******************/
#define NETA_TX_PMT_ACCESS_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x1980)
#define NETA_TX_PMT_FIFO_THRESH_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x1984)
#define NETA_TX_PMT_MTU_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x1988)
#define NETA_TX_PMT_MAX_ETHER_TYPES 4
#define NETA_TX_PMT_ETHER_TYPE_REG(p, txp, i) (NETA_TX_REG_BASE((p), (txp)) + 0x1990 + ((i) << 2))
#define NETA_TX_PMT_DEF_VLAN_CFG_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19a0)
#define NETA_TX_PMT_DEF_DSA_1_CFG_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19a4)
#define NETA_TX_PMT_DEF_DSA_2_CFG_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19a8)
#define NETA_TX_PMT_DEF_DSA_SRC_DEV_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19ac)
#define NETA_TX_PMT_TTL_ZERO_FRWD_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19b0)
#define NETA_TX_PMT_TTL_ZERO_CNTR_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19b4)
#define NETA_TX_PMT_PPPOE_TYPE_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x19c0)
#define NETA_TX_PMT_PPPOE_DATA_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x19c4)
#define NETA_TX_PMT_PPPOE_LEN_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x19c8)
#define NETA_TX_PMT_PPPOE_PROTO_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x19cc)
#define NETA_TX_PMT_CONFIG_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19d0)
#define NETA_TX_PMT_STATUS_1_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19d4)
#define NETA_TX_PMT_STATUS_2_REG(p) (NETA_TX_REG_BASE((p), 0) + 0x19d8)
#else
#define NETA_TX_COLOR_ADD_BYTES_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1900)
#define NETA_TX_GREEN_BYTES_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1908)
#define NETA_TX_YELLOW_BYTES_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x190c)
#define NETA_TX_MAX_MH_REGS 6
#define NETA_TX_MH_REG(p, txp, idx) (NETA_TX_REG_BASE((p), (txp)) + 0x1910 + ((idx) << 2))
#define NETA_TX_DSA_SRC_DEV_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x192C)
#define NETA_TX_MAX_ETH_TYPE_REGS 4
#define NETA_TX_ETH_TYPE_REG(p, txp, idx) (NETA_TX_REG_BASE((p), (txp)) + 0x1930 + ((idx) << 2))
#define NETA_TX_PMT_SIZE 256
#define NETA_TX_PMT_W0_MASK 0xFFFF
#define NETA_TX_PMT_W1_MASK 0xFFFFFFFF
#define NETA_TX_PMT_W2_MASK 0x7FFFFFF
#define NETA_TX_PMT_REG(p) (NETA_TX_REG_BASE(p, 0) + 0x1940)
#define NETA_TX_PMT_W0_REG(p) (NETA_TX_REG_BASE(p, 0) + 0x1944)
#define NETA_TX_PMT_W1_REG(p) (NETA_TX_REG_BASE(p, 0) + 0x1948)
#define NETA_TX_PMT_W2_REG(p) (NETA_TX_REG_BASE(p, 0) + 0x194c)
#endif /* MV_ETH_PMT_NEW */
#ifdef MV_ETH_WRR_NEW
/*********************** New TX WRR EJP Registers ********************************/
#define NETA_TX_CMD_1_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a00)
#define NETA_TX_EJP_RESET_BIT 0
#define NETA_TX_EJP_RESET_MASK (1 << NETA_TX_EJP_RESET_BIT)
#define NETA_TX_PTP_SYNC_BIT 1
#define NETA_TX_PTP_SYNC_MASK (1 << NETA_TX_EJP_RESET_BIT)
#define NETA_TX_EJP_ENABLE_BIT 2
#define NETA_TX_EJP_ENABLE_MASK (1 << NETA_TX_EJP_ENABLE_BIT)
#define NETA_TX_LEGACY_WRR_BIT 3
#define NETA_TX_LEGACY_WRR_MASK (1 << NETA_TX_LEGACY_WRR_BIT)
/*-----------------------------------------------------------------------------------------------*/
/* Transmit Queue Fixed Priority Configuration (TQFPC) */
#define NETA_TX_FIXED_PRIO_CFG_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a04)
#define NETA_TX_FIXED_PRIO_OFFS 0
#define NETA_TX_FIXED_PRIO_MASK (0xFF << NETA_TX_FIXED_PRIO_OFFS)
/*-----------------------------------------------------------------------------------------------*/
/* Basic Refill No of Clocks (BRC) */
#define NETA_TX_REFILL_PERIOD_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a08)
#define NETA_TX_REFILL_CLOCKS_OFFS 0
#define NETA_TX_REFILL_CLOCKS_MIN 16
#define NETA_TX_REFILL_CLOCKS_MASK (0xFFFF << NETA_TX_REFILL_RATE_CLOCKS_MASK)
/*-----------------------------------------------------------------------------------------------*/
/* Port Maximum Transmit Unit (PMTU) */
#define NETA_TXP_MTU_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a0c)
#define NETA_TXP_MTU_OFFS 0
#define NETA_TXP_MTU_MAX 0x3FFFF
#define NETA_TXP_MTU_ALL_MASK (NETA_TXP_MTU_MAX << NETA_TXP_MTU_OFFS)
#define NETA_TXP_MTU_MASK(mtu) ((mtu) << NETA_TXP_MTU_OFFS)
/*-----------------------------------------------------------------------------------------------*/
/* Port Bucket Refill (PRefill) */
#define NETA_TXP_REFILL_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a10)
#define NETA_TXP_REFILL_TOKENS_OFFS 0
#define NETA_TXP_REFILL_TOKENS_MAX 0x7FFFF
#define NETA_TXP_REFILL_TOKENS_ALL_MASK (NETA_TXP_REFILL_TOKENS_MAX << NETA_TXP_REFILL_TOKENS_OFFS)
#define NETA_TXP_REFILL_TOKENS_MASK(val) ((val) << NETA_TXP_REFILL_TOKENS_OFFS)
#define NETA_TXP_REFILL_PERIOD_OFFS 20
#define NETA_TXP_REFILL_PERIOD_MAX 0x3FF
#define NETA_TXP_REFILL_PERIOD_ALL_MASK (NETA_TXP_REFILL_PERIOD_MAX << NETA_TXP_REFILL_PERIOD_OFFS)
#define NETA_TXP_REFILL_PERIOD_MASK(val) ((val) << NETA_TXP_REFILL_PERIOD_OFFS)
/*-----------------------------------------------------------------------------------------------*/
/* Port Maximum Token Bucket Size (PMTBS) */
#define NETA_TXP_TOKEN_SIZE_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a14)
#define NETA_TXP_TOKEN_SIZE_MAX 0xFFFFFFFF
/*-----------------------------------------------------------------------------------------------*/
/* Port Token Bucket Counter (PMTBS) */
#define NETA_TXP_TOKEN_CNTR_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1a18)
#define NETA_TXP_TOKEN_CNTR_MAX 0xFFFFFFFF
/*-----------------------------------------------------------------------------------------------*/
/* Queue Bucket Refill (QRefill) */
#define NETA_TXQ_REFILL_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1a20 + ((q) << 2))
#define NETA_TXQ_REFILL_TOKENS_OFFS 0
#define NETA_TXQ_REFILL_TOKENS_MAX 0x7FFFF
#define NETA_TXQ_REFILL_TOKENS_ALL_MASK (NETA_TXQ_REFILL_TOKENS_MAX << NETA_TXQ_REFILL_TOKENS_OFFS)
#define NETA_TXQ_REFILL_TOKENS_MASK(val) ((val) << NETA_TXQ_REFILL_TOKENS_OFFS)
#define NETA_TXQ_REFILL_PERIOD_OFFS 20
#define NETA_TXQ_REFILL_PERIOD_MAX 0x3FF
#define NETA_TXQ_REFILL_PERIOD_ALL_MASK (NETA_TXQ_REFILL_PERIOD_MAX << NETA_TXQ_REFILL_PERIOD_OFFS)
#define NETA_TXQ_REFILL_PERIOD_MASK(val) ((val) << NETA_TXQ_REFILL_PERIOD_OFFS)
/*-----------------------------------------------------------------------------------------------*/
/* Queue Maximum Token Bucket Size (QMTBS) */
#define NETA_TXQ_TOKEN_SIZE_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1a40 + ((q) << 2))
#define NETA_TXQ_TOKEN_SIZE_MAX 0x7FFFFFFF
/*-----------------------------------------------------------------------------------------------*/
/* Queue Token Bucket Counter (PMTBS) */
#define NETA_TXQ_TOKEN_CNTR_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1a60 + ((q) << 2))
#define NETA_TXQ_TOKEN_CNTR_MAX 0xFFFFFFFF
/*-----------------------------------------------------------------------------------------------*/
/* Transmit Queue Arbiter Configuration (TQxAC) */
#define NETA_TXQ_WRR_ARBITER_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1a80 + ((q) << 2))
#define NETA_TXQ_WRR_WEIGHT_OFFS 0
#define NETA_TXQ_WRR_WEIGHT_MAX 0xFF
#define NETA_TXQ_WRR_WEIGHT_ALL_MASK (NETA_TXQ_WRR_WEIGHT_MAX << NETA_TXQ_WRR_WEIGHT_OFFS)
#define NETA_TXQ_WRR_WEIGHT_MASK(weigth) ((weigth) << NETA_TXQ_WRR_WEIGHT_OFFS)
#define NETA_TXQ_WRR_BYTE_COUNT_OFFS 8
#define NETA_TXQ_WRR_BYTE_COUNT_MASK (0x3FFFF << NETA_TXQ_WRR_BYTE_COUNT_OFFS)
/*-----------------------------------------------------------------------------------------------*/
/* Transmission Queue IPG (TQxIPG) */
#define NETA_TXQ_EJP_IPG_REG(p, txp, q) (NETA_TX_REG_BASE((p), (txp)) + 0x1aa0 + ((q) << 2))
#define NETA_TXQ_EJP_IPG_OFFS 0
#define NETA_TXQ_EJP_IPG_MASK (0x3FFF << NETA_TXQ_EJP_IPG_OFFS)
/*-----------------------------------------------------------------------------------------------*/
#define NETA_TXP_EJP_HI_LO_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1ab0)
#define NETA_TXP_EJP_HI_ASYNC_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1ab4)
#define NETA_TXP_EJP_LO_ASYNC_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1ab8)
#define NETA_TXP_EJP_SPEED_REG(p, txp) (NETA_TX_REG_BASE((p), (txp)) + 0x1abc)
/*-----------------------------------------------------------------------------------------------*/
#endif /* MV_ETH_WRR_NEW */
/******************** NETA RX EXTENDED DESCRIPTOR ********************************/
#define NETA_DESC_ALIGNED_SIZE 32
#if defined(MV_CPU_BE) && !defined(CONFIG_MV_ETH_BE_WA)
typedef struct neta_rx_desc {
MV_U16 dataSize;
MV_U16 pncInfo;
MV_U32 status;
MV_U32 pncFlowId;
MV_U32 bufPhysAddr;
MV_U16 csumL4;
MV_U16 prefetchCmd;
MV_U32 bufCookie;
MV_U32 hw_cmd;
MV_U32 pncExtra;
} NETA_RX_DESC;
#else
typedef struct neta_rx_desc {
MV_U32 status;
MV_U16 pncInfo;
MV_U16 dataSize;
MV_U32 bufPhysAddr;
MV_U32 pncFlowId;
MV_U32 bufCookie;
MV_U16 prefetchCmd;
MV_U16 csumL4;
MV_U32 pncExtra;
MV_U32 hw_cmd;
} NETA_RX_DESC;
#endif /* MV_CPU_BE && !CONFIG_MV_ETH_BE_WA */
/* "status" word fileds definition */
#define NETA_RX_L3_OFFSET_OFFS 0
#define NETA_RX_L3_OFFSET_MASK (0x7F << NETA_RX_L3_OFFSET_OFFS)
#define NETA_RX_IP_HLEN_OFFS 8
#define NETA_RX_IP_HLEN_MASK (0x1F << NETA_RX_IP_HLEN_OFFS)
#define NETA_RX_BM_POOL_ID_OFFS 13
#define NETA_RX_BM_POOL_ALL_MASK (0x3 << NETA_RX_BM_POOL_ID_OFFS)
#define NETA_RX_BM_POOL_ID_MASK(pool) ((pool) << NETA_RX_BM_POOL_ID_OFFS)
#define NETA_RX_ES_BIT 16
#define NETA_RX_ES_MASK (1 << NETA_RX_ES_BIT)
#define NETA_RX_ERR_CODE_OFFS 17
#define NETA_RX_ERR_CODE_MASK (3 << NETA_RX_ERR_CODE_OFFS)
#define NETA_RX_ERR_CRC (0 << NETA_RX_ERR_CODE_OFFS)
#define NETA_RX_ERR_OVERRUN (1 << NETA_RX_ERR_CODE_OFFS)
#define NETA_RX_ERR_LEN (2 << NETA_RX_ERR_CODE_OFFS)
#define NETA_RX_ERR_RESOURCE (3 << NETA_RX_ERR_CODE_OFFS)
#define NETA_RX_F_DESC_BIT 26
#define NETA_RX_F_DESC_MASK (1 << NETA_RX_F_DESC_BIT)
#define NETA_RX_L_DESC_BIT 27
#define NETA_RX_L_DESC_MASK (1 << NETA_RX_L_DESC_BIT)
#define NETA_RX_L4_CSUM_OK_BIT 30
#define NETA_RX_L4_CSUM_OK_MASK (1 << NETA_RX_L4_CSUM_OK_BIT)
#define NETA_RX_IP4_FRAG_BIT 31
#define NETA_RX_IP4_FRAG_MASK (1 << NETA_RX_IP4_FRAG_BIT)
#ifdef CONFIG_MV_ETH_PNC
#define NETA_RX_L3_OFFS 24
#define NETA_RX_L3_MASK (3 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_UN (0 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP6 (1 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP4 (2 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP4_ERR (3 << NETA_RX_L3_OFFS)
#define NETA_RX_L4_OFFS 28
#define NETA_RX_L4_MASK (3 << NETA_RX_L4_OFFS)
#define NETA_RX_L4_TCP (0 << NETA_RX_L4_OFFS)
#define NETA_RX_L4_UDP (1 << NETA_RX_L4_OFFS)
#define NETA_RX_L4_OTHER (2 << NETA_RX_L4_OFFS)
/* Bits of "pncExtra" field */
#define NETA_RX_PNC_ENABLED_BIT 0
#define NETA_RX_PNC_ENABLED_MASK (1 << NETA_RX_PNC_ENABLED_BIT)
#define NETA_RX_PNC_LOOPS_OFFS 1
#define NETA_RX_PNC_LOOPS_MASK (0xF << NETA_RX_PNC_LOOPS_OFFS)
#define NETA_PNC_STATUS_OFFS 5
#define NETA_PNC_STATUS_MASK (3 << NETA_PNC_STATUS_OFFS)
#define NETA_PNC_RI_EXTRA_OFFS 16
#define NETA_PNC_RI_EXTRA_MASK (0xFFF << NETA_PNC_RI_EXTRA_OFFS)
/*---------------------------------------------------------------------------*/
#else
#define ETH_RX_VLAN_TAGGED_FRAME_BIT 19
#define ETH_RX_VLAN_TAGGED_FRAME_MASK (1 << ETH_RX_VLAN_TAGGED_FRAME_BIT)
#define ETH_RX_BPDU_FRAME_BIT 20
#define ETH_RX_BPDU_FRAME_MASK (1 << ETH_RX_BPDU_FRAME_BIT)
#define ETH_RX_L4_TYPE_OFFSET 21
#define ETH_RX_L4_TYPE_MASK (3 << ETH_RX_L4_TYPE_OFFSET)
#define ETH_RX_L4_TCP_TYPE (0 << ETH_RX_L4_TYPE_OFFSET)
#define ETH_RX_L4_UDP_TYPE (1 << ETH_RX_L4_TYPE_OFFSET)
#define ETH_RX_L4_OTHER_TYPE (2 << ETH_RX_L4_TYPE_OFFSET)
#define ETH_RX_NOT_LLC_SNAP_FORMAT_BIT 23
#define ETH_RX_NOT_LLC_SNAP_FORMAT_MASK (1 << ETH_RX_NOT_LLC_SNAP_FORMAT_BIT)
#ifdef MV_ETH_LEGACY_PARSER_IPV6
#define NETA_RX_L3_OFFS 24
#define NETA_RX_L3_MASK (3 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_UN (0 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP6 (2 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP4 (3 << NETA_RX_L3_OFFS)
#define NETA_RX_L3_IP4_ERR (1 << NETA_RX_L3_OFFS)
#else
#define ETH_RX_IP_FRAME_TYPE_BIT 24
#define ETH_RX_IP_FRAME_TYPE_MASK (1 << ETH_RX_IP_FRAME_TYPE_BIT)
#define ETH_RX_IP_HEADER_OK_BIT 25
#define ETH_RX_IP_HEADER_OK_MASK (1 << ETH_RX_IP_HEADER_OK_BIT)
#endif /* MV_ETH_LEGACY_PARSER_IPV6 */
#define ETH_RX_UNKNOWN_DA_BIT 28
#define ETH_RX_UNKNOWN_DA_MASK (1 << ETH_RX_UNKNOWN_DA_BIT)
#endif /* CONFIG_MV_ETH_PNC */
/*---------------------------------------------------------------------------*/
/* Bit map of "hw_cmd" field */
#define NETA_RX_COLOR_BIT 3
#define NETA_RX_COLOR_MASK (1 << NETA_RX_COLOR_BIT)
#define NETA_RX_COLOR_GREEN (0 << NETA_RX_COLOR_BIT)
#define NETA_RX_COLOR_YELLOW (1 << NETA_RX_COLOR_BIT)
#define NETA_RX_DSA_OFFS 4
#define NETA_RX_DSA_MASK (3 << NETA_RX_DSA_OFFS)
#define NETA_RX_DSA_NONE (0 << NETA_RX_DSA_OFFS)
#define NETA_RX_DSA (1 << NETA_RX_DSA_OFFS)
#define NETA_RX_DSA_E (2 << NETA_RX_DSA_OFFS)
#define NETA_RX_GEM_PID_OFFS 8
#define NETA_RX_GEM_PID_MASK (0xFFF << NETA_RX_GEM_PID_OFFS)
/*---------------------------------------------------------------------------*/
/******************** NETA TX EXTENDED DESCRIPTOR ********************************/
#if defined(MV_CPU_BE) && !defined(CONFIG_MV_ETH_BE_WA)
typedef struct neta_tx_desc {
MV_U16 dataSize;
MV_U16 csumL4;
MV_U32 command;
MV_U32 hw_cmd;
MV_U32 bufPhysAddr;
MV_U32 reserved[4];
} NETA_TX_DESC;
#else
typedef struct neta_tx_desc {
MV_U32 command;
MV_U16 csumL4;
MV_U16 dataSize;
MV_U32 bufPhysAddr;
MV_U32 hw_cmd;
MV_U32 reserved[4];
} NETA_TX_DESC;
#endif /* MV_CPU_BE && !CONFIG_MV_ETH_BE_WA */
/* "command" word fileds definition */
#define NETA_TX_L3_OFFSET_OFFS 0
#define NETA_TX_L3_OFFSET_MASK (0x7F << NETA_TX_L3_OFFSET_OFFS)
#define NETA_TX_GEM_OEM_BIT 7
#define NETA_TX_GEM_OEM_MASK (1 << NETA_TX_GEM_OEM_BIT)
#define NETA_TX_IP_HLEN_OFFS 8
#define NETA_TX_IP_HLEN_MASK (0x1F << NETA_TX_IP_HLEN_OFFS)
#define NETA_TX_BM_POOL_ID_OFFS 13
#define NETA_TX_BM_POOL_ID_ALL_MASK (0x3 << NETA_TX_BM_POOL_ID_OFFS)
#define NETA_TX_BM_POOL_ID_MASK(pool) ((pool) << NETA_TX_BM_POOL_ID_OFFS)
#define NETA_TX_HWF_BIT 15
#define NETA_TX_HWF_MASK (1 << NETA_TX_HWF_BIT)
#define NETA_TX_L4_BIT 16
#define NETA_TX_L4_TCP (0 << NETA_TX_L4_BIT)
#define NETA_TX_L4_UDP (1 << NETA_TX_L4_BIT)
#define NETA_TX_L3_BIT 17
#define NETA_TX_L3_IP4 (0 << NETA_TX_L3_BIT)
#define NETA_TX_L3_IP6 (1 << NETA_TX_L3_BIT)
#define NETA_TX_IP_CSUM_BIT 18
#define NETA_TX_IP_CSUM_MASK (1 << NETA_TX_IP_CSUM_BIT)
#define NETA_TX_Z_PAD_BIT 19
#define NETA_TX_Z_PAD_MASK (1 << NETA_TX_Z_PAD_BIT)
#define NETA_TX_L_DESC_BIT 20
#define NETA_TX_L_DESC_MASK (1 << NETA_TX_L_DESC_BIT)
#define NETA_TX_F_DESC_BIT 21
#define NETA_TX_F_DESC_MASK (1 << NETA_TX_F_DESC_BIT)
#define NETA_TX_BM_ENABLE_BIT 22
#define NETA_TX_BM_ENABLE_MASK (1 << NETA_TX_BM_ENABLE_BIT)
#define NETA_TX_PKT_OFFSET_OFFS 23
#define NETA_TX_PKT_OFFSET_MAX 0x7F
#define NETA_TX_PKT_OFFSET_ALL_MASK (NETA_TX_PKT_OFFSET_MAX << NETA_TX_PKT_OFFSET_OFFS)
#define NETA_TX_PKT_OFFSET_MASK(offset) (((offset) << NETA_TX_PKT_OFFSET_OFFS) & NETA_TX_PKT_OFFSET_ALL_MASK)
#define NETA_TX_L4_CSUM_BIT 30
#define NETA_TX_L4_CSUM_MASK (3 << NETA_TX_L4_CSUM_BIT)
#define NETA_TX_L4_CSUM_PART (0 << NETA_TX_L4_CSUM_BIT)
#define NETA_TX_L4_CSUM_FULL (1 << NETA_TX_L4_CSUM_BIT)
#define NETA_TX_L4_CSUM_NOT (2 << NETA_TX_L4_CSUM_BIT)
#define NETA_TX_FLZ_DESC_MASK (NETA_TX_F_DESC_MASK | NETA_TX_L_DESC_MASK | NETA_TX_Z_PAD_MASK)
/*-------------------------------------------------------------------------------*/
/* "hw_cmd" field definition */
#define NETA_TX_ES_BIT 0
#define NETA_TX_ES_MASK (1 << NETA_TX_ES_BIT)
#define NETA_TX_ERR_CODE_OFFS 1
#define NETA_TX_ERR_CODE_MASK (3 << NETA_TX_ERR_CODE_OFFS)
#define NETA_TX_ERR_LATE_COLLISION (0 << NETA_TX_ERR_CODE_OFFS)
#define NETA_TX_ERR_UNDERRUN (1 << NETA_TX_ERR_CODE_OFFS)
#define NETA_TX_ERR_EXCE_COLLISION (2 << NETA_RX_ERR_CODE_OFFS)
#define NETA_TX_COLOR_BIT 3
#define NETA_TX_COLOR_GREEN (0 << NETA_TX_COLOR_BIT)
#define NETA_TX_COLOR_YELLOW (1 << NETA_TX_COLOR_BIT)
#define NETA_TX_MH_SEL_OFFS 4
#ifdef MV_ETH_PMT_NEW
#define NETA_TX_MH_SEL_MASK (0xF << NETA_TX_MH_SEL_OFFS)
#else
#define NETA_TX_MH_SEL_MASK (0x7 << NETA_TX_MH_SEL_OFFS)
#endif /* MV_ETH_PMT_NEW */
#define NETA_TX_MH_UNCHANGE (0 << NETA_TX_MH_SEL_OFFS)
#define NETA_TX_GEM_PID_OFFS 8
#define NETA_TX_GEM_PID_MASK (0xFFF << NETA_TX_GEM_PID_OFFS)
#define NETA_TX_MOD_CMD_OFFS 20
#define NETA_TX_MOD_CMD_MASK (0x3FF << NETA_TX_MOD_CMD_OFFS)
#define NETA_TX_DSA_OFFS 30
#define NETA_TX_DSA_MASK (3 << NETA_TX_DSA_OFFS)
#define NETA_TX_DSA_NONE (0 << NETA_TX_DSA_OFFS)
#define NETA_TX_DSA (1 << NETA_TX_DSA_OFFS) /* normal dsa */
#define NETA_TX_DSA_E (2 << NETA_TX_DSA_OFFS) /* extended dsa */
/*-------------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __mvNetaRegs_h__ */