Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/94329/?format=api
https://patches.dpdk.org/api/patches/94329/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210617110005.4132926-5-jiawenwu@trustnetic.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210617110005.4132926-5-jiawenwu@trustnetic.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210617110005.4132926-5-jiawenwu@trustnetic.com", "date": "2021-06-17T10:59:50", "name": "[v6,04/19] net/ngbe: define registers", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "ad851f3e331c14776bc36d30613b01ae2492713e", "submitter": { "id": 1932, "url": "https://patches.dpdk.org/api/people/1932/?format=api", "name": "Jiawen Wu", "email": "jiawenwu@trustnetic.com" }, "delegate": { "id": 3961, "url": "https://patches.dpdk.org/api/users/3961/?format=api", "username": "arybchenko", "first_name": "Andrew", "last_name": "Rybchenko", "email": "andrew.rybchenko@oktetlabs.ru" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210617110005.4132926-5-jiawenwu@trustnetic.com/mbox/", "series": [ { "id": 17372, "url": "https://patches.dpdk.org/api/series/17372/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17372", "date": "2021-06-17T10:59:46", "name": "net: ngbe PMD", "version": 6, "mbox": "https://patches.dpdk.org/series/17372/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/94329/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/94329/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id B010BA0C4D;\n\tThu, 17 Jun 2021 12:58:37 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A30D9410FA;\n\tThu, 17 Jun 2021 12:58:19 +0200 (CEST)", "from smtpbg511.qq.com (smtpbg511.qq.com [203.205.250.109])\n by mails.dpdk.org (Postfix) with ESMTP id A8DFD410EB\n for <dev@dpdk.org>; Thu, 17 Jun 2021 12:58:15 +0200 (CEST)", "from wxdbg.localdomain.com (unknown [183.129.236.74])\n by esmtp6.qq.com (ESMTP) with\n id ; Thu, 17 Jun 2021 18:58:10 +0800 (CST)" ], "X-QQ-mid": "bizesmtp46t1623927490tzqx37fc", "X-QQ-SSF": "01400000000000D0E000B00A0000000", "X-QQ-FEAT": "xmzaef4TE3f/ThGiewy/0lbpHbnA80l+qPGArs6R0xXrO89mqm8FCfa4DjUh+\n 88TpC6s6hwXLBPvEtyeDP5LusgHWv1XbEHgczWqKWRCU4kqydENW1+HmTiM9QBfze1U77lZ\n FiiIznDD086BuYk0bc+yWOpR1Cu1m9tRvxZ4Y5aWJSC4HIXZiqXuW5U7i8n0vLjl/P2Ve/u\n EMCrIU2Kvvof04XnYrRn5X8OD5tqJ4DYB7OmRzyCTr4MxRUHu1Dg6Hiq3W6eEt2ceNf3LEw\n xHPzHH47SpAyueEjTHyGC3OcA2FhGun1WGFqltPrmgDUPYetBv/G+DIR8d5FaGSMymJfe7M\n MIPZEOUvoqQ3uCjlOw=", "X-QQ-GoodBg": "2", "From": "Jiawen Wu <jiawenwu@trustnetic.com>", "To": "dev@dpdk.org", "Cc": "Jiawen Wu <jiawenwu@trustnetic.com>", "Date": "Thu, 17 Jun 2021 18:59:50 +0800", "Message-Id": "<20210617110005.4132926-5-jiawenwu@trustnetic.com>", "X-Mailer": "git-send-email 2.27.0", "In-Reply-To": "<20210617110005.4132926-1-jiawenwu@trustnetic.com>", "References": "<20210617110005.4132926-1-jiawenwu@trustnetic.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-QQ-SENDSIZE": "520", "Feedback-ID": "bizesmtp:trustnetic.com:qybgforeign:qybgforeign7", "X-QQ-Bgrelay": "1", "Subject": "[dpdk-dev] [PATCH v6 04/19] net/ngbe: define registers", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Define all registers that will be used.\n\nSigned-off-by: Jiawen Wu <jiawenwu@trustnetic.com>\n---\n drivers/net/ngbe/base/ngbe_regs.h | 1490 +++++++++++++++++++++++++++++\n 1 file changed, 1490 insertions(+)\n create mode 100644 drivers/net/ngbe/base/ngbe_regs.h", "diff": "diff --git a/drivers/net/ngbe/base/ngbe_regs.h b/drivers/net/ngbe/base/ngbe_regs.h\nnew file mode 100644\nindex 0000000000..737bd796a1\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_regs.h\n@@ -0,0 +1,1490 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ * Copyright(c) 2010-2017 Intel Corporation\n+ */\n+\n+#ifndef _NGBE_REGS_H_\n+#define _NGBE_REGS_H_\n+\n+#define NGBE_PVMBX_QSIZE (16) /* 16*4B */\n+#define NGBE_PVMBX_BSIZE (NGBE_PVMBX_QSIZE * 4)\n+\n+#define NGBE_REMOVED(a) (0)\n+\n+#define NGBE_REG_DUMMY 0xFFFFFF\n+\n+#define MS8(shift, mask) (((u8)(mask)) << (shift))\n+#define LS8(val, shift, mask) (((u8)(val) & (u8)(mask)) << (shift))\n+#define RS8(reg, shift, mask) (((u8)(reg) >> (shift)) & (u8)(mask))\n+\n+#define MS16(shift, mask) (((u16)(mask)) << (shift))\n+#define LS16(val, shift, mask) (((u16)(val) & (u16)(mask)) << (shift))\n+#define RS16(reg, shift, mask) (((u16)(reg) >> (shift)) & (u16)(mask))\n+\n+#define MS32(shift, mask) (((u32)(mask)) << (shift))\n+#define LS32(val, shift, mask) (((u32)(val) & (u32)(mask)) << (shift))\n+#define RS32(reg, shift, mask) (((u32)(reg) >> (shift)) & (u32)(mask))\n+\n+#define MS64(shift, mask) (((u64)(mask)) << (shift))\n+#define LS64(val, shift, mask) (((u64)(val) & (u64)(mask)) << (shift))\n+#define RS64(reg, shift, mask) (((u64)(reg) >> (shift)) & (u64)(mask))\n+\n+#define MS(shift, mask) MS32(shift, mask)\n+#define LS(val, shift, mask) LS32(val, shift, mask)\n+#define RS(reg, shift, mask) RS32(reg, shift, mask)\n+\n+#define ROUND_UP(x, y) (((x) + (y) - 1) / (y) * (y))\n+#define ROUND_DOWN(x, y) ((x) / (y) * (y))\n+#define ROUND_OVER(x, maxbits, unitbits) \\\n+\t((x) >= 1 << (maxbits) ? 0 : (x) >> (unitbits))\n+\n+/* autoc bits definition */\n+#define NGBE_AUTOC NGBE_REG_DUMMY\n+#define NGBE_AUTOC_FLU MS64(0, 0x1)\n+#define NGBE_AUTOC_10G_PMA_PMD_MASK MS64(7, 0x3) /* parallel */\n+#define NGBE_AUTOC_10G_XAUI LS64(0, 7, 0x3)\n+#define NGBE_AUTOC_10G_KX4 LS64(1, 7, 0x3)\n+#define NGBE_AUTOC_10G_CX4 LS64(2, 7, 0x3)\n+#define NGBE_AUTOC_10G_KR LS64(3, 7, 0x3) /* fixme */\n+#define NGBE_AUTOC_1G_PMA_PMD_MASK MS64(9, 0x7)\n+#define NGBE_AUTOC_1G_BX LS64(0, 9, 0x7)\n+#define NGBE_AUTOC_1G_KX LS64(1, 9, 0x7)\n+#define NGBE_AUTOC_1G_SFI LS64(0, 9, 0x7)\n+#define NGBE_AUTOC_1G_KX_BX LS64(1, 9, 0x7)\n+#define NGBE_AUTOC_AN_RESTART MS64(12, 0x1)\n+#define NGBE_AUTOC_LMS_MASK MS64(13, 0x7)\n+#define NGBE_AUTOC_LMS_10G LS64(3, 13, 0x7)\n+#define NGBE_AUTOC_LMS_KX4_KX_KR LS64(4, 13, 0x7)\n+#define NGBE_AUTOC_LMS_SGMII_1G_100M LS64(5, 13, 0x7)\n+#define NGBE_AUTOC_LMS_KX4_KX_KR_1G_AN LS64(6, 13, 0x7)\n+#define NGBE_AUTOC_LMS_KX4_KX_KR_SGMII LS64(7, 13, 0x7)\n+#define NGBE_AUTOC_LMS_1G_LINK_NO_AN LS64(0, 13, 0x7)\n+#define NGBE_AUTOC_LMS_10G_LINK_NO_AN LS64(1, 13, 0x7)\n+#define NGBE_AUTOC_LMS_1G_AN LS64(2, 13, 0x7)\n+#define NGBE_AUTOC_LMS_KX4_AN LS64(4, 13, 0x7)\n+#define NGBE_AUTOC_LMS_KX4_AN_1G_AN LS64(6, 13, 0x7)\n+#define NGBE_AUTOC_LMS_ATTACH_TYPE LS64(7, 13, 0x7)\n+#define NGBE_AUTOC_LMS_AN MS64(15, 0x7)\n+\n+#define NGBE_AUTOC_KR_SUPP MS64(16, 0x1)\n+#define NGBE_AUTOC_FECR MS64(17, 0x1)\n+#define NGBE_AUTOC_FECA MS64(18, 0x1)\n+#define NGBE_AUTOC_AN_RX_ALIGN MS64(18, 0x1F) /* fixme */\n+#define NGBE_AUTOC_AN_RX_DRIFT MS64(23, 0x3)\n+#define NGBE_AUTOC_AN_RX_LOOSE MS64(24, 0x3)\n+#define NGBE_AUTOC_PD_TMR MS64(25, 0x3)\n+#define NGBE_AUTOC_RF MS64(27, 0x1)\n+#define NGBE_AUTOC_ASM_PAUSE MS64(29, 0x1)\n+#define NGBE_AUTOC_SYM_PAUSE MS64(28, 0x1)\n+#define NGBE_AUTOC_PAUSE MS64(28, 0x3)\n+#define NGBE_AUTOC_KX_SUPP MS64(30, 0x1)\n+#define NGBE_AUTOC_KX4_SUPP MS64(31, 0x1)\n+\n+#define NGBE_AUTOC_10GS_PMA_PMD_MASK MS64(48, 0x3) /* serial */\n+#define NGBE_AUTOC_10GS_KR LS64(0, 48, 0x3)\n+#define NGBE_AUTOC_10GS_XFI LS64(1, 48, 0x3)\n+#define NGBE_AUTOC_10GS_SFI LS64(2, 48, 0x3)\n+#define NGBE_AUTOC_LINK_DIA_MASK MS64(60, 0x7)\n+#define NGBE_AUTOC_LINK_DIA_D3_MASK LS64(5, 60, 0x7)\n+\n+#define NGBE_AUTOC_SPEED_MASK MS64(32, 0xFFFF)\n+#define NGBD_AUTOC_SPEED(r) RS64(r, 32, 0xFFFF)\n+#define NGBE_AUTOC_SPEED(v) LS64(v, 32, 0xFFFF)\n+#define NGBE_LINK_SPEED_UNKNOWN 0\n+#define NGBE_LINK_SPEED_10M_FULL 0x0002\n+#define NGBE_LINK_SPEED_100M_FULL 0x0008\n+#define NGBE_LINK_SPEED_1GB_FULL 0x0020\n+#define NGBE_LINK_SPEED_2_5GB_FULL 0x0400\n+#define NGBE_LINK_SPEED_5GB_FULL 0x0800\n+#define NGBE_LINK_SPEED_10GB_FULL 0x0080\n+#define NGBE_LINK_SPEED_40GB_FULL 0x0100\n+#define NGBE_AUTOC_AUTONEG MS64(63, 0x1)\n+\n+\n+\n+/* Hardware Datapath:\n+ * RX: / Queue <- Filter \\\n+ * Host | TC <=> SEC <=> MAC <=> PHY\n+ * TX: \\ Queue -> Filter /\n+ *\n+ * Packet Filter:\n+ * RX: RSS < FDIR < Filter < Encrypt\n+ *\n+ * Macro Argument Naming:\n+ * rp = ring pair [0,127]\n+ * tc = traffic class [0,7]\n+ * up = user priority [0,7]\n+ * pi = pool index [0,63]\n+ * r = register\n+ * v = value\n+ * s = shift\n+ * m = mask\n+ * i,j,k = array index\n+ * H,L = high/low bits\n+ * HI,LO = high/low state\n+ */\n+\n+#define NGBE_ETHPHYIF NGBE_REG_DUMMY\n+#define NGBE_ETHPHYIF_MDIO_ACT MS(1, 0x1)\n+#define NGBE_ETHPHYIF_MDIO_MODE MS(2, 0x1)\n+#define NGBE_ETHPHYIF_MDIO_BASE(r) RS(r, 3, 0x1F)\n+#define NGBE_ETHPHYIF_MDIO_SHARED MS(13, 0x1)\n+#define NGBE_ETHPHYIF_SPEED_10M MS(17, 0x1)\n+#define NGBE_ETHPHYIF_SPEED_100M MS(18, 0x1)\n+#define NGBE_ETHPHYIF_SPEED_1G MS(19, 0x1)\n+#define NGBE_ETHPHYIF_SPEED_2_5G MS(20, 0x1)\n+#define NGBE_ETHPHYIF_SPEED_10G MS(21, 0x1)\n+#define NGBE_ETHPHYIF_SGMII_ENABLE MS(25, 0x1)\n+#define NGBE_ETHPHYIF_INT_PHY_MODE MS(24, 0x1)\n+#define NGBE_ETHPHYIF_IO_XPCS MS(30, 0x1)\n+#define NGBE_ETHPHYIF_IO_EPHY MS(31, 0x1)\n+\n+/******************************************************************************\n+ * Chip Registers\n+ ******************************************************************************/\n+/**\n+ * Chip Status\n+ **/\n+#define NGBE_PWR\t\t0x010000\n+#define NGBE_PWR_LAN(r)\tRS(r, 28, 0xC)\n+#define NGBE_PWR_LAN_0\t(1)\n+#define NGBE_PWR_LAN_1\t(2)\n+#define NGBE_PWR_LAN_2\t(3)\n+#define NGBE_PWR_LAN_3\t(4)\n+#define NGBE_CTL\t\t0x010004\n+#define NGBE_LOCKPF\t\t0x010008\n+#define NGBE_RST\t\t0x01000C\n+#define NGBE_RST_SW\t\tMS(0, 0x1)\n+#define NGBE_RST_LAN(i)\tMS(((i) + 1), 0x1)\n+#define NGBE_RST_FW\t\tMS(5, 0x1)\n+#define NGBE_RST_ETH(i)\tMS(((i) + 29), 0x1)\n+#define NGBE_RST_GLB\t\tMS(31, 0x1)\n+#define NGBE_RST_DEFAULT\t(NGBE_RST_SW | \\\n+\t\t\t\tNGBE_RST_LAN(0) | \\\n+\t\t\t\tNGBE_RST_LAN(1) | \\\n+\t\t\t\tNGBE_RST_LAN(2) | \\\n+\t\t\t\tNGBE_RST_LAN(3))\n+#define NGBE_PROB\t\t\t0x010010\n+#define NGBE_IODRV\t\t\t0x010024\n+#define NGBE_STAT\t\t\t0x010028\n+#define NGBE_STAT_MNGINIT\t\tMS(0, 0x1)\n+#define NGBE_STAT_MNGVETO\t\tMS(8, 0x1)\n+#define NGBE_STAT_ECCLAN0\t\tMS(16, 0x1)\n+#define NGBE_STAT_ECCLAN1\t\tMS(17, 0x1)\n+#define NGBE_STAT_ECCLAN2\t\tMS(18, 0x1)\n+#define NGBE_STAT_ECCLAN3\t\tMS(19, 0x1)\n+#define NGBE_STAT_ECCMNG\t\tMS(20, 0x1)\n+#define NGBE_STAT_ECCPCORE\t\tMS(21, 0X1)\n+#define NGBE_STAT_ECCPCIW\t\tMS(22, 0x1)\n+#define NGBE_STAT_ECCPCIEPHY\t\tMS(23, 0x1)\n+#define NGBE_STAT_ECCFMGR\t\tMS(24, 0x1)\n+#define NGBE_STAT_GPHY_IN_RST(i)\tMS(((i) + 9), 0x1)\n+#define NGBE_RSTSTAT\t\t\t0x010030\n+#define NGBE_RSTSTAT_PROG\t\tMS(20, 0x1)\n+#define NGBE_RSTSTAT_PREP\t\tMS(19, 0x1)\n+#define NGBE_RSTSTAT_TYPE_MASK\tMS(16, 0x7)\n+#define NGBE_RSTSTAT_TYPE(r)\t\tRS(r, 16, 0x7)\n+#define NGBE_RSTSTAT_TYPE_PE\t\tLS(0, 16, 0x7)\n+#define NGBE_RSTSTAT_TYPE_PWR\t\tLS(1, 16, 0x7)\n+#define NGBE_RSTSTAT_TYPE_HOT\t\tLS(2, 16, 0x7)\n+#define NGBE_RSTSTAT_TYPE_SW\t\tLS(3, 16, 0x7)\n+#define NGBE_RSTSTAT_TYPE_FW\t\tLS(4, 16, 0x7)\n+#define NGBE_RSTSTAT_TMRINIT_MASK\tMS(8, 0xFF)\n+#define NGBE_RSTSTAT_TMRINIT(v)\tLS(v, 8, 0xFF)\n+#define NGBE_RSTSTAT_TMRCNT_MASK\tMS(0, 0xFF)\n+#define NGBE_RSTSTAT_TMRCNT(v)\tLS(v, 0, 0xFF)\n+#define NGBE_PWRTMR\t\t\t0x010034\n+\n+/**\n+ * SPI(Flash)\n+ **/\n+#define NGBE_SPICMD 0x010104\n+#define NGBE_SPICMD_ADDR(v) LS(v, 0, 0xFFFFFF)\n+#define NGBE_SPICMD_CLK(v) LS(v, 25, 0x7)\n+#define NGBE_SPICMD_CMD(v) LS(v, 28, 0x7)\n+#define NGBE_SPIDAT 0x010108\n+#define NGBE_SPIDAT_BYPASS MS(31, 0x1)\n+#define NGBE_SPIDAT_STATUS(v) LS(v, 16, 0xFF)\n+#define NGBE_SPIDAT_OPDONE MS(0, 0x1)\n+#define NGBE_SPISTAT 0x01010C\n+#define NGBE_SPISTAT_OPDONE MS(0, 0x1)\n+#define NGBE_SPISTAT_BPFLASH MS(31, 0x1)\n+#define NGBE_SPIUSRCMD 0x010110\n+#define NGBE_SPICFG0 0x010114\n+#define NGBE_SPICFG1 0x010118\n+\n+/* FMGR Registers */\n+#define NGBE_ILDRSTAT 0x010120\n+#define NGBE_ILDRSTAT_PCIRST MS(0, 0x1)\n+#define NGBE_ILDRSTAT_PWRRST MS(1, 0x1)\n+#define NGBE_ILDRSTAT_SWRST MS(11, 0x1)\n+#define NGBE_ILDRSTAT_SWRST_LAN0 MS(13, 0x1)\n+#define NGBE_ILDRSTAT_SWRST_LAN1 MS(14, 0x1)\n+#define NGBE_ILDRSTAT_SWRST_LAN2 MS(15, 0x1)\n+#define NGBE_ILDRSTAT_SWRST_LAN3 MS(16, 0x1)\n+\n+#define NGBE_SRAM 0x010124\n+#define NGBE_SRAM_SZ(v) LS(v, 28, 0x7)\n+#define NGBE_SRAMCTLECC 0x010130\n+#define NGBE_SRAMINJECC 0x010134\n+#define NGBE_SRAMECC 0x010138\n+\n+/* Sensors for PVT(Process Voltage Temperature) */\n+#define NGBE_TSCTRL\t\t\t0x010300\n+#define NGBE_TSCTRL_EVALMD\t\tMS(31, 0x1)\n+#define NGBE_TSEN\t\t\t0x010304\n+#define NGBE_TSEN_ENA\t\t\tMS(0, 0x1)\n+#define NGBE_TSSTAT\t\t\t0x010308\n+#define NGBE_TSSTAT_VLD\t\tMS(16, 0x1)\n+#define NGBE_TSSTAT_DATA(r)\t\tRS(r, 0, 0x3FF)\n+#define NGBE_TSATHRE\t\t\t0x01030C\n+#define NGBE_TSDTHRE\t\t\t0x010310\n+#define NGBE_TSINTR\t\t\t0x010314\n+#define NGBE_TSINTR_AEN\t\tMS(0, 0x1)\n+#define NGBE_TSINTR_DEN\t\tMS(1, 0x1)\n+#define NGBE_TSALM\t\t\t0x010318\n+#define NGBE_TSALM_LO\t\t\tMS(0, 0x1)\n+#define NGBE_TSALM_HI\t\t\tMS(1, 0x1)\n+\n+#define NGBE_EFUSE_WDATA0 0x010320\n+#define NGBE_EFUSE_WDATA1 0x010324\n+#define NGBE_EFUSE_RDATA0 0x010328\n+#define NGBE_EFUSE_RDATA1 0x01032C\n+#define NGBE_EFUSE_STATUS 0x010330\n+\n+/******************************************************************************\n+ * Port Registers\n+ ******************************************************************************/\n+/* Internal PHY reg_offset [0,31] */\n+#define NGBE_PHY_CONFIG(reg_offset)\t(0x014000 + (reg_offset) * 4)\n+\n+/* Port Control */\n+#define NGBE_PORTCTL 0x014400\n+#define NGBE_PORTCTL_VLANEXT MS(0, 0x1)\n+#define NGBE_PORTCTL_ETAG MS(1, 0x1)\n+#define NGBE_PORTCTL_QINQ MS(2, 0x1)\n+#define NGBE_PORTCTL_DRVLOAD MS(3, 0x1)\n+#define NGBE_PORTCTL_NUMVT_MASK MS(12, 0x1)\n+#define NGBE_PORTCTL_NUMVT_8 LS(1, 12, 0x1)\n+#define NGBE_PORTCTL_RSTDONE MS(14, 0x1)\n+#define NGBE_PORTCTL_TEREDODIA MS(27, 0x1)\n+#define NGBE_PORTCTL_GENEVEDIA MS(28, 0x1)\n+#define NGBE_PORTCTL_VXLANGPEDIA MS(30, 0x1)\n+#define NGBE_PORTCTL_VXLANDIA MS(31, 0x1)\n+\n+/* Port Status */\n+#define NGBE_PORTSTAT 0x014404\n+#define NGBE_PORTSTAT_BW_MASK MS(1, 0x7)\n+#define NGBE_PORTSTAT_BW_1G MS(1, 0x1)\n+#define NGBE_PORTSTAT_BW_100M MS(2, 0x1)\n+#define NGBE_PORTSTAT_BW_10M MS(3, 0x1)\n+#define NGBE_PORTSTAT_ID(r) RS(r, 8, 0x3)\n+\n+#define NGBE_EXTAG 0x014408\n+#define NGBE_EXTAG_ETAG_MASK MS(0, 0xFFFF)\n+#define NGBE_EXTAG_ETAG(v) LS(v, 0, 0xFFFF)\n+#define NGBE_EXTAG_VLAN_MASK MS(16, 0xFFFF)\n+#define NGBE_EXTAG_VLAN(v) LS(v, 16, 0xFFFF)\n+\n+#define NGBE_TCPTIME 0x014420\n+\n+#define NGBE_LEDCTL 0x014424\n+#define NGBE_LEDCTL_SEL(s) MS((s), 0x1)\n+#define NGBE_LEDCTL_OD(s) MS(((s) + 16), 0x1)\n+\t/* s=1G(1),100M(2),10M(3) */\n+#define NGBE_LEDCTL_100M (NGBE_LEDCTL_SEL(2) | NGBE_LEDCTL_OD(2))\n+\n+#define NGBE_TAGTPID(i) (0x014430 + (i) * 4) /*0-3*/\n+#define NGBE_TAGTPID_LSB_MASK MS(0, 0xFFFF)\n+#define NGBE_TAGTPID_LSB(v) LS(v, 0, 0xFFFF)\n+#define NGBE_TAGTPID_MSB_MASK MS(16, 0xFFFF)\n+#define NGBE_TAGTPID_MSB(v) LS(v, 16, 0xFFFF)\n+\n+#define NGBE_LAN_SPEED\t\t\t0x014440\n+#define NGBE_LAN_SPEED_MASK\t\tMS(0, 0x3)\n+\n+/* GPIO Registers */\n+#define NGBE_GPIODATA\t\t\t0x014800\n+#define NGBE_GPIOBIT_0 MS(0, 0x1) /* O:tx fault */\n+#define NGBE_GPIOBIT_1 MS(1, 0x1) /* O:tx disabled */\n+#define NGBE_GPIOBIT_2 MS(2, 0x1) /* I:sfp module absent */\n+#define NGBE_GPIOBIT_3 MS(3, 0x1) /* I:rx signal lost */\n+#define NGBE_GPIOBIT_4 MS(4, 0x1) /* O:rate select, 1G(0) 10G(1) */\n+#define NGBE_GPIOBIT_5 MS(5, 0x1) /* O:rate select, 1G(0) 10G(1) */\n+#define NGBE_GPIOBIT_6 MS(6, 0x1) /* I:ext phy interrupt */\n+#define NGBE_GPIOBIT_7 MS(7, 0x1) /* I:fan speed alarm */\n+#define NGBE_GPIODIR\t\t\t0x014804\n+#define NGBE_GPIODIR_DDR(v)\t\tLS(v, 0, 0x3)\n+#define NGBE_GPIOCTL\t\t\t0x014808\n+#define NGBE_GPIOINTEN\t\t\t0x014830\n+#define NGBE_GPIOINTEN_INT(v)\t\tLS(v, 0, 0x3)\n+#define NGBE_GPIOINTMASK\t\t0x014834\n+#define NGBE_GPIOINTTYPE\t\t0x014838\n+#define NGBE_GPIOINTTYPE_LEVEL(v)\tLS(v, 0, 0x3)\n+#define NGBE_GPIOINTPOL\t\t\t0x01483C\n+#define NGBE_GPIOINTPOL_ACT(v)\tLS(v, 0, 0x3)\n+#define NGBE_GPIOINTSTAT\t\t0x014840\n+#define NGBE_GPIOINTDB\t\t\t0x014848\n+#define NGBE_GPIOEOI\t\t\t0x01484C\n+#define NGBE_GPIODAT\t\t\t0x014850\n+\n+/* TPH */\n+#define NGBE_TPHCFG 0x014F00\n+\n+/******************************************************************************\n+ * Transmit DMA Registers\n+ ******************************************************************************/\n+/* TDMA Control */\n+#define NGBE_DMATXCTRL\t\t\t0x018000\n+#define NGBE_DMATXCTRL_ENA\t\tMS(0, 0x1)\n+#define NGBE_DMATXCTRL_TPID_MASK\tMS(16, 0xFFFF)\n+#define NGBE_DMATXCTRL_TPID(v)\tLS(v, 16, 0xFFFF)\n+#define NGBE_POOLTXENA(i)\t\t(0x018004 + (i) * 4) /*0*/\n+#define NGBE_PRBTXDMACTL\t\t0x018010\n+#define NGBE_ECCTXDMACTL\t\t0x018014\n+#define NGBE_ECCTXDMAINJ\t\t0x018018\n+#define NGBE_ECCTXDMA\t\t\t0x01801C\n+#define NGBE_PBTXDMATH\t\t\t0x018020\n+#define NGBE_QPTXLLI\t\t\t0x018040\n+#define NGBE_POOLTXLBET\t\t\t0x018050\n+#define NGBE_POOLTXASET\t\t\t0x018058\n+#define NGBE_POOLTXASMAC\t\t0x018060\n+#define NGBE_POOLTXASVLAN\t\t0x018070\n+#define NGBE_POOLTXDSA\t\t\t0x0180A0\n+#define NGBE_POOLTAG(pl)\t\t(0x018100 + (pl) * 4) /*0-7*/\n+#define NGBE_POOLTAG_VTAG(v)\t\tLS(v, 0, 0xFFFF)\n+#define NGBE_POOLTAG_VTAG_MASK\tMS(0, 0xFFFF)\n+#define TXGBD_POOLTAG_VTAG_UP(r)\tRS(r, 13, 0x7)\n+#define NGBE_POOLTAG_TPIDSEL(v)\tLS(v, 24, 0x7)\n+#define NGBE_POOLTAG_ETAG_MASK\tMS(27, 0x3)\n+#define NGBE_POOLTAG_ETAG\t\tLS(2, 27, 0x3)\n+#define NGBE_POOLTAG_ACT_MASK\t\tMS(30, 0x3)\n+#define NGBE_POOLTAG_ACT_ALWAYS\tLS(1, 30, 0x3)\n+#define NGBE_POOLTAG_ACT_NEVER\tLS(2, 30, 0x3)\n+\n+/* Queue Arbiter(QoS) */\n+#define NGBE_QARBTXCTL\t\t\t0x018200\n+#define NGBE_QARBTXCTL_DA\t\tMS(6, 0x1)\n+#define NGBE_QARBTXRATE\t\t\t0x018404\n+#define NGBE_QARBTXRATE_MIN(v)\tLS(v, 0, 0x3FFF)\n+#define NGBE_QARBTXRATE_MAX(v)\tLS(v, 16, 0x3FFF)\n+\n+/* ETAG */\n+#define NGBE_POOLETAG(pl) (0x018700 + (pl) * 4)\n+\n+/******************************************************************************\n+ * Receive DMA Registers\n+ ******************************************************************************/\n+/* Receive Control */\n+#define NGBE_ARBRXCTL\t\t\t0x012000\n+#define NGBE_ARBRXCTL_DIA\t\tMS(6, 0x1)\n+#define NGBE_POOLRXENA(i)\t\t(0x012004 + (i) * 4) /*0*/\n+#define NGBE_PRBRDMA\t\t\t0x012010\n+#define NGBE_ECCRXDMACTL\t\t0x012014\n+#define NGBE_ECCRXDMAINJ\t\t0x012018\n+#define NGBE_ECCRXDMA\t\t\t0x01201C\n+#define NGBE_POOLRXDNA\t\t\t0x0120A0\n+#define NGBE_QPRXDROP\t\t\t0x012080\n+#define NGBE_QPRXSTRPVLAN\t\t0x012090\n+\n+/******************************************************************************\n+ * Packet Buffer\n+ ******************************************************************************/\n+/* Flow Control */\n+#define NGBE_FCXOFFTM\t\t\t0x019200\n+#define NGBE_FCWTRLO\t\t\t0x019220\n+#define NGBE_FCWTRLO_TH(v)\t\tLS(v, 10, 0x1FF) /*KB*/\n+#define NGBE_FCWTRLO_XON\t\tMS(31, 0x1)\n+#define NGBE_FCWTRHI\t\t\t0x019260\n+#define NGBE_FCWTRHI_TH(v)\t\tLS(v, 10, 0x1FF) /*KB*/\n+#define NGBE_FCWTRHI_XOFF\t\tMS(31, 0x1)\n+#define NGBE_RXFCRFSH\t\t\t0x0192A0\n+#define NGBE_RXFCFSH_TIME(v)\t\tLS(v, 0, 0xFFFF)\n+#define NGBE_FCSTAT\t\t\t0x01CE00\n+#define NGBE_FCSTAT_DLNK\t\tMS(0, 0x1)\n+#define NGBE_FCSTAT_ULNK\t\tMS(8, 0x1)\n+\n+#define NGBE_RXFCCFG 0x011090\n+#define NGBE_RXFCCFG_FC MS(0, 0x1)\n+#define NGBE_TXFCCFG 0x0192A4\n+#define NGBE_TXFCCFG_FC MS(3, 0x1)\n+\n+/* Data Buffer */\n+#define NGBE_PBRXCTL 0x019000\n+#define NGBE_PBRXCTL_ST MS(0, 0x1)\n+#define NGBE_PBRXCTL_ENA MS(31, 0x1)\n+#define NGBE_PBRXSTAT 0x019004\n+#define NGBE_PBRXSIZE 0x019020\n+#define NGBE_PBRXSIZE_KB(v) LS(v, 10, 0x3F)\n+\n+#define NGBE_PBRXOFTMR 0x019094\n+#define NGBE_PBRXDBGCMD 0x019090\n+#define NGBE_PBRXDBGDAT 0x0190A0\n+\n+#define NGBE_PBTXSIZE 0x01CC00\n+\n+/* LLI */\n+#define NGBE_PBRXLLI 0x19080\n+#define NGBE_PBRXLLI_SZLT(v) LS(v, 0, 0xFFF)\n+#define NGBE_PBRXLLI_UPLT(v) LS(v, 16, 0x7)\n+#define NGBE_PBRXLLI_UPEA MS(19, 0x1)\n+\n+/* Port Arbiter(QoS) */\n+#define NGBE_PARBTXCTL 0x01CD00\n+#define NGBE_PARBTXCTL_DA MS(6, 0x1)\n+\n+/******************************************************************************\n+ * Packet Filter (L2-7)\n+ ******************************************************************************/\n+/**\n+ * Receive Scaling\n+ **/\n+#define NGBE_POOLRSS(pl)\t\t(0x019300 + (pl) * 4) /*0-7*/\n+#define NGBE_POOLRSS_L4HDR\t\tMS(1, 0x1)\n+#define NGBE_POOLRSS_L3HDR\t\tMS(2, 0x1)\n+#define NGBE_POOLRSS_L2HDR\t\tMS(3, 0x1)\n+#define NGBE_POOLRSS_L2TUN\t\tMS(4, 0x1)\n+#define NGBE_POOLRSS_TUNHDR\t\tMS(5, 0x1)\n+#define NGBE_RSSTBL(i)\t\t\t(0x019400 + (i) * 4) /*32*/\n+#define NGBE_RSSKEY(i)\t\t\t(0x019480 + (i) * 4) /*10*/\n+#define NGBE_RACTL\t\t\t0x0194F4\n+#define NGBE_RACTL_RSSENA\t\tMS(2, 0x1)\n+#define NGBE_RACTL_RSSMASK\t\tMS(16, 0xFFFF)\n+#define NGBE_RACTL_RSSIPV4TCP\t\tMS(16, 0x1)\n+#define NGBE_RACTL_RSSIPV4\t\tMS(17, 0x1)\n+#define NGBE_RACTL_RSSIPV6\t\tMS(20, 0x1)\n+#define NGBE_RACTL_RSSIPV6TCP\t\tMS(21, 0x1)\n+#define NGBE_RACTL_RSSIPV4UDP\t\tMS(22, 0x1)\n+#define NGBE_RACTL_RSSIPV6UDP\t\tMS(23, 0x1)\n+\n+/**\n+ * Flow Director\n+ **/\n+#define PERFECT_BUCKET_64KB_HASH_MASK\t0x07FF\t/* 11 bits */\n+#define PERFECT_BUCKET_128KB_HASH_MASK\t0x0FFF\t/* 12 bits */\n+#define PERFECT_BUCKET_256KB_HASH_MASK\t0x1FFF\t/* 13 bits */\n+#define SIG_BUCKET_64KB_HASH_MASK\t0x1FFF\t/* 13 bits */\n+#define SIG_BUCKET_128KB_HASH_MASK\t0x3FFF\t/* 14 bits */\n+#define SIG_BUCKET_256KB_HASH_MASK\t0x7FFF\t/* 15 bits */\n+\n+/**\n+ * 5-tuple Filter\n+ **/\n+#define NGBE_5TFPORT(i)\t\t\t(0x019A00 + (i) * 4) /*0-7*/\n+#define NGBE_5TFPORT_SRC(v)\t\tLS(v, 0, 0xFFFF)\n+#define NGBE_5TFPORT_DST(v)\t\tLS(v, 16, 0xFFFF)\n+#define NGBE_5TFCTL0(i)\t\t\t(0x019C00 + (i) * 4) /*0-7*/\n+#define NGBE_5TFCTL0_PROTO(v)\t\tLS(v, 0, 0x3)\n+enum ngbe_5tuple_protocol {\n+\tNGBE_5TF_PROT_TCP = 0,\n+\tNGBE_5TF_PROT_UDP,\n+\tNGBE_5TF_PROT_SCTP,\n+\tNGBE_5TF_PROT_NONE,\n+};\n+#define NGBE_5TFCTL0_PRI(v)\t\tLS(v, 2, 0x7)\n+#define NGBE_5TFCTL0_POOL(v)\t\tLS(v, 8, 0x7)\n+#define NGBE_5TFCTL0_MASK\t\tMS(27, 0xF)\n+#define NGBE_5TFCTL0_MSPORT\t\tMS(27, 0x1)\n+#define NGBE_5TFCTL0_MDPORT\t\tMS(28, 0x1)\n+#define NGBE_5TFCTL0_MPROTO\t\tMS(29, 0x1)\n+#define NGBE_5TFCTL0_MPOOL\t\tMS(30, 0x1)\n+#define NGBE_5TFCTL0_ENA\t\tMS(31, 0x1)\n+#define NGBE_5TFCTL1(i)\t\t\t(0x019E00 + (i) * 4) /*0-7*/\n+#define NGBE_5TFCTL1_CHKSZ\t\tMS(12, 0x1)\n+#define NGBE_5TFCTL1_LLI\t\tMS(20, 0x1)\n+#define NGBE_5TFCTL1_QP(v)\t\tLS(v, 21, 0x7)\n+\n+/**\n+ * Storm Control\n+ **/\n+#define NGBE_STRMCTL 0x015004\n+#define NGBE_STRMCTL_MCPNSH MS(0, 0x1)\n+#define NGBE_STRMCTL_MCDROP MS(1, 0x1)\n+#define NGBE_STRMCTL_BCPNSH MS(2, 0x1)\n+#define NGBE_STRMCTL_BCDROP MS(3, 0x1)\n+#define NGBE_STRMCTL_DFTPOOL MS(4, 0x1)\n+#define NGBE_STRMCTL_ITVL(v) LS(v, 8, 0x3FF)\n+#define NGBE_STRMTH 0x015008\n+#define NGBE_STRMTH_MC(v) LS(v, 0, 0xFFFF)\n+#define NGBE_STRMTH_BC(v) LS(v, 16, 0xFFFF)\n+\n+/******************************************************************************\n+ * Ether Flow\n+ ******************************************************************************/\n+#define NGBE_PSRCTL\t\t 0x015000\n+#define NGBE_PSRCTL_TPE\t MS(4, 0x1)\n+#define NGBE_PSRCTL_ADHF12_MASK MS(5, 0x3)\n+#define NGBE_PSRCTL_ADHF12(v) LS(v, 5, 0x3)\n+#define NGBE_PSRCTL_UCHFENA\t MS(7, 0x1)\n+#define NGBE_PSRCTL_MCHFENA\t MS(7, 0x1)\n+#define NGBE_PSRCTL_MCP\t MS(8, 0x1)\n+#define NGBE_PSRCTL_UCP\t MS(9, 0x1)\n+#define NGBE_PSRCTL_BCA\t MS(10, 0x1)\n+#define NGBE_PSRCTL_L4CSUM\t MS(12, 0x1)\n+#define NGBE_PSRCTL_PCSD\t MS(13, 0x1)\n+#define NGBE_PSRCTL_LBENA\t MS(18, 0x1)\n+#define NGBE_FRMSZ\t\t 0x015020\n+#define NGBE_FRMSZ_MAX_MASK\t MS(0, 0xFFFF)\n+#define NGBE_FRMSZ_MAX(v)\t LS(v, 0, 0xFFFF)\n+#define NGBE_VLANCTL\t\t 0x015088\n+#define NGBE_VLANCTL_TPID_MASK MS(0, 0xFFFF)\n+#define NGBE_VLANCTL_TPID(v)\t LS(v, 0, 0xFFFF)\n+#define NGBE_VLANCTL_CFI\t MS(28, 0x1)\n+#define NGBE_VLANCTL_CFIENA\t MS(29, 0x1)\n+#define NGBE_VLANCTL_VFE\t MS(30, 0x1)\n+#define NGBE_POOLCTL\t\t 0x0151B0\n+#define NGBE_POOLCTL_DEFDSA\t MS(29, 0x1)\n+#define NGBE_POOLCTL_RPLEN\t MS(30, 0x1)\n+#define NGBE_POOLCTL_MODE_MASK MS(16, 0x3)\n+#define NGBE_PSRPOOL_MODE_MAC LS(0, 16, 0x3)\n+#define NGBE_PSRPOOL_MODE_ETAG LS(1, 16, 0x3)\n+#define NGBE_POOLCTL_DEFPL(v) LS(v, 7, 0x7)\n+#define NGBE_POOLCTL_DEFPL_MASK MS(7, 0x7)\n+\n+#define NGBE_ETFLT(i) (0x015128 + (i) * 4) /*0-7*/\n+#define NGBE_ETFLT_ETID(v) LS(v, 0, 0xFFFF)\n+#define NGBE_ETFLT_ETID_MASK MS(0, 0xFFFF)\n+#define NGBE_ETFLT_POOL(v) LS(v, 20, 0x7)\n+#define NGBE_ETFLT_POOLENA MS(26, 0x1)\n+#define NGBE_ETFLT_TXAS MS(29, 0x1)\n+#define NGBE_ETFLT_1588 MS(30, 0x1)\n+#define NGBE_ETFLT_ENA MS(31, 0x1)\n+#define NGBE_ETCLS(i) (0x019100 + (i) * 4) /*0-7*/\n+#define NGBE_ETCLS_QPID(v) LS(v, 16, 0x7)\n+#define NGBD_ETCLS_QPID(r) RS(r, 16, 0x7)\n+#define NGBE_ETCLS_LLI MS(29, 0x1)\n+#define NGBE_ETCLS_QENA MS(31, 0x1)\n+#define NGBE_SYNCLS 0x019130\n+#define NGBE_SYNCLS_ENA MS(0, 0x1)\n+#define NGBE_SYNCLS_QPID(v) LS(v, 1, 0x7)\n+#define NGBD_SYNCLS_QPID(r) RS(r, 1, 0x7)\n+#define NGBE_SYNCLS_QPID_MASK MS(1, 0x7)\n+#define NGBE_SYNCLS_HIPRIO MS(31, 0x1)\n+\n+/* MAC & VLAN & NVE */\n+#define NGBE_PSRVLANIDX 0x016230 /*0-31*/\n+#define NGBE_PSRVLAN 0x016220\n+#define NGBE_PSRVLAN_VID(v) LS(v, 0, 0xFFF)\n+#define NGBE_PSRVLAN_EA MS(31, 0x1)\n+#define NGBE_PSRVLANPLM(i) (0x016224 + (i) * 4) /*0-1*/\n+\n+/**\n+ * Mirror Rules\n+ **/\n+#define NGBE_MIRRCTL(i)\t (0x015B00 + (i) * 4)\n+#define NGBE_MIRRCTL_POOL\t MS(0, 0x1)\n+#define NGBE_MIRRCTL_UPLINK\t MS(1, 0x1)\n+#define NGBE_MIRRCTL_DNLINK\t MS(2, 0x1)\n+#define NGBE_MIRRCTL_VLAN\t MS(3, 0x1)\n+#define NGBE_MIRRCTL_DESTP(v)\t LS(v, 8, 0x7)\n+#define NGBE_MIRRVLANL(i)\t (0x015B10 + (i) * 8)\n+#define NGBE_MIRRPOOLL(i)\t (0x015B30 + (i) * 8)\n+\n+/**\n+ * Time Stamp\n+ **/\n+#define NGBE_TSRXCTL\t\t0x015188\n+#define NGBE_TSRXCTL_VLD\tMS(0, 0x1)\n+#define NGBE_TSRXCTL_TYPE(v)\tLS(v, 1, 0x7)\n+#define NGBE_TSRXCTL_TYPE_V2L2\t(0)\n+#define NGBE_TSRXCTL_TYPE_V1L4\t(1)\n+#define NGBE_TSRXCTL_TYPE_V2L24\t(2)\n+#define NGBE_TSRXCTL_TYPE_V2EVENT\t(5)\n+#define NGBE_TSRXCTL_ENA\tMS(4, 0x1)\n+#define NGBE_TSRXSTMPL\t\t0x0151E8\n+#define NGBE_TSRXSTMPH\t\t0x0151A4\n+#define NGBE_TSTXCTL\t\t0x011F00\n+#define NGBE_TSTXCTL_VLD\tMS(0, 0x1)\n+#define NGBE_TSTXCTL_ENA\tMS(4, 0x1)\n+#define NGBE_TSTXSTMPL\t\t0x011F04\n+#define NGBE_TSTXSTMPH\t\t0x011F08\n+#define NGBE_TSTIMEL\t\t0x011F0C\n+#define NGBE_TSTIMEH\t\t0x011F10\n+#define NGBE_TSTIMEINC\t\t0x011F14\n+#define NGBE_TSTIMEINC_IV(v)\tLS(v, 0, 0x7FFFFFF)\n+\n+/**\n+ * Wake on Lan\n+ **/\n+#define NGBE_WOLCTL 0x015B80\n+#define NGBE_WOLIPCTL 0x015B84\n+#define NGBE_WOLIP4(i) (0x015BC0 + (i) * 4) /* 0-3 */\n+#define NGBE_WOLIP6(i) (0x015BE0 + (i) * 4) /* 0-3 */\n+\n+#define NGBE_WOLFLEXCTL 0x015CFC\n+#define NGBE_WOLFLEXI 0x015B8C\n+#define NGBE_WOLFLEXDAT(i) (0x015C00 + (i) * 16) /* 0-15 */\n+#define NGBE_WOLFLEXMSK(i) (0x015C08 + (i) * 16) /* 0-15 */\n+\n+/******************************************************************************\n+ * Security Registers\n+ ******************************************************************************/\n+#define NGBE_SECRXCTL\t\t\t0x017000\n+#define NGBE_SECRXCTL_ODSA\t\tMS(0, 0x1)\n+#define NGBE_SECRXCTL_XDSA\t\tMS(1, 0x1)\n+#define NGBE_SECRXCTL_CRCSTRIP\tMS(2, 0x1)\n+#define NGBE_SECRXCTL_SAVEBAD\t\tMS(6, 0x1)\n+#define NGBE_SECRXSTAT\t\t\t0x017004\n+#define NGBE_SECRXSTAT_RDY\t\tMS(0, 0x1)\n+#define NGBE_SECRXSTAT_ECC\t\tMS(1, 0x1)\n+\n+#define NGBE_SECTXCTL\t\t\t0x01D000\n+#define NGBE_SECTXCTL_ODSA\t\tMS(0, 0x1)\n+#define NGBE_SECTXCTL_XDSA\t\tMS(1, 0x1)\n+#define NGBE_SECTXCTL_STFWD\t\tMS(2, 0x1)\n+#define NGBE_SECTXCTL_MSKIV\t\tMS(3, 0x1)\n+#define NGBE_SECTXSTAT\t\t\t0x01D004\n+#define NGBE_SECTXSTAT_RDY\t\tMS(0, 0x1)\n+#define NGBE_SECTXSTAT_ECC\t\tMS(1, 0x1)\n+#define NGBE_SECTXBUFAF\t\t\t0x01D008\n+#define NGBE_SECTXBUFAE\t\t\t0x01D00C\n+#define NGBE_SECTXIFG\t\t\t0x01D020\n+#define NGBE_SECTXIFG_MIN(v)\t\tLS(v, 0, 0xF)\n+#define NGBE_SECTXIFG_MIN_MASK\tMS(0, 0xF)\n+\n+/**\n+ * LinkSec\n+ **/\n+#define NGBE_LSECRXCAP\t 0x017200\n+#define NGBE_LSECRXCTL 0x017204\n+\t/* disabled(0),check(1),strict(2),drop(3) */\n+#define NGBE_LSECRXCTL_MODE_MASK MS(2, 0x3)\n+#define NGBE_LSECRXCTL_MODE_STRICT LS(2, 2, 0x3)\n+#define NGBE_LSECRXCTL_POSTHDR MS(6, 0x1)\n+#define NGBE_LSECRXCTL_REPLAY MS(7, 0x1)\n+#define NGBE_LSECRXSCIL 0x017208\n+#define NGBE_LSECRXSCIH 0x01720C\n+#define NGBE_LSECRXSA(i) (0x017210 + (i) * 4) /* 0-1 */\n+#define NGBE_LSECRXPN(i) (0x017218 + (i) * 4) /* 0-1 */\n+#define NGBE_LSECRXKEY(n, i)\t (0x017220 + 0x10 * (n) + 4 * (i)) /*0-3*/\n+#define NGBE_LSECTXCAP 0x01D200\n+#define NGBE_LSECTXCTL 0x01D204\n+\t/* disabled(0), auth(1), auth+encrypt(2) */\n+#define NGBE_LSECTXCTL_MODE_MASK MS(0, 0x3)\n+#define NGBE_LSECTXCTL_MODE_AUTH LS(1, 0, 0x3)\n+#define NGBE_LSECTXCTL_MODE_AENC LS(2, 0, 0x3)\n+#define NGBE_LSECTXCTL_PNTRH_MASK MS(8, 0xFFFFFF)\n+#define NGBE_LSECTXCTL_PNTRH(v) LS(v, 8, 0xFFFFFF)\n+#define NGBE_LSECTXSCIL 0x01D208\n+#define NGBE_LSECTXSCIH 0x01D20C\n+#define NGBE_LSECTXSA 0x01D210\n+#define NGBE_LSECTXPN0 0x01D214\n+#define NGBE_LSECTXPN1 0x01D218\n+#define NGBE_LSECTXKEY0(i) (0x01D21C + (i) * 4) /* 0-3 */\n+#define NGBE_LSECTXKEY1(i) (0x01D22C + (i) * 4) /* 0-3 */\n+\n+#define NGBE_LSECRX_UTPKT 0x017240\n+#define NGBE_LSECRX_DECOCT 0x017244\n+#define NGBE_LSECRX_VLDOCT 0x017248\n+#define NGBE_LSECRX_BTPKT 0x01724C\n+#define NGBE_LSECRX_NOSCIPKT 0x017250\n+#define NGBE_LSECRX_UNSCIPKT 0x017254\n+#define NGBE_LSECRX_UNCHKPKT 0x017258\n+#define NGBE_LSECRX_DLYPKT 0x01725C\n+#define NGBE_LSECRX_LATEPKT 0x017260\n+#define NGBE_LSECRX_OKPKT(i) (0x017264 + (i) * 4) /* 0-1 */\n+#define NGBE_LSECRX_BADPKT(i) (0x01726C + (i) * 4) /* 0-1 */\n+#define NGBE_LSECRX_INVPKT(i) (0x017274 + (i) * 4) /* 0-1 */\n+#define NGBE_LSECRX_BADSAPKT(i) (0x01727C + (i) * 8) /* 0-3 */\n+#define NGBE_LSECRX_INVSAPKT(i) (0x017280 + (i) * 8) /* 0-3 */\n+#define NGBE_LSECTX_UTPKT 0x01D23C\n+#define NGBE_LSECTX_ENCPKT 0x01D240\n+#define NGBE_LSECTX_PROTPKT 0x01D244\n+#define NGBE_LSECTX_ENCOCT 0x01D248\n+#define NGBE_LSECTX_PROTOCT 0x01D24C\n+\n+/******************************************************************************\n+ * MAC Registers\n+ ******************************************************************************/\n+#define NGBE_MACRXCFG 0x011004\n+#define NGBE_MACRXCFG_ENA MS(0, 0x1)\n+#define NGBE_MACRXCFG_JUMBO MS(8, 0x1)\n+#define NGBE_MACRXCFG_LB MS(10, 0x1)\n+#define NGBE_MACCNTCTL 0x011800\n+#define NGBE_MACCNTCTL_RC MS(2, 0x1)\n+\n+#define NGBE_MACRXFLT 0x011008\n+#define NGBE_MACRXFLT_PROMISC MS(0, 0x1)\n+#define NGBE_MACRXFLT_CTL_MASK MS(6, 0x3)\n+#define NGBE_MACRXFLT_CTL_DROP LS(0, 6, 0x3)\n+#define NGBE_MACRXFLT_CTL_NOPS LS(1, 6, 0x3)\n+#define NGBE_MACRXFLT_CTL_NOFT LS(2, 6, 0x3)\n+#define NGBE_MACRXFLT_CTL_PASS LS(3, 6, 0x3)\n+#define NGBE_MACRXFLT_RXALL MS(31, 0x1)\n+\n+/******************************************************************************\n+ * Statistic Registers\n+ ******************************************************************************/\n+/* Ring Counter */\n+#define NGBE_QPRXPKT(rp) (0x001014 + 0x40 * (rp))\n+#define NGBE_QPRXOCTL(rp) (0x001018 + 0x40 * (rp))\n+#define NGBE_QPRXOCTH(rp) (0x00101C + 0x40 * (rp))\n+#define NGBE_QPRXMPKT(rp) (0x001020 + 0x40 * (rp))\n+#define NGBE_QPRXBPKT(rp) (0x001024 + 0x40 * (rp))\n+#define NGBE_QPTXPKT(rp) (0x003014 + 0x40 * (rp))\n+#define NGBE_QPTXOCTL(rp) (0x003018 + 0x40 * (rp))\n+#define NGBE_QPTXOCTH(rp) (0x00301C + 0x40 * (rp))\n+#define NGBE_QPTXMPKT(rp) (0x003020 + 0x40 * (rp))\n+#define NGBE_QPTXBPKT(rp) (0x003024 + 0x40 * (rp))\n+\n+/* TDMA Counter */\n+#define NGBE_DMATXDROP\t\t\t0x018300\n+#define NGBE_DMATXSECDROP\t\t0x018304\n+#define NGBE_DMATXPKT\t\t\t0x018308\n+#define NGBE_DMATXOCTL\t\t\t0x01830C\n+#define NGBE_DMATXOCTH\t\t\t0x018310\n+#define NGBE_DMATXMNG\t\t\t0x018314\n+\n+/* RDMA Counter */\n+#define NGBE_DMARXDROP\t\t\t0x012500\n+#define NGBE_DMARXPKT\t\t\t0x012504\n+#define NGBE_DMARXOCTL\t\t\t0x012508\n+#define NGBE_DMARXOCTH\t\t\t0x01250C\n+#define NGBE_DMARXMNG\t\t\t0x012510\n+\n+/* Packet Buffer Counter */\n+#define NGBE_PBRXMISS\t\t\t0x019040\n+#define NGBE_PBRXPKT\t\t\t0x019060\n+#define NGBE_PBRXREP\t\t\t0x019064\n+#define NGBE_PBRXDROP\t\t\t0x019068\n+#define NGBE_PBLBSTAT\t\t\t0x01906C\n+#define NGBE_PBLBSTAT_FREE(r)\t\tRS(r, 0, 0x3FF)\n+#define NGBE_PBLBSTAT_FULL\t\tMS(11, 0x1)\n+#define NGBE_PBRXWRPTR\t\t\t0x019180\n+#define NGBE_PBRXWRPTR_HEAD(r)\tRS(r, 0, 0xFFFF)\n+#define NGBE_PBRXWRPTR_TAIL(r)\tRS(r, 16, 0xFFFF)\n+#define NGBE_PBRXRDPTR\t\t\t0x0191A0\n+#define NGBE_PBRXRDPTR_HEAD(r)\tRS(r, 0, 0xFFFF)\n+#define NGBE_PBRXRDPTR_TAIL(r)\tRS(r, 16, 0xFFFF)\n+#define NGBE_PBRXDATA\t\t\t0x0191C0\n+#define NGBE_PBRXDATA_RDPTR(r)\tRS(r, 0, 0xFFFF)\n+#define NGBE_PBRXDATA_WRPTR(r)\tRS(r, 16, 0xFFFF)\n+#define NGBE_PBRX_USDSP\t\t\t0x0191E0\n+#define NGBE_RXPBPFCDMACL\t\t0x019210\n+#define NGBE_RXPBPFCDMACH\t\t0x019214\n+#define NGBE_PBTXLNKXOFF\t\t0x019218\n+#define NGBE_PBTXLNKXON\t\t\t0x01921C\n+\n+#define NGBE_PBTXSTAT\t\t\t0x01C004\n+#define NGBE_PBTXSTAT_EMPT(tc, r)\t((1 << (tc) & (r)) >> (tc))\n+\n+#define NGBE_PBRXLNKXOFF\t\t0x011988\n+#define NGBE_PBRXLNKXON\t\t\t0x011E0C\n+\n+#define NGBE_PBLPBK\t\t\t0x01CF08\n+\n+/* Ether Flow Counter */\n+#define NGBE_LANPKTDROP\t\t\t0x0151C0\n+#define NGBE_MNGPKTDROP\t\t\t0x0151C4\n+\n+#define NGBE_PSRLANPKTCNT\t\t0x0151B8\n+#define NGBE_PSRMNGPKTCNT\t\t0x0151BC\n+\n+/* MAC Counter */\n+#define NGBE_MACRXERRCRCL 0x011928\n+#define NGBE_MACRXERRCRCH 0x01192C\n+#define NGBE_MACRXERRLENL 0x011978\n+#define NGBE_MACRXERRLENH 0x01197C\n+#define NGBE_MACRX1TO64L 0x001940\n+#define NGBE_MACRX1TO64H 0x001944\n+#define NGBE_MACRX65TO127L 0x001948\n+#define NGBE_MACRX65TO127H 0x00194C\n+#define NGBE_MACRX128TO255L 0x001950\n+#define NGBE_MACRX128TO255H 0x001954\n+#define NGBE_MACRX256TO511L 0x001958\n+#define NGBE_MACRX256TO511H 0x00195C\n+#define NGBE_MACRX512TO1023L 0x001960\n+#define NGBE_MACRX512TO1023H 0x001964\n+#define NGBE_MACRX1024TOMAXL 0x001968\n+#define NGBE_MACRX1024TOMAXH 0x00196C\n+#define NGBE_MACTX1TO64L 0x001834\n+#define NGBE_MACTX1TO64H 0x001838\n+#define NGBE_MACTX65TO127L 0x00183C\n+#define NGBE_MACTX65TO127H 0x001840\n+#define NGBE_MACTX128TO255L 0x001844\n+#define NGBE_MACTX128TO255H 0x001848\n+#define NGBE_MACTX256TO511L 0x00184C\n+#define NGBE_MACTX256TO511H 0x001850\n+#define NGBE_MACTX512TO1023L 0x001854\n+#define NGBE_MACTX512TO1023H 0x001858\n+#define NGBE_MACTX1024TOMAXL 0x00185C\n+#define NGBE_MACTX1024TOMAXH 0x001860\n+\n+#define NGBE_MACRXUNDERSIZE 0x011938\n+#define NGBE_MACRXOVERSIZE 0x01193C\n+#define NGBE_MACRXJABBER 0x011934\n+\n+#define NGBE_MACRXPKTL 0x011900\n+#define NGBE_MACRXPKTH 0x011904\n+#define NGBE_MACTXPKTL 0x01181C\n+#define NGBE_MACTXPKTH 0x011820\n+#define NGBE_MACRXGBOCTL 0x011908\n+#define NGBE_MACRXGBOCTH 0x01190C\n+#define NGBE_MACTXGBOCTL 0x011814\n+#define NGBE_MACTXGBOCTH 0x011818\n+\n+#define NGBE_MACRXOCTL 0x011918\n+#define NGBE_MACRXOCTH 0x01191C\n+#define NGBE_MACRXMPKTL 0x011920\n+#define NGBE_MACRXMPKTH 0x011924\n+#define NGBE_MACTXOCTL 0x011824\n+#define NGBE_MACTXOCTH 0x011828\n+#define NGBE_MACTXMPKTL 0x01182C\n+#define NGBE_MACTXMPKTH 0x011830\n+\n+/* Management Counter */\n+#define NGBE_MNGOUT\t\t0x01CF00\n+#define NGBE_MNGIN\t\t0x01CF04\n+#define NGBE_MNGDROP\t\t0x01CF0C\n+\n+/* MAC SEC Counter */\n+#define NGBE_LSECRXUNTAG\t0x017240\n+#define NGBE_LSECRXDECOCT\t0x017244\n+#define NGBE_LSECRXVLDOCT\t0x017248\n+#define NGBE_LSECRXBADTAG\t0x01724C\n+#define NGBE_LSECRXNOSCI\t0x017250\n+#define NGBE_LSECRXUKSCI\t0x017254\n+#define NGBE_LSECRXUNCHK\t0x017258\n+#define NGBE_LSECRXDLY\t\t0x01725C\n+#define NGBE_LSECRXLATE\t\t0x017260\n+#define NGBE_LSECRXGOOD\t\t0x017264\n+#define NGBE_LSECRXBAD\t\t0x01726C\n+#define NGBE_LSECRXUK\t\t0x017274\n+#define NGBE_LSECRXBADSA\t0x01727C\n+#define NGBE_LSECRXUKSA\t\t0x017280\n+#define NGBE_LSECTXUNTAG\t0x01D23C\n+#define NGBE_LSECTXENC\t\t0x01D240\n+#define NGBE_LSECTXPTT\t\t0x01D244\n+#define NGBE_LSECTXENCOCT\t0x01D248\n+#define NGBE_LSECTXPTTOCT\t0x01D24C\n+\n+/* Management Counter */\n+#define NGBE_MNGOS2BMC 0x01E094\n+#define NGBE_MNGBMC2OS 0x01E090\n+\n+/******************************************************************************\n+ * PF(Physical Function) Registers\n+ ******************************************************************************/\n+/* Interrupt */\n+#define NGBE_ICRMISC\t\t0x000100\n+#define NGBE_ICRMISC_MASK\tMS(8, 0xFFFFFF)\n+#define NGBE_ICRMISC_RST\tMS(10, 0x1) /* device reset event */\n+#define NGBE_ICRMISC_TS\tMS(11, 0x1) /* time sync */\n+#define NGBE_ICRMISC_STALL\tMS(12, 0x1) /* trans or recv path is stalled */\n+#define NGBE_ICRMISC_LNKSEC\tMS(13, 0x1) /* Tx LinkSec require key exchange*/\n+#define NGBE_ICRMISC_ERRBUF\tMS(14, 0x1) /* Packet Buffer Overrun */\n+#define NGBE_ICRMISC_ERRMAC\tMS(17, 0x1) /* err reported by MAC */\n+#define NGBE_ICRMISC_PHY\tMS(18, 0x1) /* interrupt reported by eth phy */\n+#define NGBE_ICRMISC_ERRIG\tMS(20, 0x1) /* integrity error */\n+#define NGBE_ICRMISC_SPI\tMS(21, 0x1) /* SPI interface */\n+#define NGBE_ICRMISC_VFMBX\tMS(23, 0x1) /* VF-PF message box */\n+#define NGBE_ICRMISC_GPIO\tMS(26, 0x1) /* GPIO interrupt */\n+#define NGBE_ICRMISC_ERRPCI\tMS(27, 0x1) /* pcie request error */\n+#define NGBE_ICRMISC_HEAT\tMS(28, 0x1) /* overheat detection */\n+#define NGBE_ICRMISC_PROBE\tMS(29, 0x1) /* probe match */\n+#define NGBE_ICRMISC_MNGMBX\tMS(30, 0x1) /* mng mailbox */\n+#define NGBE_ICRMISC_TIMER\tMS(31, 0x1) /* tcp timer */\n+#define NGBE_ICRMISC_DEFAULT\t( \\\n+\t\t\tNGBE_ICRMISC_RST | \\\n+\t\t\tNGBE_ICRMISC_ERRMAC | \\\n+\t\t\tNGBE_ICRMISC_PHY | \\\n+\t\t\tNGBE_ICRMISC_ERRIG | \\\n+\t\t\tNGBE_ICRMISC_GPIO | \\\n+\t\t\tNGBE_ICRMISC_VFMBX | \\\n+\t\t\tNGBE_ICRMISC_MNGMBX | \\\n+\t\t\tNGBE_ICRMISC_STALL | \\\n+\t\t\tNGBE_ICRMISC_TIMER)\n+#define NGBE_ICSMISC\t\t\t0x000104\n+#define NGBE_IENMISC\t\t\t0x000108\n+#define NGBE_IVARMISC\t\t\t0x0004FC\n+#define NGBE_IVARMISC_VEC(v)\t\tLS(v, 0, 0x7)\n+#define NGBE_IVARMISC_VLD\t\tMS(7, 0x1)\n+#define NGBE_ICR(i)\t\t\t(0x000120 + (i) * 4) /*0*/\n+#define NGBE_ICR_MASK\t\t\tMS(0, 0x1FF)\n+#define NGBE_ICS(i)\t\t\t(0x000130 + (i) * 4) /*0*/\n+#define NGBE_ICS_MASK\t\t\tNGBE_ICR_MASK\n+#define NGBE_IMS(i)\t\t\t(0x000140 + (i) * 4) /*0*/\n+#define NGBE_IMS_MASK\t\t\tNGBE_ICR_MASK\n+#define NGBE_IMC(i)\t\t\t(0x000150 + (i) * 4) /*0*/\n+#define NGBE_IMC_MASK\t\t\tNGBE_ICR_MASK\n+#define NGBE_IVAR(i)\t\t\t(0x000500 + (i) * 4) /*0-3*/\n+#define NGBE_IVAR_VEC(v)\t\tLS(v, 0, 0x7)\n+#define NGBE_IVAR_VLD\t\t\tMS(7, 0x1)\n+#define NGBE_TCPTMR\t\t\t0x000170\n+#define NGBE_ITRSEL\t\t\t0x000180\n+\n+/* P2V Mailbox */\n+#define NGBE_MBMEM(i)\t\t(0x005000 + 0x40 * (i)) /*0-7*/\n+#define NGBE_MBCTL(i)\t\t(0x000600 + 4 * (i)) /*0-7*/\n+#define NGBE_MBCTL_STS\tMS(0, 0x1) /* Initiate message send to VF */\n+#define NGBE_MBCTL_ACK\tMS(1, 0x1) /* Ack message recv'd from VF */\n+#define NGBE_MBCTL_VFU\tMS(2, 0x1) /* VF owns the mailbox buffer */\n+#define NGBE_MBCTL_PFU\tMS(3, 0x1) /* PF owns the mailbox buffer */\n+#define NGBE_MBCTL_RVFU\tMS(4, 0x1) /* Reset VFU - used when VF stuck */\n+#define NGBE_MBVFICR\t\t\t0x000480\n+#define NGBE_MBVFICR_INDEX(vf)\t((vf) >> 4)\n+#define NGBE_MBVFICR_VFREQ_MASK\t(0x0000FFFF) /* bits for VF messages */\n+#define NGBE_MBVFICR_VFREQ_VF1\t(0x00000001) /* bit for VF 1 message */\n+#define NGBE_MBVFICR_VFACK_MASK\t(0xFFFF0000) /* bits for VF acks */\n+#define NGBE_MBVFICR_VFACK_VF1\t(0x00010000) /* bit for VF 1 ack */\n+#define NGBE_FLRVFP\t\t\t0x000490\n+#define NGBE_FLRVFE\t\t\t0x0004A0\n+#define NGBE_FLRVFEC\t\t\t0x0004A8\n+\n+/******************************************************************************\n+ * VF(Virtual Function) Registers\n+ ******************************************************************************/\n+#define NGBE_VFPBWRAP\t\t\t0x000000\n+#define NGBE_VFPBWRAP_WRAP\t\tMS(0, 0x7)\n+#define NGBE_VFPBWRAP_EMPT\t\tMS(3, 0x1)\n+#define NGBE_VFSTATUS\t\t\t0x000004\n+#define NGBE_VFSTATUS_UP\t\tMS(0, 0x1)\n+#define NGBE_VFSTATUS_BW_MASK\t\tMS(1, 0x7)\n+#define NGBE_VFSTATUS_BW_1G\t\tLS(0x1, 1, 0x7)\n+#define NGBE_VFSTATUS_BW_100M\tLS(0x2, 1, 0x7)\n+#define NGBE_VFSTATUS_BW_10M\tLS(0x4, 1, 0x7)\n+#define NGBE_VFSTATUS_BUSY\t\tMS(4, 0x1)\n+#define NGBE_VFSTATUS_LANID\t\tMS(8, 0x3)\n+#define NGBE_VFRST\t\t\t0x000008\n+#define NGBE_VFRST_SET\t\tMS(0, 0x1)\n+#define NGBE_VFMSIXECC\t\t\t0x00000C\n+#define NGBE_VFPLCFG\t\t\t0x000078\n+#define NGBE_VFPLCFG_RSV\t\tMS(0, 0x1)\n+#define NGBE_VFPLCFG_PSR(v)\t\tLS(v, 1, 0x1F)\n+#define NGBE_VFPLCFG_PSRL4HDR\t(0x1)\n+#define NGBE_VFPLCFG_PSRL3HDR\t(0x2)\n+#define NGBE_VFPLCFG_PSRL2HDR\t(0x4)\n+#define NGBE_VFPLCFG_PSRTUNHDR\t(0x8)\n+#define NGBE_VFPLCFG_PSRTUNMAC\t(0x10)\n+#define NGBE_VFICR\t\t\t0x000100\n+#define NGBE_VFICR_MASK\t\tLS(3, 0, 0x3)\n+#define NGBE_VFICR_MBX\t\tMS(1, 0x1)\n+#define NGBE_VFICR_DONE1\t\tMS(0, 0x1)\n+#define NGBE_VFICS\t\t\t0x000104\n+#define NGBE_VFICS_MASK\t\tNGBE_VFICR_MASK\n+#define NGBE_VFIMS\t\t\t0x000108\n+#define NGBE_VFIMS_MASK\t\tNGBE_VFICR_MASK\n+#define NGBE_VFIMC\t\t\t0x00010C\n+#define NGBE_VFIMC_MASK\t\tNGBE_VFICR_MASK\n+#define NGBE_VFGPIE\t\t\t0x000118\n+#define NGBE_VFIVAR(i)\t\t\t(0x000240 + 4 * (i)) /*0-1*/\n+#define NGBE_VFIVARMISC\t\t\t0x000260\n+#define NGBE_VFIVAR_ALLOC(v)\t\tLS(v, 0, 0x1)\n+#define NGBE_VFIVAR_VLD\t\tMS(7, 0x1)\n+\n+#define NGBE_VFMBCTL\t\t\t0x000600\n+#define NGBE_VFMBCTL_REQ MS(0, 0x1) /* Request for PF Ready bit */\n+#define NGBE_VFMBCTL_ACK MS(1, 0x1) /* Ack PF message received */\n+#define NGBE_VFMBCTL_VFU MS(2, 0x1) /* VF owns the mailbox buffer */\n+#define NGBE_VFMBCTL_PFU MS(3, 0x1) /* PF owns the mailbox buffer */\n+#define NGBE_VFMBCTL_PFSTS MS(4, 0x1) /* PF wrote a message in the MB */\n+#define NGBE_VFMBCTL_PFACK MS(5, 0x1) /* PF ack the previous VF msg */\n+#define NGBE_VFMBCTL_RSTI MS(6, 0x1) /* PF has reset indication */\n+#define NGBE_VFMBCTL_RSTD MS(7, 0x1) /* PF has indicated reset done */\n+#define NGBE_VFMBCTL_R2C_BITS\t\t(NGBE_VFMBCTL_RSTD | \\\n+\t\t\t\t\tNGBE_VFMBCTL_PFSTS | \\\n+\t\t\t\t\tNGBE_VFMBCTL_PFACK)\n+#define NGBE_VFMBX\t\t\t0x000C00 /*0-15*/\n+#define NGBE_VFTPHCTL(i)\t\t0x000D00\n+\n+/******************************************************************************\n+ * PF&VF TxRx Interface\n+ ******************************************************************************/\n+#define RNGLEN(v) ROUND_OVER(v, 13, 7)\n+#define HDRLEN(v) ROUND_OVER(v, 10, 6)\n+#define PKTLEN(v) ROUND_OVER(v, 14, 10)\n+#define INTTHR(v) ROUND_OVER(v, 4, 0)\n+\n+#define\tNGBE_RING_DESC_ALIGN\t128\n+#define\tNGBE_RING_DESC_MIN\t128\n+#define\tNGBE_RING_DESC_MAX\t8192\n+#define NGBE_RXD_ALIGN\t\tNGBE_RING_DESC_ALIGN\n+#define NGBE_TXD_ALIGN\t\tNGBE_RING_DESC_ALIGN\n+\n+/* receive ring */\n+#define NGBE_RXBAL(rp) (0x001000 + 0x40 * (rp))\n+#define NGBE_RXBAH(rp) (0x001004 + 0x40 * (rp))\n+#define NGBE_RXRP(rp) (0x00100C + 0x40 * (rp))\n+#define NGBE_RXWP(rp) (0x001008 + 0x40 * (rp))\n+#define NGBE_RXCFG(rp) (0x001010 + 0x40 * (rp))\n+#define NGBE_RXCFG_ENA MS(0, 0x1)\n+#define NGBE_RXCFG_RNGLEN(v) LS(RNGLEN(v), 1, 0x3F)\n+#define NGBE_RXCFG_PKTLEN(v) LS(PKTLEN(v), 8, 0xF)\n+#define NGBE_RXCFG_PKTLEN_MASK MS(8, 0xF)\n+#define NGBE_RXCFG_HDRLEN(v) LS(HDRLEN(v), 12, 0xF)\n+#define NGBE_RXCFG_HDRLEN_MASK MS(12, 0xF)\n+#define NGBE_RXCFG_WTHRESH(v) LS(v, 16, 0x7)\n+#define NGBE_RXCFG_ETAG MS(22, 0x1)\n+#define NGBE_RXCFG_SPLIT MS(26, 0x1)\n+#define NGBE_RXCFG_CNTAG MS(28, 0x1)\n+#define NGBE_RXCFG_DROP MS(30, 0x1)\n+#define NGBE_RXCFG_VLAN MS(31, 0x1)\n+\n+/* transmit ring */\n+#define NGBE_TXBAL(rp) (0x003000 + 0x40 * (rp)) /*0-7*/\n+#define NGBE_TXBAH(rp) (0x003004 + 0x40 * (rp))\n+#define NGBE_TXWP(rp) (0x003008 + 0x40 * (rp))\n+#define NGBE_TXRP(rp) (0x00300C + 0x40 * (rp))\n+#define NGBE_TXCFG(rp) (0x003010 + 0x40 * (rp))\n+#define NGBE_TXCFG_ENA MS(0, 0x1)\n+#define NGBE_TXCFG_BUFLEN_MASK MS(1, 0x3F)\n+#define NGBE_TXCFG_BUFLEN(v) LS(RNGLEN(v), 1, 0x3F)\n+#define NGBE_TXCFG_HTHRESH_MASK MS(8, 0xF)\n+#define NGBE_TXCFG_HTHRESH(v) LS(v, 8, 0xF)\n+#define NGBE_TXCFG_WTHRESH_MASK MS(16, 0x7F)\n+#define NGBE_TXCFG_WTHRESH(v) LS(v, 16, 0x7F)\n+#define NGBE_TXCFG_FLUSH MS(26, 0x1)\n+\n+/* interrupt registers */\n+#define NGBE_BMEPEND\t\t\t0x000168\n+#define NGBE_BMEPEND_ST\t\tMS(0, 0x1)\n+#define NGBE_ITRI\t\t\t0x000180\n+#define NGBE_ITR(i)\t\t\t(0x000200 + 4 * (i))\n+#define NGBE_ITR_IVAL_MASK\t\tMS(2, 0x1FFF) /* 1ns/10G, 10ns/REST */\n+#define NGBE_ITR_IVAL(v)\t\tLS(v, 2, 0x1FFF) /*1ns/10G, 10ns/REST*/\n+#define NGBE_ITR_IVAL_1G(us)\tNGBE_ITR_IVAL((us) / 2)\n+#define NGBE_ITR_IVAL_10G(us)\tNGBE_ITR_IVAL((us) / 20)\n+#define NGBE_ITR_LLIEA\t\tMS(15, 0x1)\n+#define NGBE_ITR_LLICREDIT(v)\t\tLS(v, 16, 0x1F)\n+#define NGBE_ITR_CNT(v)\t\tLS(v, 21, 0x3FF)\n+#define NGBE_ITR_WRDSA\t\tMS(31, 0x1)\n+#define NGBE_GPIE\t\t\t0x000118\n+#define NGBE_GPIE_MSIX\t\tMS(0, 0x1)\n+#define NGBE_GPIE_LLIEA\t\tMS(1, 0x1)\n+#define NGBE_GPIE_LLIVAL(v)\t\tLS(v, 3, 0x1F)\n+#define NGBE_GPIE_LLIVAL_H(v)\t\tLS(v, 16, 0x7FF)\n+\n+/******************************************************************************\n+ * Debug Registers\n+ ******************************************************************************/\n+/**\n+ * Probe\n+ **/\n+#define NGBE_PRBCTL 0x010200\n+#define NGBE_PRBSTA 0x010204\n+#define NGBE_PRBDAT 0x010220\n+#define NGBE_PRBCNT 0x010228\n+\n+#define NGBE_PRBPCI 0x01F010\n+#define NGBE_PRBPSR 0x015010\n+#define NGBE_PRBRDB 0x019010\n+#define NGBE_PRBTDB 0x01C010\n+#define NGBE_PRBRSEC 0x017010\n+#define NGBE_PRBTSEC 0x01D010\n+#define NGBE_PRBMNG 0x01E010\n+#define NGBE_PRBRMAC 0x011014\n+#define NGBE_PRBTMAC 0x011010\n+#define NGBE_PRBREMAC 0x011E04\n+#define NGBE_PRBTEMAC 0x011E00\n+\n+/**\n+ * ECC\n+ **/\n+#define NGBE_ECCRXPBCTL 0x019014\n+#define NGBE_ECCRXPBINJ 0x019018\n+#define NGBE_ECCRXPB 0x01901C\n+#define NGBE_ECCTXPBCTL 0x01C014\n+#define NGBE_ECCTXPBINJ 0x01C018\n+#define NGBE_ECCTXPB 0x01C01C\n+\n+#define NGBE_ECCRXETHCTL 0x015014\n+#define NGBE_ECCRXETHINJ 0x015018\n+#define NGBE_ECCRXETH 0x01401C\n+\n+#define NGBE_ECCRXSECCTL 0x017014\n+#define NGBE_ECCRXSECINJ 0x017018\n+#define NGBE_ECCRXSEC 0x01701C\n+#define NGBE_ECCTXSECCTL 0x01D014\n+#define NGBE_ECCTXSECINJ 0x01D018\n+#define NGBE_ECCTXSEC 0x01D01C\n+\n+#define NGBE_P2VMBX_SIZE (16) /* 16*4B */\n+#define NGBE_P2MMBX_SIZE (64) /* 64*4B */\n+\n+/**************** Global Registers ****************************/\n+#define NGBE_POOLETHCTL(pl) (0x015600 + (pl) * 4)\n+#define NGBE_POOLETHCTL_LBDIA MS(0, 0x1)\n+#define NGBE_POOLETHCTL_LLBDIA MS(1, 0x1)\n+#define NGBE_POOLETHCTL_LLB MS(2, 0x1)\n+#define NGBE_POOLETHCTL_UCP MS(4, 0x1)\n+#define NGBE_POOLETHCTL_ETP MS(5, 0x1)\n+#define NGBE_POOLETHCTL_VLA MS(6, 0x1)\n+#define NGBE_POOLETHCTL_VLP MS(7, 0x1)\n+#define NGBE_POOLETHCTL_UTA MS(8, 0x1)\n+#define NGBE_POOLETHCTL_MCHA MS(9, 0x1)\n+#define NGBE_POOLETHCTL_UCHA MS(10, 0x1)\n+#define NGBE_POOLETHCTL_BCA MS(11, 0x1)\n+#define NGBE_POOLETHCTL_MCP MS(12, 0x1)\n+#define NGBE_POOLDROPSWBK(i) (0x0151C8 + (i) * 4) /*0-1*/\n+\n+/**************************** Receive DMA registers **************************/\n+\n+#define NGBE_RPUP2TC 0x019008\n+#define NGBE_RPUP2TC_UP_SHIFT 3\n+#define NGBE_RPUP2TC_UP_MASK 0x7\n+\n+/* mac switcher */\n+#define NGBE_ETHADDRL 0x016200\n+#define NGBE_ETHADDRL_AD0(v) LS(v, 0, 0xFF)\n+#define NGBE_ETHADDRL_AD1(v) LS(v, 8, 0xFF)\n+#define NGBE_ETHADDRL_AD2(v) LS(v, 16, 0xFF)\n+#define NGBE_ETHADDRL_AD3(v) LS(v, 24, 0xFF)\n+#define NGBE_ETHADDRL_ETAG(r) RS(r, 0, 0x3FFF)\n+#define NGBE_ETHADDRH 0x016204\n+#define NGBE_ETHADDRH_AD4(v) LS(v, 0, 0xFF)\n+#define NGBE_ETHADDRH_AD5(v) LS(v, 8, 0xFF)\n+#define NGBE_ETHADDRH_AD_MASK MS(0, 0xFFFF)\n+#define NGBE_ETHADDRH_ETAG MS(30, 0x1)\n+#define NGBE_ETHADDRH_VLD MS(31, 0x1)\n+#define NGBE_ETHADDRASS 0x016208\n+#define NGBE_ETHADDRIDX 0x016210\n+\n+/* Outmost Barrier Filters */\n+#define NGBE_MCADDRTBL(i) (0x015200 + (i) * 4) /*0-127*/\n+#define NGBE_UCADDRTBL(i) (0x015400 + (i) * 4) /*0-127*/\n+#define NGBE_VLANTBL(i) (0x016000 + (i) * 4) /*0-127*/\n+\n+#define NGBE_MNGFLEXSEL 0x1582C\n+#define NGBE_MNGFLEXDWL(i) (0x15A00 + ((i) * 16))\n+#define NGBE_MNGFLEXDWH(i) (0x15A04 + ((i) * 16))\n+#define NGBE_MNGFLEXMSK(i) (0x15A08 + ((i) * 16))\n+\n+#define NGBE_LANFLEXSEL 0x15B8C\n+#define NGBE_LANFLEXDWL(i) (0x15C00 + ((i) * 16))\n+#define NGBE_LANFLEXDWH(i) (0x15C04 + ((i) * 16))\n+#define NGBE_LANFLEXMSK(i) (0x15C08 + ((i) * 16))\n+#define NGBE_LANFLEXCTL 0x15CFC\n+\n+/* ipsec */\n+#define NGBE_IPSRXIDX 0x017100\n+#define NGBE_IPSRXIDX_ENA MS(0, 0x1)\n+#define NGBE_IPSRXIDX_TB_MASK MS(1, 0x3)\n+#define NGBE_IPSRXIDX_TB_IP LS(1, 1, 0x3)\n+#define NGBE_IPSRXIDX_TB_SPI LS(2, 1, 0x3)\n+#define NGBE_IPSRXIDX_TB_KEY LS(3, 1, 0x3)\n+#define NGBE_IPSRXIDX_TBIDX(v) LS(v, 3, 0xF)\n+#define NGBE_IPSRXIDX_READ MS(30, 0x1)\n+#define NGBE_IPSRXIDX_WRITE MS(31, 0x1)\n+#define NGBE_IPSRXADDR(i) (0x017104 + (i) * 4)\n+\n+#define NGBE_IPSRXSPI 0x017114\n+#define NGBE_IPSRXADDRIDX 0x017118\n+#define NGBE_IPSRXKEY(i) (0x01711C + (i) * 4)\n+#define NGBE_IPSRXSALT 0x01712C\n+#define NGBE_IPSRXMODE 0x017130\n+#define NGBE_IPSRXMODE_IPV6 0x00000010\n+#define NGBE_IPSRXMODE_DEC 0x00000008\n+#define NGBE_IPSRXMODE_ESP 0x00000004\n+#define NGBE_IPSRXMODE_AH 0x00000002\n+#define NGBE_IPSRXMODE_VLD 0x00000001\n+#define NGBE_IPSTXIDX 0x01D100\n+#define NGBE_IPSTXIDX_ENA MS(0, 0x1)\n+#define NGBE_IPSTXIDX_SAIDX(v) LS(v, 3, 0x3FF)\n+#define NGBE_IPSTXIDX_READ MS(30, 0x1)\n+#define NGBE_IPSTXIDX_WRITE MS(31, 0x1)\n+#define NGBE_IPSTXSALT 0x01D104\n+#define NGBE_IPSTXKEY(i) (0x01D108 + (i) * 4)\n+\n+#define NGBE_MACTXCFG 0x011000\n+#define NGBE_MACTXCFG_TE MS(0, 0x1)\n+#define NGBE_MACTXCFG_SPEED_MASK MS(29, 0x3)\n+#define NGBE_MACTXCFG_SPEED(v) LS(v, 29, 0x3)\n+#define NGBE_MACTXCFG_SPEED_10G LS(0, 29, 0x3)\n+#define NGBE_MACTXCFG_SPEED_1G LS(3, 29, 0x3)\n+\n+#define NGBE_ISBADDRL 0x000160\n+#define NGBE_ISBADDRH 0x000164\n+\n+#define NGBE_ARBPOOLIDX 0x01820C\n+#define NGBE_ARBTXRATE 0x018404\n+#define NGBE_ARBTXRATE_MIN(v) LS(v, 0, 0x3FFF)\n+#define NGBE_ARBTXRATE_MAX(v) LS(v, 16, 0x3FFF)\n+\n+/* qos */\n+#define NGBE_ARBTXCTL 0x018200\n+#define NGBE_ARBTXCTL_RRM MS(1, 0x1)\n+#define NGBE_ARBTXCTL_WSP MS(2, 0x1)\n+#define NGBE_ARBTXCTL_DIA MS(6, 0x1)\n+#define NGBE_ARBTXMMW 0x018208\n+\n+/* Management */\n+#define NGBE_MNGFWSYNC 0x01E000\n+#define NGBE_MNGFWSYNC_REQ MS(0, 0x1)\n+#define NGBE_MNGSWSYNC 0x01E004\n+#define NGBE_MNGSWSYNC_REQ MS(0, 0x1)\n+#define NGBE_SWSEM 0x01002C\n+#define NGBE_SWSEM_PF MS(0, 0x1)\n+#define NGBE_MNGSEM 0x01E008\n+#define NGBE_MNGSEM_SW(v) LS(v, 0, 0xFFFF)\n+#define NGBE_MNGSEM_SWPHY MS(0, 0x1)\n+#define NGBE_MNGSEM_SWMBX MS(2, 0x1)\n+#define NGBE_MNGSEM_SWFLASH MS(3, 0x1)\n+#define NGBE_MNGSEM_FW(v) LS(v, 16, 0xFFFF)\n+#define NGBE_MNGSEM_FWPHY MS(16, 0x1)\n+#define NGBE_MNGSEM_FWMBX MS(18, 0x1)\n+#define NGBE_MNGSEM_FWFLASH MS(19, 0x1)\n+#define NGBE_MNGMBXCTL 0x01E044\n+#define NGBE_MNGMBXCTL_SWRDY MS(0, 0x1)\n+#define NGBE_MNGMBXCTL_SWACK MS(1, 0x1)\n+#define NGBE_MNGMBXCTL_FWRDY MS(2, 0x1)\n+#define NGBE_MNGMBXCTL_FWACK MS(3, 0x1)\n+#define NGBE_MNGMBX 0x01E100\n+\n+/**\n+ * MDIO(PHY)\n+ **/\n+#define NGBE_MDIOSCA 0x011200\n+#define NGBE_MDIOSCA_REG(v) LS(v, 0, 0xFFFF)\n+#define NGBE_MDIOSCA_PORT(v) LS(v, 16, 0x1F)\n+#define NGBE_MDIOSCA_DEV(v) LS(v, 21, 0x1F)\n+#define NGBE_MDIOSCD 0x011204\n+#define NGBE_MDIOSCD_DAT_R(r) RS(r, 0, 0xFFFF)\n+#define NGBE_MDIOSCD_DAT(v) LS(v, 0, 0xFFFF)\n+#define NGBE_MDIOSCD_CMD_PREAD LS(2, 16, 0x3)\n+#define NGBE_MDIOSCD_CMD_WRITE LS(1, 16, 0x3)\n+#define NGBE_MDIOSCD_CMD_READ LS(3, 16, 0x3)\n+#define NGBE_MDIOSCD_SADDR MS(18, 0x1)\n+#define NGBE_MDIOSCD_CLOCK(v) LS(v, 19, 0x7)\n+#define NGBE_MDIOSCD_BUSY MS(22, 0x1)\n+\n+#define NGBE_MDIOMODE\t\t\t0x011220\n+#define NGBE_MDIOMODE_MASK\t\tMS(0, 0xF)\n+#define NGBE_MDIOMODE_PRT3CL22\tMS(3, 0x1)\n+#define NGBE_MDIOMODE_PRT2CL22\tMS(2, 0x1)\n+#define NGBE_MDIOMODE_PRT1CL22\tMS(1, 0x1)\n+#define NGBE_MDIOMODE_PRT0CL22\tMS(0, 0x1)\n+\n+#define NVM_OROM_OFFSET\t\t0x17\n+#define NVM_OROM_BLK_LOW\t0x83\n+#define NVM_OROM_BLK_HI\t\t0x84\n+#define NVM_OROM_PATCH_MASK\t0xFF\n+#define NVM_OROM_SHIFT\t\t8\n+#define NVM_VER_MASK\t\t0x00FF /* version mask */\n+#define NVM_VER_SHIFT\t\t8 /* version bit shift */\n+#define NVM_OEM_PROD_VER_PTR\t0x1B /* OEM Product version block pointer */\n+#define NVM_OEM_PROD_VER_CAP_OFF 0x1 /* OEM Product version format offset */\n+#define NVM_OEM_PROD_VER_OFF_L\t0x2 /* OEM Product version offset low */\n+#define NVM_OEM_PROD_VER_OFF_H\t0x3 /* OEM Product version offset high */\n+#define NVM_OEM_PROD_VER_CAP_MASK 0xF /* OEM Product version cap mask */\n+#define NVM_OEM_PROD_VER_MOD_LEN 0x3 /* OEM Product version module length */\n+#define NVM_ETK_OFF_LOW\t\t0x2D /* version low order word */\n+#define NVM_ETK_OFF_HI\t\t0x2E /* version high order word */\n+#define NVM_ETK_SHIFT\t\t16 /* high version word shift */\n+#define NVM_VER_INVALID\t\t0xFFFF\n+#define NVM_ETK_VALID\t\t0x8000\n+#define NVM_INVALID_PTR\t\t0xFFFF\n+#define NVM_VER_SIZE\t\t32 /* version string size */\n+\n+#define NGBE_REG_RSSTBL NGBE_RSSTBL(0)\n+#define NGBE_REG_RSSKEY NGBE_RSSKEY(0)\n+\n+/*\n+ * read non-rc counters\n+ */\n+#define NGBE_UPDCNT32(reg, last, cur) \\\n+do { \\\n+\tuint32_t latest = rd32(hw, reg); \\\n+\tif (hw->offset_loaded || hw->rx_loaded)\t\t\t \\\n+\t\tlast = 0;\t\t\t\t\t \\\n+\tcur += (latest - last) & UINT_MAX; \\\n+\tlast = latest; \\\n+} while (0)\n+\n+#define NGBE_UPDCNT36(regl, last, cur) \\\n+do { \\\n+\tuint64_t new_lsb = rd32(hw, regl); \\\n+\tuint64_t new_msb = rd32(hw, regl + 4); \\\n+\tuint64_t latest = ((new_msb << 32) | new_lsb); \\\n+\tif (hw->offset_loaded || hw->rx_loaded)\t\t\t \\\n+\t\tlast = 0;\t\t\t\t\t \\\n+\tcur += (0x1000000000LL + latest - last) & 0xFFFFFFFFFLL; \\\n+\tlast = latest; \\\n+} while (0)\n+\n+/**\n+ * register operations\n+ **/\n+#define NGBE_REG_READ32(addr) rte_read32(addr)\n+#define NGBE_REG_READ32_RELAXED(addr) rte_read32_relaxed(addr)\n+#define NGBE_REG_WRITE32(addr, val) rte_write32(val, addr)\n+#define NGBE_REG_WRITE32_RELAXED(addr, val) rte_write32_relaxed(val, addr)\n+\n+#define NGBE_DEAD_READ_REG 0xdeadbeefU\n+#define NGBE_FAILED_READ_REG 0xffffffffU\n+#define NGBE_REG_ADDR(hw, reg) \\\n+\t((volatile u32 *)((char *)(hw)->hw_addr + (reg)))\n+\n+static inline u32\n+ngbe_get32(volatile u32 *addr)\n+{\n+\tu32 val = NGBE_REG_READ32(addr);\n+\treturn rte_le_to_cpu_32(val);\n+}\n+\n+static inline void\n+ngbe_set32(volatile u32 *addr, u32 val)\n+{\n+\tval = rte_cpu_to_le_32(val);\n+\tNGBE_REG_WRITE32(addr, val);\n+}\n+\n+static inline u32\n+ngbe_get32_masked(volatile u32 *addr, u32 mask)\n+{\n+\tu32 val = ngbe_get32(addr);\n+\tval &= mask;\n+\treturn val;\n+}\n+\n+static inline void\n+ngbe_set32_masked(volatile u32 *addr, u32 mask, u32 field)\n+{\n+\tu32 val = ngbe_get32(addr);\n+\tval = ((val & ~mask) | (field & mask));\n+\tngbe_set32(addr, val);\n+}\n+\n+static inline u32\n+ngbe_get32_relaxed(volatile u32 *addr)\n+{\n+\tu32 val = NGBE_REG_READ32_RELAXED(addr);\n+\treturn rte_le_to_cpu_32(val);\n+}\n+\n+static inline void\n+ngbe_set32_relaxed(volatile u32 *addr, u32 val)\n+{\n+\tval = rte_cpu_to_le_32(val);\n+\tNGBE_REG_WRITE32_RELAXED(addr, val);\n+}\n+\n+static inline u32\n+rd32(struct ngbe_hw *hw, u32 reg)\n+{\n+\tif (reg == NGBE_REG_DUMMY)\n+\t\treturn 0;\n+\treturn ngbe_get32(NGBE_REG_ADDR(hw, reg));\n+}\n+\n+static inline void\n+wr32(struct ngbe_hw *hw, u32 reg, u32 val)\n+{\n+\tif (reg == NGBE_REG_DUMMY)\n+\t\treturn;\n+\tngbe_set32(NGBE_REG_ADDR(hw, reg), val);\n+}\n+\n+static inline u32\n+rd32m(struct ngbe_hw *hw, u32 reg, u32 mask)\n+{\n+\tu32 val = rd32(hw, reg);\n+\tval &= mask;\n+\treturn val;\n+}\n+\n+static inline void\n+wr32m(struct ngbe_hw *hw, u32 reg, u32 mask, u32 field)\n+{\n+\tu32 val = rd32(hw, reg);\n+\tval = ((val & ~mask) | (field & mask));\n+\twr32(hw, reg, val);\n+}\n+\n+static inline u64\n+rd64(struct ngbe_hw *hw, u32 reg)\n+{\n+\tu64 lsb = rd32(hw, reg);\n+\tu64 msb = rd32(hw, reg + 4);\n+\treturn (lsb | msb << 32);\n+}\n+\n+static inline void\n+wr64(struct ngbe_hw *hw, u32 reg, u64 val)\n+{\n+\twr32(hw, reg, (u32)val);\n+\twr32(hw, reg + 4, (u32)(val >> 32));\n+}\n+\n+/* poll register */\n+static inline u32\n+po32m(struct ngbe_hw *hw, u32 reg, u32 mask, u32 expect, u32 *actual,\n+\tu32 loop, u32 slice)\n+{\n+\tbool usec = true;\n+\tu32 value = 0, all = 0;\n+\n+\tif (slice > 1000 * MAX_UDELAY_MS) {\n+\t\tusec = false;\n+\t\tslice = (slice + 500) / 1000;\n+\t}\n+\n+\tdo {\n+\t\tall |= rd32(hw, reg);\n+\t\tvalue |= mask & all;\n+\t\tif (value == expect)\n+\t\t\tbreak;\n+\n+\t\tusec ? usec_delay(slice) : msec_delay(slice);\n+\t} while (--loop > 0);\n+\n+\tif (actual)\n+\t\t*actual = all;\n+\n+\treturn loop;\n+}\n+\n+/* flush all write operations */\n+#define ngbe_flush(hw) rd32(hw, 0x00100C)\n+\n+#define rd32a(hw, reg, idx) ( \\\n+\trd32((hw), (reg) + ((idx) << 2)))\n+#define wr32a(hw, reg, idx, val) \\\n+\twr32((hw), (reg) + ((idx) << 2), (val))\n+\n+#define rd32w(hw, reg, mask, slice) do { \\\n+\trd32((hw), reg); \\\n+\tpo32m((hw), reg, mask, mask, NULL, 5, slice); \\\n+} while (0)\n+\n+#define wr32w(hw, reg, val, mask, slice) do { \\\n+\twr32((hw), reg, val); \\\n+\tpo32m((hw), reg, mask, mask, NULL, 5, slice); \\\n+} while (0)\n+\n+#define NGBE_XPCS_IDAADDR 0x13000\n+#define NGBE_XPCS_IDADATA 0x13004\n+#define NGBE_EPHY_IDAADDR 0x13008\n+#define NGBE_EPHY_IDADATA 0x1300C\n+static inline u32\n+rd32_epcs(struct ngbe_hw *hw, u32 addr)\n+{\n+\tu32 data;\n+\twr32(hw, NGBE_XPCS_IDAADDR, addr);\n+\tdata = rd32(hw, NGBE_XPCS_IDADATA);\n+\treturn data;\n+}\n+\n+static inline void\n+wr32_epcs(struct ngbe_hw *hw, u32 addr, u32 data)\n+{\n+\twr32(hw, NGBE_XPCS_IDAADDR, addr);\n+\twr32(hw, NGBE_XPCS_IDADATA, data);\n+}\n+\n+static inline u32\n+rd32_ephy(struct ngbe_hw *hw, u32 addr)\n+{\n+\tu32 data;\n+\twr32(hw, NGBE_EPHY_IDAADDR, addr);\n+\tdata = rd32(hw, NGBE_EPHY_IDADATA);\n+\treturn data;\n+}\n+\n+static inline void\n+wr32_ephy(struct ngbe_hw *hw, u32 addr, u32 data)\n+{\n+\twr32(hw, NGBE_EPHY_IDAADDR, addr);\n+\twr32(hw, NGBE_EPHY_IDADATA, data);\n+}\n+\n+#endif /* _NGBE_REGS_H_ */\n", "prefixes": [ "v6", "04/19" ] }{ "id": 94329, "url": "