blob: df571153d73642642754423ea7ec9a9611f4bce3 [file] [log] [blame]
/* Copyright 2016 MediaTek Inc.
* Author: Nelson Chang <nelson.chang@mediatek.com>
* Author: Carlos Huang <carlos.huang@mediatek.com>
* Author: Harry Huang <harry.huang@mediatek.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef RAETH_REG_H
#define RAETH_REG_H
#include <linux/mii.h> /* for struct mii_if_info in ra2882ethreg.h */
#include <linux/version.h> /* check linux version */
#include <linux/interrupt.h> /* for "struct tasklet_struct" */
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/workqueue.h>
#include <linux/netdevice.h>
#include <linux/if_vlan.h>
#include "raether.h"
#define MAX_PACKET_SIZE 1514
#define MIN_PACKET_SIZE 60
#if defined(CONFIG_MACH_MT7623) || defined(CONFIG_SOC_MT7621)
#define MAX_PTXD_LEN 0x3fff /* 16k */
#define MAX_QTXD_LEN 0x3fff /* 16k */
#else
#define MAX_PTXD_LEN 0x3fff /* 16k */
#define MAX_QTXD_LEN 0xffff
#endif
#define phys_to_bus(a) (a)
extern void __iomem *ethdma_sysctl_base;
extern void __iomem *ethdma_frame_engine_base;
/* bits range: for example BITS(16,23) = 0xFF0000
* ==> (BIT(m)-1) = 0x0000FFFF ~(BIT(m)-1) => 0xFFFF0000
* ==> (BIT(n+1)-1) = 0x00FFFFFF
*/
#define BITS(m, n) (~(BIT(m) - 1) & ((BIT(n) - 1) | BIT(n)))
#define ETHER_ADDR_LEN 6
/* Phy Vender ID list */
#define EV_ICPLUS_PHY_ID0 0x0243
#define EV_ICPLUS_PHY_ID1 0x0D90
#define EV_MARVELL_PHY_ID0 0x0141
#define EV_MARVELL_PHY_ID1 0x0CC2
#define EV_VTSS_PHY_ID0 0x0007
#define EV_VTSS_PHY_ID1 0x0421
#define ETHSYS_BASE 0x1b000000
#define SGMII_CONFIG_0 BIT(9) /*SGMII path enable of GMAC1*/
#define SGMII_CONFIG_1 BIT(8) /*SGMII path enable of GMAC1*/
#if defined(CONFIG_PINCTRL_MT7622)
#define SGMII_REG_BASE0 (0x1b128000)
#define SGMII_REG_PHYA_BASE0 (0x1b12a000)
#define SGMII_REG_BASE1 (0)
#define SGMII_REG_PHYA_BASE1 (0)
#elif defined(CONFIG_MACH_LEOPARD)
#define SGMII_REG_BASE0 (0x1b128000)
#define SGMII_REG_PHYA_BASE0 (0x1b128100)
#define SGMII_REG_BASE1 (0x1b130000)
#define SGMII_REG_PHYA_BASE1 (0x1b130100)
#else
#define SGMII_REG_BASE0 (0)
#define SGMII_REG_PHYA_BASE0 (0)
#define SGMII_REG_BASE1 (0)
#define SGMII_REG_PHYA_BASE1 (0)
#endif
#define ETHSYS_MAC_BASE (0x1b110000)
#if defined(CONFIG_MACH_LEOPARD)
#define FE_RSTCTL 0x1B000034
#define INFRA_BASE 0x1000070C
#define GEPHY_CTRL0 0x10000710
#define GPIO_GO_BASE GEPHY_CTRL0
#define GPIO_MODE_BASE 0x10217300
#else
#define INFRA_BASE 0
#define FE_RSTCTL 0
#define GPIO_GO_BASE 0x10211800
#define GPIO_MODE_BASE 0x10211300
#endif
/* ETHDMASYS base address
* for I2S/PCM/GDMA/HSDMA/FE/GMAC
*/
#define ETHDMASYS_BASE ethdma_sysctl_base
#define ETHDMASYS_FRAME_ENGINE_BASE ethdma_frame_engine_base
#define ETHDMASYS_SYSCTL_BASE ETHDMASYS_BASE
#define ETHDMASYS_PPE_BASE (ETHDMASYS_FRAME_ENGINE_BASE + 0x0C00)
#define ETHDMASYS_ETH_MAC_BASE (ETHDMASYS_FRAME_ENGINE_BASE + 0x10000)
#if defined(CONFIG_MACH_MT7623) || defined(CONFIG_SOC_MT7621)
#define ETHDMASYS_ETH_SW_BASE (ETHDMASYS_FRAME_ENGINE_BASE + 0x10000)
#else
#define ETHDMASYS_ETH_SW_BASE (ETHDMASYS_FRAME_ENGINE_BASE + 0x18000)
#endif
#define RALINK_FRAME_ENGINE_BASE ETHDMASYS_FRAME_ENGINE_BASE
#define RALINK_PPE_BASE ETHDMASYS_PPE_BASE
#define RALINK_SYSCTL_BASE ETHDMASYS_SYSCTL_BASE
#define RALINK_ETH_MAC_BASE ETHDMASYS_ETH_MAC_BASE
#define RALINK_ETH_SW_BASE ETHDMASYS_ETH_SW_BASE
#define RSTCTL_FE_RST BIT(6)
#define RALINK_FE_RST RSTCTL_FE_RST
#define RSTCTL_ETH_RST BIT(23)
#define RALINK_ETH_RST RSTCTL_ETH_RST
/* FE_INT_STATUS */
#define RX_COHERENT BIT(31)
#define RX_DLY_INT BIT(30)
#define TX_COHERENT BIT(29)
#define TX_DLY_INT BIT(28)
#define RING3_RX_DLY_INT BIT(27)
#define RING2_RX_DLY_INT BIT(26)
#define RING1_RX_DLY_INT BIT(25)
#define RING0_RX_DLY_INT BIT(30)
#define RSS_RX_INT0 (RX_DONE_INT0 | RX_DONE_INT1 | \
RING0_RX_DLY_INT | RING1_RX_DLY_INT)
#define RSS_RX_RING0 (RX_DONE_INT0 | RING0_RX_DLY_INT)
#define RSS_RX_RING1 (RX_DONE_INT1 | RING1_RX_DLY_INT)
#define RSS_RX_RING2 (RX_DONE_INT2 | RING2_RX_DLY_INT)
#define RSS_RX_RING3 (RX_DONE_INT3 | RING3_RX_DLY_INT)
#define RSS_RX_INT1 (RX_DONE_INT2 | RX_DONE_INT3 | \
RING2_RX_DLY_INT | RING3_RX_DLY_INT)
#define RSS_RX_DLY_INT0 (RING0_RX_DLY_INT | RING1_RX_DLY_INT)
#define RSS_RX_DLY_INT1 (RING2_RX_DLY_INT | RING3_RX_DLY_INT)
#define RSS_RX_DLY_INT (RING0_RX_DLY_INT | RING1_RX_DLY_INT | \
RING2_RX_DLY_INT | RING3_RX_DLY_INT)
#define RXD_ERROR BIT(24)
#define ALT_RPLC_INT3 BIT(23)
#define ALT_RPLC_INT2 BIT(22)
#define ALT_RPLC_INT1 BIT(21)
#define RX_DONE_INT3 BIT(19)
#define RX_DONE_INT2 BIT(18)
#define RX_DONE_INT1 BIT(17)
#define RX_DONE_INT0 BIT(16)
#define TX_DONE_INT3 BIT(3)
#define TX_DONE_INT2 BIT(2)
#define TX_DONE_INT1 BIT(1)
#define TX_DONE_INT0 BIT(0)
#define RLS_COHERENT BIT(29)
#define RLS_DLY_INT BIT(28)
#define RLS_DONE_INT BIT(0)
#define FE_INT_ALL (TX_DONE_INT3 | TX_DONE_INT2 | \
TX_DONE_INT1 | TX_DONE_INT0 | \
RX_DONE_INT0 | RX_DONE_INT1 | \
RX_DONE_INT2 | RX_DONE_INT3)
#define QFE_INT_ALL (RLS_DONE_INT | RX_DONE_INT0 | \
RX_DONE_INT1 | RX_DONE_INT2 | RX_DONE_INT3)
#define QFE_INT_DLY_INIT (RLS_DLY_INT | RX_DLY_INT)
#define RX_INT_ALL (RX_DONE_INT0 | RX_DONE_INT1 | \
RX_DONE_INT2 | RX_DONE_INT3 | \
RING0_RX_DLY_INT | RING1_RX_DLY_INT | \
RING2_RX_DLY_INT | RING3_RX_DLY_INT | RX_DLY_INT)
#define TX_INT_ALL (TX_DONE_INT0 | TX_DLY_INT)
#define NUM_QDMA_PAGE 512
#define QDMA_PAGE_SIZE 2048
/* SW_INT_STATUS */
#define ESW_PHY_POLLING (RALINK_ETH_MAC_BASE + 0x0000)
#define MAC1_WOL (RALINK_ETH_SW_BASE + 0x0110)
#define WOL_INT_CLR BIT(17)
#define WOL_INT_EN BIT(1)
#define WOL_EN BIT(0)
#define P5_LINK_CH BIT(5)
#define P4_LINK_CH BIT(4)
#define P3_LINK_CH BIT(3)
#define P2_LINK_CH BIT(2)
#define P1_LINK_CH BIT(1)
#define P0_LINK_CH BIT(0)
#define RX_BUF_ALLOC_SIZE 2000
#define FASTPATH_HEADROOM 64
#define ETHER_BUFFER_ALIGN 32 /* /// Align on a cache line */
#define ETHER_ALIGNED_RX_SKB_ADDR(addr) \
((((unsigned long)(addr) + ETHER_BUFFER_ALIGN - 1) & \
~(ETHER_BUFFER_ALIGN - 1)) - (unsigned long)(addr))
struct PSEUDO_ADAPTER {
struct net_device *raeth_dev;
struct net_device *pseudo_dev;
struct net_device_stats stat;
struct mii_if_info mii_info;
};
#define MAX_PSEUDO_ENTRY 1
/* Register Categories Definition */
#if 0
#define FE_PSE_OFFSET 0x0000
#define CDMA_OFFSET 0x0400
#define GDM1_OFFSET 0x0500
#define ADMA_OFFSET 0x0800
#define CDMQ_OFFSET 0x1400
#define GDM2_OFFSET 0x1500
#define CDM_OFFSET 0x1600
#define QDMA_OFFSET 0x1800
#define RSS_OFFSET 0x3000
#define EDMA0_OFFSET 0x3800
#define EDMA1_OFFSET 0x3C00
#else
#define FE_PSE_OFFSET 0x0000
#define CDMA_OFFSET 0x0400
#define GDM1_OFFSET 0x0500
#define ADMA_OFFSET 0x4000
#define CDMQ_OFFSET 0x1400
#define GDM2_OFFSET 0x1500
#define CDM_OFFSET 0x1600
#define QDMA_OFFSET 0x4400
#define RSS_OFFSET 0x2800
#define EDMA0_OFFSET 0x3800
#define EDMA1_OFFSET 0x3C00
#endif
/* Register Map Detail */
/* FE/PSE */
#define SYSCFG1 (RALINK_SYSCTL_BASE + 0x14)
#define CLK_CFG_0 (RALINK_SYSCTL_BASE + 0x2C)
#define PAD_RGMII2_MDIO_CFG (RALINK_SYSCTL_BASE + 0x58)
#define FE_GLO_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x00)
#define FE_RST_GL (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x04)
#define FE_INT_STATUS2 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x08)
#define FOE_TS_T (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x10)
#define FE_INT_ENABLE2 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x0c)
#define FE_INT_GRP (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x20)
#define PSE_FQ_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x40)
#define CDMA_FC_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x44)
#define GDMA1_FC_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x48)
#define GDMA2_FC_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x4C)
#define CDMA_OQ_STA (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x50)
#define GDMA1_OQ_STA (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x54)
#define GDMA2_OQ_STA (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x58)
#define PSE_IQ_STA (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x5C)
#define MAC1_LINK BIT(24)
#define MAC2_LINK BIT(25)
#define PDMA_FC_CFG (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x100)
#define FE_GLO_MISC (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x124)
#define PSE_IQ_REV1 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x140)
#define PSE_IQ_REV2 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x144)
#define PSE_IQ_REV3 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x148)
#define PSE_IQ_REV4 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x14C)
#define PSE_IQ_REV5 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x150)
#define PSE_IQ_REV6 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x154)
#define PSE_IQ_REV7 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x158)
#define PSE_IQ_REV8 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x15C)
#define PSE_OQ_TH1 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x160)
#define PSE_OQ_TH2 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x164)
#define PSE_OQ_TH3 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x168)
#define PSE_OQ_TH4 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x16C)
#define PSE_OQ_TH5 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x170)
#define PSE_OQ_TH6 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x174)
#define PSE_OQ_TH7 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x178)
#define PSE_OQ_TH8 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x17C)
#define FE_PSE_FREE (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x240)
#define FE_DROP_FQ (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x244)
#define FE_DROP_FC (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x248)
#define FE_DROP_PPE (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x24c)
/* GDM1 */
#define GDMA1_FWD_CFG (RALINK_FRAME_ENGINE_BASE + GDM1_OFFSET + 0x00)
#define GDMA1_SHPR_CFG (RALINK_FRAME_ENGINE_BASE + GDM1_OFFSET + 0x04)
#define GDMA1_MAC_ADRL (RALINK_FRAME_ENGINE_BASE + GDM1_OFFSET + 0x08)
#define GDMA1_MAC_ADRH (RALINK_FRAME_ENGINE_BASE + GDM1_OFFSET + 0x0C)
#define GDMA1_SCH_CFG GDMA1_SHPR_CFG
/* CDMA */
#define CDMA_CSG_CFG (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x000)
#define CDMP_IG_CTRL (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x000)
#define CDMP_EG_CTRL (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x004)
#define GDMA_TX_GBCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x300)
#define GDMA_TX_GPCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x304)
#define GDMA_TX_SKIPCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x308)
#define GDMA_TX_COLCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x30C)
#define GDMA_RX_GBCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x320)
#define GDMA_RX_GPCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x324)
#define GDMA_RX_OERCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x328)
#define GDMA_RX_FERCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x32C)
#define GDMA_RX_SERCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x330)
#define GDMA_RX_LERCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x334)
#define GDMA_RX_CERCNT0 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x338)
#define GDMA_RX_FCCNT1 (RALINK_FRAME_ENGINE_BASE + CDMA_OFFSET + 0x33C)
/* ADMA */
#define TX_BASE_PTR0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x000)
#define TX_MAX_CNT0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x004)
#define TX_CTX_IDX0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x008)
#define TX_DTX_IDX0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x00C)
#define TX_BASE_PTR1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x010)
#define TX_MAX_CNT1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x014)
#define TX_CTX_IDX1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x018)
#define TX_DTX_IDX1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x01C)
#define TX_BASE_PTR2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x020)
#define TX_MAX_CNT2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x024)
#define TX_CTX_IDX2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x028)
#define TX_DTX_IDX2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x02C)
#define TX_BASE_PTR3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x030)
#define TX_MAX_CNT3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x034)
#define TX_CTX_IDX3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x038)
#define TX_DTX_IDX3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x03C)
#define RX_BASE_PTR0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x100)
#define RX_MAX_CNT0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x104)
#define RX_CALC_IDX0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x108)
#define RX_DRX_IDX0 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x10C)
#define RX_BASE_PTR1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x110)
#define RX_MAX_CNT1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x114)
#define RX_CALC_IDX1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x118)
#define RX_DRX_IDX1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x11C)
#define RX_BASE_PTR2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x120)
#define RX_MAX_CNT2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x124)
#define RX_CALC_IDX2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x128)
#define RX_DRX_IDX2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x12C)
#define RX_BASE_PTR3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x130)
#define RX_MAX_CNT3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x134)
#define RX_CALC_IDX3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x138)
#define RX_DRX_IDX3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x13C)
#define PDMA_INFO (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x200)
#define PDMA_GLO_CFG (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x204)
#define PDMA_RST_IDX (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x208)
#define PDMA_RST_CFG (PDMA_RST_IDX)
#define DLY_INT_CFG (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x20C)
#define FREEQ_THRES (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x210)
#define INT_STATUS (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x220)
#define FE_INT_STATUS (INT_STATUS)
#define INT_MASK (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x228)
#define FE_INT_ENABLE (INT_MASK)
#define SCH_Q01_CFG (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x280)
#define SCH_Q23_CFG (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x284)
#define PDMA_INT_GRP1 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x250)
#define PDMA_INT_GRP2 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x254)
#define PDMA_INT_GRP3 (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x22c)
/* GDM2 */
#define GDMA2_FWD_CFG (RALINK_FRAME_ENGINE_BASE + GDM2_OFFSET + 0x00)
#define GDMA2_SHPR_CFG (RALINK_FRAME_ENGINE_BASE + GDM2_OFFSET + 0x04)
#define GDMA2_MAC_ADRL (RALINK_FRAME_ENGINE_BASE + GDM2_OFFSET + 0x08)
#define GDMA2_MAC_ADRH (RALINK_FRAME_ENGINE_BASE + GDM2_OFFSET + 0x0C)
#define GDMA2_SCH_CFG GDMA2_SHPR_CFG
/* QDMA */
#define QTX_CFG_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x000)
#define QTX_SCH_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x004)
#define QTX_HEAD_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x008)
#define QTX_TAIL_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x00C)
#define QTX_CFG_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x010)
#define QTX_SCH_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x014)
#define QTX_HEAD_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x018)
#define QTX_TAIL_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x01C)
#define QTX_CFG_2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x020)
#define QTX_SCH_2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x024)
#define QTX_HEAD_2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x028)
#define QTX_TAIL_2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02C)
#define QTX_CFG_3 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x030)
#define QTX_SCH_3 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x034)
#define QTX_HEAD_3 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x038)
#define QTX_TAIL_3 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x03C)
#define QTX_CFG_4 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x040)
#define QTX_SCH_4 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x044)
#define QTX_HEAD_4 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x048)
#define QTX_TAIL_4 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x04C)
#define QTX_CFG_5 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x050)
#define QTX_SCH_5 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x054)
#define QTX_HEAD_5 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x058)
#define QTX_TAIL_5 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x05C)
#define QTX_CFG_6 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x060)
#define QTX_SCH_6 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x064)
#define QTX_HEAD_6 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x068)
#define QTX_TAIL_6 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x06C)
#define QTX_CFG_7 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x070)
#define QTX_SCH_7 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x074)
#define QTX_HEAD_7 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x078)
#define QTX_TAIL_7 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x07C)
#define QTX_CFG_8 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x080)
#define QTX_SCH_8 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x084)
#define QTX_HEAD_8 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x088)
#define QTX_TAIL_8 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x08C)
#define QTX_CFG_9 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x090)
#define QTX_SCH_9 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x094)
#define QTX_HEAD_9 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x098)
#define QTX_TAIL_9 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x09C)
#define QTX_CFG_10 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0A0)
#define QTX_SCH_10 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0A4)
#define QTX_HEAD_10 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0A8)
#define QTX_TAIL_10 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0AC)
#define QTX_CFG_11 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0B0)
#define QTX_SCH_11 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0B4)
#define QTX_HEAD_11 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0B8)
#define QTX_TAIL_11 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0BC)
#define QTX_CFG_12 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0C0)
#define QTX_SCH_12 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0C4)
#define QTX_HEAD_12 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0C8)
#define QTX_TAIL_12 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0CC)
#define QTX_CFG_13 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0D0)
#define QTX_SCH_13 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0D4)
#define QTX_HEAD_13 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0D8)
#define QTX_TAIL_13 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0DC)
#define QTX_CFG_14 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0E0)
#define QTX_SCH_14 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0E4)
#define QTX_HEAD_14 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0E8)
#define QTX_TAIL_14 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0EC)
#define QTX_CFG_15 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0F0)
#define QTX_SCH_15 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0F4)
#define QTX_HEAD_15 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0F8)
#define QTX_TAIL_15 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0FC)
#define QRX_BASE_PTR_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x100)
#define QRX_MAX_CNT_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x104)
#define QRX_CRX_IDX_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x108)
#define QRX_DRX_IDX_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x10C)
#define QRX_BASE_PTR_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x110)
#define QRX_MAX_CNT_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x114)
#define QRX_CRX_IDX_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x118)
#define QRX_DRX_IDX_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x11C)
#define VQTX_TB_BASE_0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x180)
#define VQTX_TB_BASE_1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x184)
#define VQTX_TB_BASE_2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x188)
#define VQTX_TB_BASE_3 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x18C)
#define QDMA_INFO (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x200)
#define QDMA_GLO_CFG (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x204)
#define QDMA_RST_IDX (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x208)
#define QDMA_RST_CFG (QDMA_RST_IDX)
#define QDMA_DELAY_INT (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x20C)
#define QDMA_FC_THRES (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x210)
#define QDMA_TX_SCH (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x214)
#define QDMA_INT_STS (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x218)
#define QFE_INT_STATUS (QDMA_INT_STS)
#define QDMA_INT_MASK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x21C)
#define QFE_INT_ENABLE (QDMA_INT_MASK)
#define QDMA_TRTCM (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x220)
#define QDMA_DATA0 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x224)
#define QDMA_DATA1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x228)
#define QDMA_RED_THRES (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x22C)
#define QDMA_TEST (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x230)
#define QDMA_DMA (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x234)
#define QDMA_BMU (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x238)
#define QDMA_HRED1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x240)
#define QDMA_HRED2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x244)
#define QDMA_SRED1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x248)
#define QDMA_SRED2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x24C)
#define QTX_MIB_IF (RALINK_FRAME_ENGINE_BASE + 0x1abc)
#define QTX_CTX_PTR (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x300)
#define QTX_DTX_PTR (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x304)
#define QTX_FWD_CNT (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x308)
#define QTX_CRX_PTR (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x310)
#define QTX_DRX_PTR (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x314)
#define QTX_RLS_CNT (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x318)
#define QDMA_FQ_HEAD (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x320)
#define QDMA_FQ_TAIL (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x324)
#define QDMA_FQ_CNT (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x328)
#define QDMA_FQ_BLEN (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x32C)
#define QTX_Q0MIN_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x350)
#define QTX_Q1MIN_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x354)
#define QTX_Q2MIN_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x358)
#define QTX_Q3MIN_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x35C)
#define QTX_Q0MAX_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x360)
#define QTX_Q1MAX_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x364)
#define QTX_Q2MAX_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x368)
#define QTX_Q3MAX_BK (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x36C)
#define QDMA_INT_GRP1 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x220)
#define QDMA_INT_GRP2 (RALINK_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x224)
#define DELAY_INT_INIT 0x8f0f8f0f
#define FE_INT_DLY_INIT (TX_DLY_INT | RX_DLY_INT)
#define RSS_INT_DLY_INT_2RING (RING0_RX_DLY_INT | RING1_RX_DLY_INT)
#define RSS_INT_DLY_INT (RING0_RX_DLY_INT | RING1_RX_DLY_INT | \
RING2_RX_DLY_INT | RING3_RX_DLY_INT | TX_DLY_INT)
/* LRO global control */
/* Bits [15:0]:LRO_ALT_RFSH_TIMER, Bits [20:16]:LRO_ALT_TICK_TIMER */
#define LRO_ALT_REFRESH_TIMER (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x001C)
/* LRO auto-learn table info */
#define PDMA_FE_ALT_CF8 (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x0300)
#define PDMA_FE_ALT_SGL_CFC (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x0304)
#define PDMA_FE_ALT_SEQ_CFC (RALINK_FRAME_ENGINE_BASE + FE_PSE_OFFSET + 0x0308)
/* LRO controls */
#define ADMA_LRO_CTRL_OFFSET (ADMA_OFFSET + 0x180)
/*Bit [0]:LRO_EN, Bit [1]:LRO_IPv6_EN, Bit [2]:MULTIPLE_NON_LRO_RX_RING_EN,
* Bit [3]:MULTIPLE_RXD_PREFETCH_EN, Bit [4]:RXD_PREFETCH_EN,
* Bit [5]:LRO_DLY_INT_EN, Bit [6]:LRO_CRSN_BNW, Bit [7]:L3_CKS_UPD_EN,
* Bit [20]:first_ineligible_pkt_redirect_en, Bit [21]:cr_lro_alt_score_mode,
* Bit [22]:cr_lro_alt_rplc_mode, Bit [23]:cr_lro_l4_ctrl_psh_en,
* Bits [28:26]:LRO_RING_RELINGUISH_REQ, Bits [31:29]:LRO_RING_RELINGUISH_DONE
*/
#define ADMA_LRO_CTRL_DW0 (RALINK_FRAME_ENGINE_BASE + \
ADMA_LRO_CTRL_OFFSET + 0x00)
/* Bits [31:0]:LRO_CPU_REASON */
#define ADMA_LRO_CTRL_DW1 (RALINK_FRAME_ENGINE_BASE + \
ADMA_LRO_CTRL_OFFSET + 0x04)
/* Bits [31:0]:AUTO_LEARN_LRO_ELIGIBLE_THRESHOLD */
#define ADMA_LRO_CTRL_DW2 (RALINK_FRAME_ENGINE_BASE + \
ADMA_LRO_CTRL_OFFSET + 0x08)
/*Bits [7:0]:LRO_MAX_AGGREGATED_CNT,
* Bits [11:8]:LRO_VLAN_EN, Bits [13:12]:LRO_VLAN_VID_CMP_DEPTH,
* Bit [14]:ADMA_FW_RSTN_REQ, Bit [15]:ADMA_MODE, Bits [31:16]:LRO_MIN_RXD_SDL0
*/
#define ADMA_LRO_CTRL_DW3 (RALINK_FRAME_ENGINE_BASE + \
ADMA_LRO_CTRL_OFFSET + 0x0C)
/* LRO RX delay interrupt configurations */
#define LRO_RX1_DLY_INT (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x0270)
#define LRO_RX2_DLY_INT (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x0274)
#define LRO_RX3_DLY_INT (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x0278)
/* LRO auto-learn configurations */
#define PDMA_LRO_ATL_OVERFLOW_ADJ_OFFSET (ADMA_OFFSET + 0x190)
#define PDMA_LRO_ATL_OVERFLOW_ADJ (RALINK_FRAME_ENGINE_BASE + \
PDMA_LRO_ATL_OVERFLOW_ADJ_OFFSET)
#define LRO_ALT_SCORE_DELTA (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x024c)
/* LRO agg timer configurations */
#define LRO_MAX_AGG_TIME (RALINK_FRAME_ENGINE_BASE + ADMA_OFFSET + 0x025c)
/* LRO configurations of RX ring #0 */
#define LRO_RXRING0_OFFSET (ADMA_OFFSET + 0x300)
#define LRO_RX_RING0_DIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x04)
#define LRO_RX_RING0_DIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x08)
#define LRO_RX_RING0_DIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x0C)
#define LRO_RX_RING0_DIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x10)
#define LRO_RX_RING0_CTRL_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x28)
/* Bit [8]:RING0_VLD, Bit [9]:RING0_MYIP_VLD */
#define LRO_RX_RING0_CTRL_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x2C)
#define LRO_RX_RING0_CTRL_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING0_OFFSET + 0x30)
/* LRO configurations of RX ring #1 */
#define LRO_RXRING1_OFFSET (ADMA_OFFSET + 0x340)
#define LRO_RX_RING1_STP_DTP_DW (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x00)
#define LRO_RX_RING1_DIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x04)
#define LRO_RX_RING1_DIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x08)
#define LRO_RX_RING1_DIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x0C)
#define LRO_RX_RING1_DIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x10)
#define LRO_RX_RING1_SIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x14)
#define LRO_RX_RING1_SIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x18)
#define LRO_RX_RING1_SIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x1C)
#define LRO_RX_RING1_SIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x20)
#define LRO_RX_RING1_CTRL_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x24)
#define LRO_RX_RING1_CTRL_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x28)
#define LRO_RX_RING1_CTRL_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x2C)
#define LRO_RX_RING1_CTRL_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING1_OFFSET + 0x30)
#define LRO_RXRING2_OFFSET (ADMA_OFFSET + 0x380)
#define LRO_RX_RING2_STP_DTP_DW (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x00)
#define LRO_RX_RING2_DIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x04)
#define LRO_RX_RING2_DIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x08)
#define LRO_RX_RING2_DIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x0C)
#define LRO_RX_RING2_DIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x10)
#define LRO_RX_RING2_SIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x14)
#define LRO_RX_RING2_SIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x18)
#define LRO_RX_RING2_SIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x1C)
#define LRO_RX_RING2_SIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x20)
#define LRO_RX_RING2_CTRL_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x24)
#define LRO_RX_RING2_CTRL_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x28)
#define LRO_RX_RING2_CTRL_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x2C)
#define LRO_RX_RING2_CTRL_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING2_OFFSET + 0x30)
#define LRO_RXRING3_OFFSET (ADMA_OFFSET + 0x3C0)
#define LRO_RX_RING3_STP_DTP_DW (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x00)
#define LRO_RX_RING3_DIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x04)
#define LRO_RX_RING3_DIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x08)
#define LRO_RX_RING3_DIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x0C)
#define LRO_RX_RING3_DIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x10)
#define LRO_RX_RING3_SIP_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x14)
#define LRO_RX_RING3_SIP_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x18)
#define LRO_RX_RING3_SIP_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x1C)
#define LRO_RX_RING3_SIP_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x20)
#define LRO_RX_RING3_CTRL_DW0 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x24)
#define LRO_RX_RING3_CTRL_DW1 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x28)
#define LRO_RX_RING3_CTRL_DW2 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x2C)
#define LRO_RX_RING3_CTRL_DW3 (RALINK_FRAME_ENGINE_BASE + \
LRO_RXRING3_OFFSET + 0x30)
#define ADMA_DBG_OFFSET (ADMA_OFFSET + 0x230)
#define ADMA_TX_DBG0 (RALINK_FRAME_ENGINE_BASE + ADMA_DBG_OFFSET + 0x00)
#define ADMA_TX_DBG1 (RALINK_FRAME_ENGINE_BASE + ADMA_DBG_OFFSET + 0x04)
#define ADMA_RX_DBG0 (RALINK_FRAME_ENGINE_BASE + ADMA_DBG_OFFSET + 0x08)
#define ADMA_RX_DBG1 (RALINK_FRAME_ENGINE_BASE + ADMA_DBG_OFFSET + 0x0C)
/********RSS CR ************/
#define ADMA_RSS_GLO_CFG (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x00)
#define ADMA_RSS_INDR_TABLE_DW0 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x50)
#define ADMA_RSS_INDR_TABLE_DW1 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x54)
#define ADMA_RSS_INDR_TABLE_DW2 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x58)
#define ADMA_RSS_INDR_TABLE_DW3 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x5C)
#define ADMA_RSS_INDR_TABLE_DW4 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x60)
#define ADMA_RSS_INDR_TABLE_DW5 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x64)
#define ADMA_RSS_INDR_TABLE_DW6 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x68)
#define ADMA_RSS_INDR_TABLE_DW7 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x6C)
#define ADMA_RSS_HASH_KEY_DW0 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x20)
#define ADMA_RSS_HASH_KEY_DW1 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x24)
#define ADMA_RSS_HASH_KEY_DW2 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x28)
#define ADMA_RSS_HASH_KEY_DW3 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x2C)
#define ADMA_RSS_HASH_KEY_DW4 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x30)
#define ADMA_RSS_HASH_KEY_DW5 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x34)
#define ADMA_RSS_HASH_KEY_DW6 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x38)
#define ADMA_RSS_HASH_KEY_DW7 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x3C)
#define ADMA_RSS_HASH_KEY_DW8 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x40)
#define ADMA_RSS_HASH_KEY_DW9 (RALINK_FRAME_ENGINE_BASE + RSS_OFFSET + 0x44)
/* LRO RX ring mode */
#define PDMA_RX_NORMAL_MODE (0x0)
#define PDMA_RX_PSE_MODE (0x1)
#define PDMA_RX_FORCE_PORT (0x2)
#define PDMA_RX_AUTO_LEARN (0x3)
#define ADMA_RX_RING0 (0)
#define ADMA_RX_RING1 (1)
#define ADMA_RX_RING2 (2)
#define ADMA_RX_RING3 (3)
#define ADMA_RX_LEN0_MASK (0x3fff)
#define ADMA_RX_LEN1_MASK (0x3)
#define SET_ADMA_RX_LEN0(x) ((x) & ADMA_RX_LEN0_MASK)
#define SET_ADMA_RX_LEN1(x) ((x) & ADMA_RX_LEN1_MASK)
#define QDMA_PAGE (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x1F0)
/*SFQ use*/
#define VQTX_TB_BASE0 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0180)
#define VQTX_TB_BASE1 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0184)
#define VQTX_TB_BASE2 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0188)
#define VQTX_TB_BASE3 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x018C)
#define VQTX_GLO (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0280)
#define VQTX_INVLD_PTR (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x028C)
#define VQTX_NUM (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0290)
#define VQTX_SCH (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0298)
#define VQTX_HASH_CFG (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02A0)
#define VQTX_HASH_SD (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02A4)
#define VQTX_VLD_CFG (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02B0)
#define VQTX_MIB_IF (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02BC)
#define VQTX_MIB_PCNT (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02C0)
#define VQTX_MIB_BCNT0 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02C4)
#define VQTX_MIB_BCNT1 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x02C8)
#define VQTX_0_BIND_QID (PQ0 << 0)
#define VQTX_1_BIND_QID (PQ1 << 8)
#define VQTX_2_BIND_QID (PQ2 << 16)
#define VQTX_3_BIND_QID (PQ3 << 24)
#define VQTX_4_BIND_QID (PQ4 << 0)
#define VQTX_5_BIND_QID (PQ5 << 8)
#define VQTX_6_BIND_QID (PQ6 << 16)
#define VQTX_7_BIND_QID (PQ7 << 24)
#define VQTX_TB_BASE4 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0190)
#define VQTX_TB_BASE5 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0194)
#define VQTX_TB_BASE6 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x0198)
#define VQTX_TB_BASE7 (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0x019C)
#define VQTX_0_3_BIND_QID (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0xBC0)
#define VQTX_4_7_BIND_QID (ETHDMASYS_FRAME_ENGINE_BASE + QDMA_OFFSET + 0xBC4)
#define PQ0 0
#define PQ1 1
#define PQ2 15
#define PQ3 16
#define PQ4 30
#define PQ5 31
#define PQ6 43
#define PQ7 63
#if defined(CONFIG_MACH_MT7623)
#define VQ_NUM0 256
#define VQ_NUM1 256
#define VQ_NUM2 256
#define VQ_NUM3 256
#define VQ_NUM4 0
#define VQ_NUM5 0
#define VQ_NUM6 0
#define VQ_NUM7 0
#define VQTX_NUM_0 (4 << 0)
#define VQTX_NUM_1 (4 << 4)
#define VQTX_NUM_2 (4 << 8)
#define VQTX_NUM_3 (4 << 12)
#define VQTX_NUM_4 0
#define VQTX_NUM_5 0
#define VQTX_NUM_6 0
#define VQTX_NUM_7 0
#else
#define VQ_NUM0 128
#define VQ_NUM1 128
#define VQ_NUM2 128
#define VQ_NUM3 128
#define VQ_NUM4 128
#define VQ_NUM5 128
#define VQ_NUM6 128
#define VQ_NUM7 128
#define VQTX_NUM_0 (3 << 0)
#define VQTX_NUM_1 (3 << 4)
#define VQTX_NUM_2 (3 << 8)
#define VQTX_NUM_3 (3 << 12)
#define VQTX_NUM_4 (3 << 16)
#define VQTX_NUM_5 (3 << 20)
#define VQTX_NUM_6 (3 << 24)
#define VQTX_NUM_7 (3 << 28)
#endif
#define VQTX_MIB_EN BIT(17)
/*HW IO-COHERNET BASE address*/
#if defined(CONFIG_MACH_LEOPARD)
#define HW_IOC_BASE 0x1B000080
#define IOC_OFFSET 4
#else
#define HW_IOC_BASE 0x1B000400
#define IOC_OFFSET 8
#endif
/*=========================================
* SFQ Table Format define
*=========================================
*/
struct SFQ_INFO1_T {
unsigned int VQHPTR;
};
struct SFQ_INFO2_T {
unsigned int VQTPTR;
};
struct SFQ_INFO3_T {
unsigned int QUE_DEPTH:16;
unsigned int DEFICIT_CNT:16;
};
struct SFQ_INFO4_T {
unsigned int RESV;
};
struct SFQ_INFO5_T {
unsigned int PKT_CNT;
};
struct SFQ_INFO6_T {
unsigned int BYTE_CNT;
};
struct SFQ_INFO7_T {
unsigned int BYTE_CNT;
};
struct SFQ_INFO8_T {
unsigned int RESV;
};
struct SFQ_table {
struct SFQ_INFO1_T sfq_info1;
struct SFQ_INFO2_T sfq_info2;
struct SFQ_INFO3_T sfq_info3;
struct SFQ_INFO4_T sfq_info4;
struct SFQ_INFO5_T sfq_info5;
struct SFQ_INFO6_T sfq_info6;
struct SFQ_INFO7_T sfq_info7;
struct SFQ_INFO8_T sfq_info8;
};
#if defined(CONFIG_RAETH_HW_LRO) || defined(CONFIG_RAETH_MULTIPLE_RX_RING)
#define FE_GDM_RXID1_OFFSET (0x0130)
#define FE_GDM_RXID1 (RALINK_FRAME_ENGINE_BASE + FE_GDM_RXID1_OFFSET)
#define GDM_VLAN_PRI7_RXID_SEL BITS(30, 31)
#define GDM_VLAN_PRI6_RXID_SEL BITS(28, 29)
#define GDM_VLAN_PRI5_RXID_SEL BITS(26, 27)
#define GDM_VLAN_PRI4_RXID_SEL BITS(24, 25)
#define GDM_VLAN_PRI3_RXID_SEL BITS(22, 23)
#define GDM_VLAN_PRI2_RXID_SEL BITS(20, 21)
#define GDM_VLAN_PRI1_RXID_SEL BITS(18, 19)
#define GDM_VLAN_PRI0_RXID_SEL BITS(16, 17)
#define GDM_TCP_ACK_RXID_SEL BITS(4, 5)
#define GDM_TCP_ACK_WZPC BIT(3)
#define GDM_RXID_PRI_SEL BITS(0, 2)
#define FE_GDM_RXID2_OFFSET (0x0134)
#define FE_GDM_RXID2 (RALINK_FRAME_ENGINE_BASE + FE_GDM_RXID2_OFFSET)
#define GDM_STAG7_RXID_SEL BITS(30, 31)
#define GDM_STAG6_RXID_SEL BITS(28, 29)
#define GDM_STAG5_RXID_SEL BITS(26, 27)
#define GDM_STAG4_RXID_SEL BITS(24, 25)
#define GDM_STAG3_RXID_SEL BITS(22, 23)
#define GDM_STAG2_RXID_SEL BITS(20, 21)
#define GDM_STAG1_RXID_SEL BITS(18, 19)
#define GDM_STAG0_RXID_SEL BITS(16, 17)
#define GDM_PID2_RXID_SEL BITS(2, 3)
#define GDM_PID1_RXID_SEL BITS(0, 1)
#define GDM_PRI_PID (0)
#define GDM_PRI_VLAN_PID (1)
#define GDM_PRI_ACK_PID (2)
#define GDM_PRI_VLAN_ACK_PID (3)
#define GDM_PRI_ACK_VLAN_PID (4)
#define SET_GDM_VLAN_PRI_RXID_SEL(x, y) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID1); \
reg_val &= ~(0x03 << (((x) << 1) + 16)); \
reg_val |= ((y) & 0x3) << (((x) << 1) + 16); \
sys_reg_write(FE_GDM_RXID1, reg_val); \
}
#define SET_GDM_TCP_ACK_RXID_SEL(x) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID1); \
reg_val &= ~(GDM_TCP_ACK_RXID_SEL); \
reg_val |= ((x) & 0x3) << 4; \
sys_reg_write(FE_GDM_RXID1, reg_val); \
}
#define SET_GDM_TCP_ACK_WZPC(x) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID1); \
reg_val &= ~(GDM_TCP_ACK_WZPC); \
reg_val |= ((x) & 0x1) << 3; \
sys_reg_write(FE_GDM_RXID1, reg_val); \
}
#define SET_GDM_RXID_PRI_SEL(x) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID1); \
reg_val &= ~(GDM_RXID_PRI_SEL); \
reg_val |= (x) & 0x7; \
sys_reg_write(FE_GDM_RXID1, reg_val); \
}
#define GDM_STAG_RXID_SEL(x, y) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID2); \
reg_val &= ~(0x03 << (((x) << 1) + 16)); \
reg_val |= ((y) & 0x3) << (((x) << 1) + 16); \
sys_reg_write(FE_GDM_RXID2, reg_val); \
}
#define SET_GDM_PID2_RXID_SEL(x) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID2); \
reg_val &= ~(GDM_PID2_RXID_SEL); \
reg_val |= ((x) & 0x3) << 2; \
sys_reg_write(FE_GDM_RXID2, reg_val); \
}
#define SET_GDM_PID1_RXID_SEL(x) \
{ \
unsigned int reg_val = sys_reg_read(FE_GDM_RXID2); \
reg_val &= ~(GDM_PID1_RXID_SEL); \
reg_val |= ((x) & 0x3); \
sys_reg_write(FE_GDM_RXID2, reg_val); \
}
#endif /* CONFIG_RAETH_MULTIPLE_RX_RING */
/* Per Port Packet Counts in RT3052, added by bobtseng 2009.4.17. */
#define PORT0_PKCOUNT (0xb01100e8)
#define PORT1_PKCOUNT (0xb01100ec)
#define PORT2_PKCOUNT (0xb01100f0)
#define PORT3_PKCOUNT (0xb01100f4)
#define PORT4_PKCOUNT (0xb01100f8)
#define PORT5_PKCOUNT (0xb01100fc)
#define sys_reg_read(phys) (__raw_readl((void __iomem *)phys))
#define sys_reg_write(phys, val) (__raw_writel(val, (void __iomem *)phys))
/* ====================================== */
#define GDM1_DISPAD BIT(18)
#define GDM1_DISCRC BIT(17)
/* GDMA1 uni-cast frames destination port */
#define GDM1_ICS_EN (0x1 << 22)
#define GDM1_TCS_EN (0x1 << 21)
#define GDM1_UCS_EN (0x1 << 20)
#define GDM1_JMB_EN (0x1 << 19)
#define GDM1_STRPCRC (0x1 << 16)
#define GDM1_UFRC_P_CPU (0 << 12)
/* GDMA1 broad-cast MAC address frames */
#define GDM1_BFRC_P_CPU (0 << 8)
/* GDMA1 multi-cast MAC address frames */
#define GDM1_MFRC_P_CPU (0 << 4)
/* GDMA1 other MAC address frames destination port */
#define GDM1_OFRC_P_CPU (0 << 0)
/* checksum generator registers are removed */
#define ICS_GEN_EN (0 << 2)
#define UCS_GEN_EN (0 << 1)
#define TCS_GEN_EN (0 << 0)
/* MDIO_CFG bit */
#define MDIO_CFG_GP1_FC_TX BIT(11)
#define MDIO_CFG_GP1_FC_RX BIT(10)
/* ====================================== */
/* ====================================== */
#define GP1_LNK_DWN BIT(9)
#define GP1_AN_FAIL BIT(8)
/* ====================================== */
/* ====================================== */
#define PSE_RESET BIT(0)
/* ====================================== */
#define PST_DRX_IDX3 BIT(19)
#define PST_DRX_IDX2 BIT(18)
#define PST_DRX_IDX1 BIT(17)
#define PST_DRX_IDX0 BIT(16)
#define PST_DTX_IDX3 BIT(3)
#define PST_DTX_IDX2 BIT(2)
#define PST_DTX_IDX1 BIT(1)
#define PST_DTX_IDX0 BIT(0)
#define RX_2B_OFFSET BIT(31)
#define CSR_CLKGATE_BYP BIT(30)
#define MULTI_EN BIT(10)
#define DESC_32B_EN BIT(8)
#define TX_WB_DDONE BIT(6)
#define RX_DMA_BUSY BIT(3)
#define TX_DMA_BUSY BIT(1)
#define RX_DMA_EN BIT(2)
#define TX_DMA_EN BIT(0)
#define PDMA_BT_SIZE_4DWORDS (0 << 4)
#define PDMA_BT_SIZE_8DWORDS BIT(4)
#define PDMA_BT_SIZE_16DWORDS (2 << 4)
#define PDMA_BT_SIZE_32DWORDS (3 << 4)
#define PDMA_DESC_32B_E (1 << 8)
#define ADMA_RX_BT_SIZE_4DWORDS (0 << 11)
#define ADMA_RX_BT_SIZE_8DWORDS BIT(11)
#define ADMA_RX_BT_SIZE_16DWORDS (2 << 11)
#define ADMA_RX_BT_SIZE_32DWORDS (3 << 11)
/* Register bits.
*/
#define MACCFG_RXEN BIT(2)
#define MACCFG_TXEN BIT(3)
#define MACCFG_PROMISC BIT(18)
#define MACCFG_RXMCAST BIT(19)
#define MACCFG_FDUPLEX BIT(20)
#define MACCFG_PORTSEL BIT(27)
#define MACCFG_HBEATDIS BIT(28)
#define DMACTL_SR BIT(1) /* Start/Stop Receive */
#define DMACTL_ST BIT(13) /* Start/Stop Transmission Command */
#define DMACFG_SWR BIT(0) /* Software Reset */
#define DMACFG_BURST32 (32 << 8)
#define DMASTAT_TS 0x00700000 /* Transmit Process State */
#define DMASTAT_RS 0x000e0000 /* Receive Process State */
#define MACCFG_INIT 0 /* (MACCFG_FDUPLEX) // | MACCFG_PORTSEL) */
/* Descriptor bits.
*/
#define R_OWN 0x80000000 /* Own Bit */
#define RD_RER 0x02000000 /* Receive End Of Ring */
#define RD_LS 0x00000100 /* Last Descriptor */
#define RD_ES 0x00008000 /* Error Summary */
#define RD_CHAIN 0x01000000 /* Chained */
/* Word 0 */
#define T_OWN 0x80000000 /* Own Bit */
#define TD_ES 0x00008000 /* Error Summary */
/* Word 1 */
#define TD_LS 0x40000000 /* Last Segment */
#define TD_FS 0x20000000 /* First Segment */
#define TD_TER 0x08000000 /* Transmit End Of Ring */
#define TD_CHAIN 0x01000000 /* Chained */
#define TD_SET 0x08000000 /* Setup Packet */
#define POLL_DEMAND 1
#define RSTCTL (0x34)
#define RSTCTL_RSTENET1 BIT(19)
#define RSTCTL_RSTENET2 BIT(20)
#define INIT_VALUE_OF_RT2883_PSE_FQ_CFG 0xff908000
#define INIT_VALUE_OF_PSE_FQFC_CFG 0x80504000
#define INIT_VALUE_OF_FORCE_100_FD 0x1001BC01
#define INIT_VALUE_OF_FORCE_1000_FD 0x1F01DC01
/* Define Whole FE Reset Register */
#define RSTCTRL (RALINK_SYSCTL_BASE + 0x34)
#define RT2880_AGPIOCFG_REG (RALINK_SYSCTL_BASE + 0x3C)
/*=========================================
* PDMA RX Descriptor Format define
*=========================================
*/
struct PDMA_RXD_INFO1_T {
unsigned int PDP0;
};
struct PDMA_RXD_INFO2_T {
unsigned int PLEN1:2;
unsigned int LRO_AGG_CNT:8;
unsigned int REV:3;
unsigned int FOE_ENTRY_32:1;
unsigned int REV1:1;
unsigned int TAG:1;
unsigned int PLEN0:14;
unsigned int LS0:1;
unsigned int DDONE_bit:1;
};
struct PDMA_RXD_INFO3_T {
unsigned int VID:16;
unsigned int TPID:16;
};
struct PDMA_RXD_INFO4_T {
unsigned int FOE_ENTRY:14;
unsigned int CRSN:5;
unsigned int SP:4;
unsigned int L4F:1;
unsigned int L4VLD:1;
unsigned int TACK:1;
unsigned int IP4F:1;
unsigned int IP4:1;
unsigned int IP6:1;
unsigned int UN_USE1:3;
};
struct PDMA_rxdesc {
struct PDMA_RXD_INFO1_T rxd_info1;
struct PDMA_RXD_INFO2_T rxd_info2;
struct PDMA_RXD_INFO3_T rxd_info3;
struct PDMA_RXD_INFO4_T rxd_info4;
#ifdef CONFIG_32B_DESC
unsigned int rxd_info5;
unsigned int rxd_info6;
unsigned int rxd_info7;
unsigned int rxd_info8;
#endif
};
/*=========================================
* PDMA TX Descriptor Format define
*=========================================
*/
struct PDMA_TXD_INFO1_T {
unsigned int SDP0;
};
struct PDMA_TXD_INFO2_T {
unsigned int SDL1:14;
unsigned int LS1_bit:1;
unsigned int BURST_bit:1;
unsigned int SDL0:14;
unsigned int LS0_bit:1;
unsigned int DDONE_bit:1;
};
struct PDMA_TXD_INFO3_T {
unsigned int SDP1;
};
struct PDMA_TXD_INFO4_T {
unsigned int VLAN_TAG:17; /* INSV(1)+VPRI(3)+CFI(1)+VID(12) */
unsigned int RESV:2;
unsigned int UDF:5;
unsigned int FPORT:4;
unsigned int TSO:1;
unsigned int TUI_CO:3;
};
struct PDMA_txdesc {
struct PDMA_TXD_INFO1_T txd_info1;
struct PDMA_TXD_INFO2_T txd_info2;
struct PDMA_TXD_INFO3_T txd_info3;
struct PDMA_TXD_INFO4_T txd_info4;
#ifdef CONFIG_32B_DESC
unsigned int txd_info5;
unsigned int txd_info6;
unsigned int txd_info7;
unsigned int txd_info8;
#endif
};
/*=========================================
* QDMA TX Descriptor Format define
*=========================================
*/
struct QDMA_TXD_INFO1_T {
unsigned int SDP;
};
struct QDMA_TXD_INFO2_T {
unsigned int NDP;
};
struct QDMA_TXD_INFO3_T {
unsigned int RSV0:6;
unsigned int RSV1:2;
unsigned int SDL:16;
unsigned int RSV2:6;
unsigned int LS:1;
unsigned int DDONE:1;
};
struct QDMA_TXD_INFO4_T {
unsigned int RSV0:6;
unsigned int RSV1:2;
unsigned int FPORT:4;
unsigned int RSV2:2;
unsigned int RSV3:2;
unsigned int QID:7;
unsigned int RSV4:1;
unsigned int RSV5:6;
unsigned int SWC:1;
unsigned int BURST:1;
};
struct QDMA_TXD_INFO5_T {
unsigned int PROT:3;
unsigned int RSV0:2;
unsigned int IPOFST:7;
unsigned int RSV1:2;
unsigned int VQID:10;
unsigned int RSV2:2;
unsigned int VQID0:1;
unsigned int RSV3:1;
unsigned int TUI_CO:3;
unsigned int TSO:1;
};
struct QDMA_TXD_INFO6_T {
unsigned int VLAN_TAG_1:16;
unsigned int INSV_1:1;
unsigned int RSV0:14;
unsigned int INSV_0:1;
};
struct QDMA_TXD_INFO7_T {
unsigned int VLAN_TAG_0:16;
unsigned int VPID_0:16;
};
struct QDMA_TXD_INFO8_T {
unsigned int RSV;
};
struct QDMA_txdesc {
struct QDMA_TXD_INFO1_T txd_info1;
struct QDMA_TXD_INFO2_T txd_info2;
struct QDMA_TXD_INFO3_T txd_info3;
struct QDMA_TXD_INFO4_T txd_info4;
struct QDMA_TXD_INFO5_T txd_info5;
struct QDMA_TXD_INFO6_T txd_info6;
struct QDMA_TXD_INFO7_T txd_info7;
struct QDMA_TXD_INFO8_T txd_info8;
};
#define QTXD_LEN (sizeof(struct QDMA_txdesc))
#define PHY_ENABLE_AUTO_NEGO 0x1000
#define PHY_RESTART_AUTO_NEGO 0x0200
/* PHY_STAT_REG = 1; */
#define PHY_AUTO_NEGO_COMP 0x0020
#define PHY_LINK_STATUS 0x0004
/* PHY_AUTO_NEGO_REG = 4; */
#define PHY_CAP_10_HALF 0x0020
#define PHY_CAP_10_FULL 0x0040
#define PHY_CAP_100_HALF 0x0080
#define PHY_CAP_100_FULL 0x0100
/* proc definition */
#define PROCREG_CONTROL_FILE "/var/run/procreg_control"
#if 0
#if defined(CONFIG_MACH_MT7623)
#define PROCREG_DIR "mt7623"
#elif defined(CONFIG_MACH_LEOPARD)
#define PROCREG_DIR "leopard"
#elif defined(CONFIG_PINCTRL_MT7622)
#define PROCREG_DIR "mt7622"
#elif defined(CONFIG_SOC_MT7621)
#define PROCREG_DIR "mt7621"
#endif
#endif
#define PROCREG_DIR "panther"
#define PROCREG_SKBFREE "skb_free"
#define PROCREG_TXRING "tx_ring"
#define PROCREG_RXRING "rx_ring"
#define PROCREG_RXRING1 "rx_ring1"
#define PROCREG_RXRING2 "rx_ring2"
#define PROCREG_RXRING3 "rx_ring3"
#define PROCREG_NUM_OF_TXD "num_of_txd"
#define PROCREG_TSO_LEN "tso_len"
#define PROCREG_LRO_STATS "lro_stats"
#define PROCREG_HW_LRO_STATS "hw_lro_stats"
#define PROCREG_HW_LRO_AUTO_TLB "hw_lro_auto_tlb"
#define PROCREG_HW_IO_COHERENT "hw_iocoherent"
#define PROCREG_GMAC "gmac"
#define PROCREG_GMAC2 "gmac2"
#define PROCREG_CP0 "cp0"
#define PROCREG_RAQOS "qos"
#define PROCREG_READ_VAL "regread_value"
#define PROCREG_WRITE_VAL "regwrite_value"
#define PROCREG_ADDR "reg_addr"
#define PROCREG_CTL "procreg_control"
#define PROCREG_RXDONE_INTR "rxdone_intr_count"
#define PROCREG_ESW_INTR "esw_intr_count"
#define PROCREG_ESW_CNT "esw_cnt"
#define PROCREG_ETH_CNT "eth_cnt"
#define PROCREG_SNMP "snmp"
#define PROCREG_SET_LAN_IP "set_lan_ip"
#if defined(TASKLET_WORKQUEUE_SW)
#define PROCREG_SCHE "schedule"
#endif
#define PROCREG_QDMA "qdma"
#define PROCREG_INT_DBG "int_dbg"
struct rt2880_reg_op_data {
char name[64];
unsigned int reg_addr;
unsigned int op;
unsigned int reg_value;
};
struct lro_counters {
u32 lro_aggregated;
u32 lro_flushed;
u32 lro_no_desc;
};
struct lro_para_struct {
unsigned int lan_ip1;
};
struct parse_result {
/* layer2 header */
u8 dmac[6];
u8 smac[6];
/* vlan header */
u16 vlan_tag;
u16 vlan1_gap;
u16 vlan1;
u16 vlan2_gap;
u16 vlan2;
u16 vlan_layer;
/* pppoe header */
u32 pppoe_gap;
u16 ppp_tag;
u16 pppoe_sid;
/* layer3 header */
u16 eth_type;
struct iphdr iph;
struct ipv6hdr ip6h;
/* layer4 header */
struct tcphdr th;
struct udphdr uh;
u32 pkt_type;
u8 is_mcast;
};
#define DMA_GLO_CFG PDMA_GLO_CFG
#if defined(CONFIG_RAETH_QDMATX_QDMARX)
#define GDMA1_FWD_PORT 0x5555
#define GDMA2_FWD_PORT 0x5555
#elif defined(CONFIG_RAETH_PDMATX_QDMARX)
#define GDMA1_FWD_PORT 0x5555
#define GDMA2_FWD_PORT 0x5555
#else
#define GDMA1_FWD_PORT 0x0000
#define GDMA2_FWD_PORT 0x0000
#endif
#if defined(CONFIG_RAETH_QDMATX_QDMARX)
#define RAETH_RX_CALC_IDX0 QRX_CRX_IDX_0
#define RAETH_RX_CALC_IDX1 QRX_CRX_IDX_1
#elif defined(CONFIG_RAETH_PDMATX_QDMARX)
#define RAETH_RX_CALC_IDX0 QRX_CRX_IDX_0
#define RAETH_RX_CALC_IDX1 QRX_CRX_IDX_1
#else
#define RAETH_RX_CALC_IDX0 RX_CALC_IDX0
#define RAETH_RX_CALC_IDX1 RX_CALC_IDX1
#endif
#define RAETH_RX_CALC_IDX2 RX_CALC_IDX2
#define RAETH_RX_CALC_IDX3 RX_CALC_IDX3
#define RAETH_FE_INT_STATUS FE_INT_STATUS
#define RAETH_FE_INT_ALL FE_INT_ALL
#define RAETH_FE_INT_ENABLE FE_INT_ENABLE
#define RAETH_FE_INT_DLY_INIT FE_INT_DLY_INIT
#define RAETH_FE_INT_SETTING (RX_DONE_INT0 | RX_DONE_INT1 | \
TX_DONE_INT0 | TX_DONE_INT1 | \
TX_DONE_INT2 | TX_DONE_INT3)
#define QFE_INT_SETTING (RX_DONE_INT0 | RX_DONE_INT1 | \
TX_DONE_INT0 | TX_DONE_INT1 | \
TX_DONE_INT2 | TX_DONE_INT3)
#define RAETH_TX_DLY_INT TX_DLY_INT
#define RAETH_TX_DONE_INT0 TX_DONE_INT0
#define RAETH_DLY_INT_CFG DLY_INT_CFG
/* io-coherent for ethdmasys */
#define IOC_ETH_PDMA BIT(0)
#define IOC_ETH_QDMA BIT(1)
#endif /* RAETH_REG_H */