get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/21110/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 21110,
    "url": "http://patches.dpdk.org/api/patches/21110/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1488454371-3342-43-git-send-email-shijith.thotton@caviumnetworks.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1488454371-3342-43-git-send-email-shijith.thotton@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1488454371-3342-43-git-send-email-shijith.thotton@caviumnetworks.com",
    "date": "2017-03-02T11:32:47",
    "name": "[dpdk-dev,v2,42/46] net/liquidio: add APIs for hardware stats",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "b2b6ea114ca87f19b6666d72df581cdfd22aea43",
    "submitter": {
        "id": 677,
        "url": "http://patches.dpdk.org/api/people/677/?format=api",
        "name": "Shijith Thotton",
        "email": "shijith.thotton@caviumnetworks.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1488454371-3342-43-git-send-email-shijith.thotton@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/21110/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/21110/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id F282DFADC;\n\tThu,  2 Mar 2017 12:40:11 +0100 (CET)",
            "from NAM03-CO1-obe.outbound.protection.outlook.com\n\t(mail-co1nam03on0043.outbound.protection.outlook.com [104.47.40.43])\n\tby dpdk.org (Postfix) with ESMTP id 771B7FAD9\n\tfor <dev@dpdk.org>; Thu,  2 Mar 2017 12:40:10 +0100 (CET)",
            "from lio357.in.caveonetworks.com (14.140.2.178) by\n\tCY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.1.947.12; Thu, 2 Mar 2017 11:40:06 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=jJk3QWC6QiQucbwDo6Ojhcq13lfg9bNq5P/STVLkluk=;\n\tb=S9syhO5bOdYYHK3Bq+D6bKutLBlyQUlpfFRL3Rga09BFK8nigkXILQ8HzXVtVDKyXh9/UE6Kbeg1qu+H3yrQM0lRpha/fw/g1OfCp4a1D/Lo4rlZ73ZTBz/9uQ8og3gmOm6RZXZhzisrU5CwvoeegGfEpmfiXqaxxjqzUrkldN0=",
        "Authentication-Results": "intel.com; dkim=none (message not signed)\n\theader.d=none;intel.com; dmarc=none action=none\n\theader.from=caviumnetworks.com;",
        "From": "Shijith Thotton <shijith.thotton@caviumnetworks.com>",
        "To": "ferruh.yigit@intel.com",
        "Cc": "dev@dpdk.org, Jerin Jacob <jerin.jacob@caviumnetworks.com>,\n\tDerek Chickles <derek.chickles@caviumnetworks.com>,\n\tVenkat Koppula <venkat.koppula@caviumnetworks.com>,\n\tSrisivasubramanian S <ssrinivasan@caviumnetworks.com>,\n\tMallesham Jatharakonda <mjatharakonda@oneconvergence.com>",
        "Date": "Thu,  2 Mar 2017 17:02:47 +0530",
        "Message-Id": "<1488454371-3342-43-git-send-email-shijith.thotton@caviumnetworks.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com>",
        "References": "<1487669225-30091-1-git-send-email-shijith.thotton@caviumnetworks.com>\n\t<1488454371-3342-1-git-send-email-shijith.thotton@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[14.140.2.178]",
        "X-ClientProxiedBy": "BM1PR01CA0021.INDPRD01.PROD.OUTLOOK.COM (10.163.198.156)\n\tTo\n\tCY1PR07MB2277.namprd07.prod.outlook.com (10.164.112.155)",
        "X-MS-Office365-Filtering-Correlation-Id": "cb64778d-efb4-4f4f-f609-08d46160e14f",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:CY1PR07MB2277; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; CY1PR07MB2277;\n\t3:JF4E+FFG8EXURyNM/K605jcvss6EMhQ5prw/gpiIm3MCvxPHRn7aTAxXn7UH+Q+/UjEIVEsjej0k8sFtZ3pIuD3TYUtse2N6PNRW/42ZNy5kOgSzcq9TDPJYJ1h7kS+w2Zl+wlh2KpTKUpXEkr1o0lUK3MIRyWOSlkl9vVXQNfTSLIiy2rvc6Rx/RTvCUqO7c+JSpLprgA/kDem5tHPNJuWUsHNXqdOBKGkG+r8jeGE7lLepLb4vtPx493ibAzEFSpQ83h9ahh33HlMzdkx6dw==;\n\t25:h61uJL0cwZo2h4at/UikQYJpyZiMFusmG5aYtyHHpB1jLcVvvnHVNv0lQytnhbXt938Jsja2Otse0T/wn5DMPE2U3ClopqC98mltIc7vvUd4o3qDT59GWxYZPV0ZM5g/BKDZW3g5IHvUZMvuXu1rzQxqegVCIQxHTS8bSCqC+VQSxD4poinkAXQK3RST2SduMUGrSUZ7GoycywYtnpOrk8TxHxRmnrsXb2OKbZ5/0qmDWhZad/Gn3VioVBtkDAClwWVxfcbTI7Lqw2C6pk/TVqn9bO02shWzhjDriJtMfl8+lSgy4eASsbzVMt7eIUlI3lON/FZV0d+ClwuOZKV+msoBR+6zU08kFcqrHmP0Got8qkLzekp36IRFFNO60XV7KIwl6Khe2rQK0xRf9sclPajpKg1a0bxk/9cAwgiFlx4KvLuoszPQPP6nz9IMpBJRvpPqGDyLTpA8wvxGxbnaPA==",
            "1; CY1PR07MB2277;\n\t31:fYRCjn9f4hIvc1BP/OQWHLDIm8wCmxLg3wEMDnAl3rW7QWSacGt9HWZIq81W1e3QMIOO3WTKwVExcfyPXN2JD39OyZNgRLQ5Eyl0eIZJYMHHP6TH+l3VTYQ9cPiasfOCtxiUySYdh2WskfG1pOwQR9vf1xCtuGWLN3dA7aIJjetvTl5XtwRh5eBQ5IelYlmlKHWDoY1y4ZFMj/o722QQTbb7t97SpYw4+l8DGfDDQ6yq9FaYcz1f4KNm1nI9bV+o;\n\t20:wSMlXG4nw77miloRnWlc0JUvBga9YZxtlqU5+nTRh96rcMyQiRbLrv9/KUWKh2q2w7Vil+xu2CjDuYv+IzCZi0A19jMqq/bqQk6ahpWasca1oytIyljn9iHC7PAskFKNTgmXZSMkxM1oFUbUf7DQT2j0UFEUsTnbqhFtXh6NjLePsMvBlHgiiejWX+XDXCzj3L2RhA+jaigeIKsbwMlPg3T2kDfL87730YbF8V9HivmiT5xe5t/bt5S/wfFiDiPuHKnOZpUH5J9/o+bsg65XTPqTnWMhaGi2CTnxOzoHDm9rWsS6V14U+11yWVjsB0SIOj88U19ghrlsfLuzzR+naCUNHV1sGsz+0xCbjCq6j9jl5ZttHtBRDEnFM2upaxPjwqrj0hF3eX5qxv/2FtzlawXeaBcSxRG6fLKNSe5Z2P5kIk53Q2PVvMCJb81qq4jgLtOrcBbE6iTEd23sLoJUkcnT1ONBynTmrSKutjBWi5xgFchvAlQeRxRBqjcnLncYb/wu8HrEzXhkaFkiVzJno5+j4yvSSODZPDnPQf+TkDpRKIxZm5ny+J6DCJZSyq7rjLzkuyyLCjhIdJLvx2a1txqzeiL+Ok5Z2BuDXUYGk1Y=",
            "1; CY1PR07MB2277;\n\t4:McV0Qc7ni2hZTq97Jue031PK5NLovBkbM06eFlxWsz8fHUCasuikJ1NGR/Zo/p6i/cNJ4MVlFSpdZ/oABm/2XPiyXnHfJ0H5x/mikFqToo9RfuiTMbqWa+hvXVtxc6BJ5PdOXY7im3ISrlZPk04sLYllCrWsuKC9Pj7kjRHijGe3QMlBp6/9/XPaNiT9diMSuo8ast8GEEzxfXF8GYnuMLxmcX2mam+kg6Fik09HWZwLOrmAi7eG0SxNy9cd5grBdaYYJ/S2GkX9j15MUA3xlrOKsxkGThKluIIiTnYJuA9CghG4/EVAoMVNVJpuxt2iXGvAQYMAZM/lVQS9OqjSoTSrHFLQMmEQv0Mlb+QgUJ0k5drG08hL1rGfF0G9PqfA9OgJmB2U7rkkQGh0lj1Fv/kQXYRieXMRoisAwdHysElf00fxScoVHxo4Umjuc5J+JcB5urlnogaWyxG56mhLBb2RQsh28hT1JcB8EUX85D+h5FdY5mjNPIhJ5+qblr+KomCr8+hKvUZ+tHpFLx2rx574E30klGzg0+0R1zgynI90hTmdF3qe5SeFHAsIdAx6HBSpta8vCRZDl7+UF+NONWbv6BX6ibKrneZI4GGtN3U=",
            "=?us-ascii?Q?1; CY1PR07MB2277;\n\t23:QWAiZzSBqI5iGErpL2SAmvJ3Uxk6OhGVlaxCj9d4H?=\n\tDIACgw/xOXA8TvNSTojL0v5ZUqnSAdx+7v1iZK87JTQ3mjhUOTIEEBTDthDyzdwxv/2AWbr7UqL7KrpCGHHZsJInnnrVe+Vp/wRIV+R5KbGnoWkZ0+Ivu81GJkscKSE6KlB7XKhd45Qf2M42AjeKiF9RaUh0dS2XuZaTHtFwejT8zii3CdBxn9ErhzmmBLn1rQC+9X3GSRUtoryApkd1+qXADy+xjMUu6+NetsCRo0aMdYt5DH/WZ1L/3p4V8BwvTzVlFQ/PpG+6tdUXQAWbQBWnIu99oGv8RkPkgvGYl98q0SV4hodvt8wlkfVweVJw1Us6510SVdMVi94FKlb6sjbHngzS5t5mkg+8mbz9x+L8a3RK+wqCdJ5hPB7mdyZC8jGdG31E7oL3r+E+7aUdV2g5rhLOXYqKu25q9ZY1rUZNtkvGKDNKmZPJVzRVneeOnat2txE5cAVasnENvrVtTx9zSxNvTbfO8uQ6hjXBb4mFemgAkajhzS2si6dBunrmCP/O0a4mS0OPJl5TeD8SEuOQ3BbTQmA9Ki/wLkraZhy+jycyPyw7AUgn7THSCtc7tS4C+Wq3CW/qc54VnMXCTpv0wg6A0SJpRcCtjXj0qgS70/KW8wSjGWEKhCZlPPz8AyaHjQpckmWzo1/umXj+lnyxofaYvbZFxXsxbJlaXuCbybgyKN5M6K9CheyTuDy2B66Q7+urCFYTNrQoIS7YfmFKxnYAlwptvVIxamrBVr5ciyo4ceqMBH6BEb5L3EtCpcO5JpoNAQaPsjMmQaFFE/wy2Lzcf5nOPS4Z31pfsfY4eYV/drL4cdaz3m6TV0yzE1udJ1kQFLcIV/azty+4W4TFugx5SV26LpHaR3D+CUjY/oeoxevKSf5qNrz2eHDMThuIfhl0C0HLyRWg6YL91NJ5KJUWVFel1y3hU0+ia6XwALpdpbe8siHiOxBL9GTkWmbr5/Zc/ZBBm6C9qN93GYbT7OAPOi+XByLdTyKt1eG7P3digFkCgCY6KtvtFKsPGoEWM1q4ozEJbTE6d2O6ura27wMOXKkbXSVpcTQ7Tnpbhta2brOm7iSQ/lZTDTad7s=",
            "1; CY1PR07MB2277;\n\t6:OZ9C4YTcplkJ3wyCPh6vVhcdEw51yTr2jmzKUbMUDFv+Qm6Pt13DZRR5792Xy/8JRsRloY3jl7LL8wa8s7SpJ4fuy0FkDH4Nm6MjbCjTGaD6JuVhciBn80DJD/dDEw4ZoOYz/PmORWGdjkxkLvxRinlfr42yGJcH13MIFqvKdJhbF6bg1Nsh67j077qHZfRlQH+crHQ2NmpsIlKVwb28K7qoZhOyhthyYsGUYFGInU9Gau9VgYBSPEHqBhi3QokszgYllfgIwCJNKJPGM2NyXeMmVVlVXvfiTn4fdx8irS1odpSKdFPimNK/jXkfWbZYNGRdP503v7SRRvZzCfgT+LBTeJA9O8iOql5vlD2PPHi15AzgVcW8yPwWxyxMFPweaoI1O2QiP4FPn7I4JCfGeQ==;\n\t5:vBm4VXk85NppbtSOL+PL+dOJTr/IesWTZ/Mfek5xX1DREp/EUJyAqYdYCKEt9lNcU4wS5TwmbljNwdZuNzizjhKhT2NK56GzlKfQwEkljfTKQsiNutoRNd/hU6PNEPEj/smFTD+Sqbg3Lbjq/Xn9Og==;\n\t24:6DDCfEolAcN6f3qZSufG78uuubtBnQn2XEvmKniUFX6NKcduoSX0niwDYSQKecVlTQOHHUzUXW5OXvoyFO3R95imxlHBWztZksdHwbfsjEg=",
            "1; CY1PR07MB2277;\n\t7:DngCqe23X234YGGdq69v9tmDkAl0y0hEf7X4ZM0zkdRmNDeJH1rqeGOAVrMzVEN5Qo4ZHIuX0wUg5bYSeljtzFJLwlJLRM9H3LY2TCCQTASY6PmRTXjFjNnvvbBwoSEVvPe+kTHQ7mzCzw9AiCk81AFqTw2PbWcYQJukcLIJ/1wKZdCg+pxyYY6Kpp3MFr5l733hWrQlgK6FkOCCCcx1vMtTS7g7WYaURtHW96BjMKxacSYq6bpqjcGu+bnlDaWrq0lL0KYs2XHIH7ny6KWV5cGdNkIYCF8ZqDMIM1ikQh2dGVeQcm+6Ik3hBmvEHevbkwK0TY9BcuLQTY4nZNNJlQ=="
        ],
        "X-Microsoft-Antispam-PRVS": "<CY1PR07MB2277A54CB386AE4FABA4707E81280@CY1PR07MB2277.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6041248)(20161123558025)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148);\n\tSRVR:CY1PR07MB2277; BCL:0; PCL:0; RULEID:; SRVR:CY1PR07MB2277; ",
        "X-Forefront-PRVS": "023495660C",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(2950100002)(6916009)(42882006)(575784001)(5660300001)(92566002)(4720700003)(33646002)(48376002)(50226002)(6666003)(2906002)(5003940100001)(36756003)(8676002)(50466002)(81166006)(110136004)(38730400002)(4326008)(305945005)(2361001)(53936002)(2351001)(25786008)(6512007)(189998001)(54906002)(47776003)(6506006)(6486002)(66066001)(6116002)(3846002)(50986999)(76176999)(5009440100003)(42186005)(7736002)(7099028)(110426004);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR07MB2277;\n\tH:lio357.in.caveonetworks.com; \n\tFPR:; SPF:None; MLV:nov; PTR:InfoNoRecords; LANG:en; ",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Mar 2017 11:40:06.4700\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY1PR07MB2277",
        "Subject": "[dpdk-dev] [PATCH v2 42/46] net/liquidio: add APIs for hardware\n\tstats",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>\nSigned-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nSigned-off-by: Derek Chickles <derek.chickles@caviumnetworks.com>\nSigned-off-by: Venkat Koppula <venkat.koppula@caviumnetworks.com>\nSigned-off-by: Srisivasubramanian S <ssrinivasan@caviumnetworks.com>\nSigned-off-by: Mallesham Jatharakonda <mjatharakonda@oneconvergence.com>\n---\n drivers/net/liquidio/base/lio_hw_defs.h |   2 +\n drivers/net/liquidio/lio_ethdev.c       | 194 ++++++++++++++++++++++++++++++++\n drivers/net/liquidio/lio_ethdev.h       |  83 ++++++++++++++\n 3 files changed, 279 insertions(+)",
    "diff": "diff --git a/drivers/net/liquidio/base/lio_hw_defs.h b/drivers/net/liquidio/base/lio_hw_defs.h\nindex cc189ad..8a22d10 100644\n--- a/drivers/net/liquidio/base/lio_hw_defs.h\n+++ b/drivers/net/liquidio/base/lio_hw_defs.h\n@@ -124,6 +124,7 @@ enum octeon_tag_type {\n #define LIO_OPCODE_NW_DATA\t\t0x02 /* network packet data */\n #define LIO_OPCODE_CMD\t\t\t0x03\n #define LIO_OPCODE_INFO\t\t\t0x04\n+#define LIO_OPCODE_PORT_STATS\t\t0x05\n #define LIO_OPCODE_IF_CFG\t\t0x09\n \n #define LIO_MIN_RX_BUF_SIZE\t\t64\n@@ -132,6 +133,7 @@ enum octeon_tag_type {\n /* NIC Command types */\n #define LIO_CMD_CHANGE_DEVFLAGS\t\t0x3\n #define LIO_CMD_RX_CTL\t\t\t0x4\n+#define LIO_CMD_CLEAR_STATS\t\t0x6\n #define LIO_CMD_SET_RSS\t\t\t0xD\n #define LIO_CMD_TNL_RX_CSUM_CTL\t\t0x10\n #define LIO_CMD_TNL_TX_CSUM_CTL\t\t0x11\ndiff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c\nindex 7f0e9f4..8459986 100644\n--- a/drivers/net/liquidio/lio_ethdev.c\n+++ b/drivers/net/liquidio/lio_ethdev.c\n@@ -117,6 +117,197 @@\n \treturn 0;\n }\n \n+/* store statistics names and its offset in stats structure */\n+struct rte_lio_xstats_name_off {\n+\tchar name[RTE_ETH_XSTATS_NAME_SIZE];\n+\tunsigned int offset;\n+};\n+\n+static const struct rte_lio_xstats_name_off rte_lio_stats_strings[] = {\n+\t{\"rx_pkts\", offsetof(struct octeon_rx_stats, total_rcvd)},\n+\t{\"rx_bytes\", offsetof(struct octeon_rx_stats, bytes_rcvd)},\n+\t{\"rx_broadcast_pkts\", offsetof(struct octeon_rx_stats, total_bcst)},\n+\t{\"rx_multicast_pkts\", offsetof(struct octeon_rx_stats, total_mcst)},\n+\t{\"rx_flow_ctrl_pkts\", offsetof(struct octeon_rx_stats, ctl_rcvd)},\n+\t{\"rx_fifo_err\", offsetof(struct octeon_rx_stats, fifo_err)},\n+\t{\"rx_dmac_drop\", offsetof(struct octeon_rx_stats, dmac_drop)},\n+\t{\"rx_fcs_err\", offsetof(struct octeon_rx_stats, fcs_err)},\n+\t{\"rx_jabber_err\", offsetof(struct octeon_rx_stats, jabber_err)},\n+\t{\"rx_l2_err\", offsetof(struct octeon_rx_stats, l2_err)},\n+\t{\"rx_vxlan_pkts\", offsetof(struct octeon_rx_stats, fw_rx_vxlan)},\n+\t{\"rx_vxlan_err\", offsetof(struct octeon_rx_stats, fw_rx_vxlan_err)},\n+\t{\"rx_lro_pkts\", offsetof(struct octeon_rx_stats, fw_lro_pkts)},\n+\t{\"tx_pkts\", (offsetof(struct octeon_tx_stats, total_pkts_sent)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_bytes\", (offsetof(struct octeon_tx_stats, total_bytes_sent)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_broadcast_pkts\",\n+\t\t(offsetof(struct octeon_tx_stats, bcast_pkts_sent)) +\n+\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_multicast_pkts\",\n+\t\t(offsetof(struct octeon_tx_stats, mcast_pkts_sent)) +\n+\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_flow_ctrl_pkts\", (offsetof(struct octeon_tx_stats, ctl_sent)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_fifo_err\", (offsetof(struct octeon_tx_stats, fifo_err)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_total_collisions\", (offsetof(struct octeon_tx_stats,\n+\t\t\t\t\t  total_collisions)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_tso\", (offsetof(struct octeon_tx_stats, fw_tso)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+\t{\"tx_vxlan_pkts\", (offsetof(struct octeon_tx_stats, fw_tx_vxlan)) +\n+\t\t\t\t\t\tsizeof(struct octeon_rx_stats)},\n+};\n+\n+#define LIO_NB_XSTATS\tRTE_DIM(rte_lio_stats_strings)\n+\n+/* Get hw stats of the port */\n+static int\n+lio_dev_xstats_get(struct rte_eth_dev *eth_dev, struct rte_eth_xstat *xstats,\n+\t\t   unsigned int n)\n+{\n+\tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n+\tuint16_t timeout = LIO_MAX_CMD_TIMEOUT;\n+\tstruct octeon_link_stats *hw_stats;\n+\tstruct lio_link_stats_resp *resp;\n+\tstruct lio_soft_command *sc;\n+\tuint32_t resp_size;\n+\tunsigned int i;\n+\tint retval;\n+\n+\tif (!lio_dev->intf_open) {\n+\t\tlio_dev_err(lio_dev, \"Port %d down\\n\",\n+\t\t\t    lio_dev->port_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (n < LIO_NB_XSTATS)\n+\t\treturn LIO_NB_XSTATS;\n+\n+\tresp_size = sizeof(struct lio_link_stats_resp);\n+\tsc = lio_alloc_soft_command(lio_dev, 0, resp_size, 0);\n+\tif (sc == NULL)\n+\t\treturn -ENOMEM;\n+\n+\tresp = (struct lio_link_stats_resp *)sc->virtrptr;\n+\tlio_prepare_soft_command(lio_dev, sc, LIO_OPCODE,\n+\t\t\t\t LIO_OPCODE_PORT_STATS, 0, 0, 0);\n+\n+\t/* Setting wait time in seconds */\n+\tsc->wait_time = LIO_MAX_CMD_TIMEOUT / 1000;\n+\n+\tretval = lio_send_soft_command(lio_dev, sc);\n+\tif (retval == LIO_IQ_SEND_FAILED) {\n+\t\tlio_dev_err(lio_dev, \"failed to get port stats from firmware. status: %x\\n\",\n+\t\t\t    retval);\n+\t\tgoto get_stats_fail;\n+\t}\n+\n+\twhile ((*sc->status_word == LIO_COMPLETION_WORD_INIT) && --timeout) {\n+\t\tlio_flush_iq(lio_dev, lio_dev->instr_queue[sc->iq_no]);\n+\t\tlio_process_ordered_list(lio_dev);\n+\t\trte_delay_ms(1);\n+\t}\n+\n+\tretval = resp->status;\n+\tif (retval) {\n+\t\tlio_dev_err(lio_dev, \"failed to get port stats from firmware\\n\");\n+\t\tgoto get_stats_fail;\n+\t}\n+\n+\tlio_swap_8B_data((uint64_t *)(&resp->link_stats),\n+\t\t\t sizeof(struct octeon_link_stats) >> 3);\n+\n+\thw_stats = &resp->link_stats;\n+\n+\tfor (i = 0; i < LIO_NB_XSTATS; i++) {\n+\t\txstats[i].id = i;\n+\t\txstats[i].value =\n+\t\t    *(uint64_t *)(((char *)hw_stats) +\n+\t\t\t\t\trte_lio_stats_strings[i].offset);\n+\t}\n+\n+\tlio_free_soft_command(sc);\n+\n+\treturn LIO_NB_XSTATS;\n+\n+get_stats_fail:\n+\tlio_free_soft_command(sc);\n+\n+\treturn -1;\n+}\n+\n+static int\n+lio_dev_xstats_get_names(struct rte_eth_dev *eth_dev,\n+\t\t\t struct rte_eth_xstat_name *xstats_names,\n+\t\t\t unsigned limit __rte_unused)\n+{\n+\tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n+\tunsigned int i;\n+\n+\tif (!lio_dev->intf_open) {\n+\t\tlio_dev_err(lio_dev, \"Port %d down\\n\",\n+\t\t\t    lio_dev->port_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (xstats_names == NULL)\n+\t\treturn LIO_NB_XSTATS;\n+\n+\t/* Note: limit checked in rte_eth_xstats_names() */\n+\n+\tfor (i = 0; i < LIO_NB_XSTATS; i++) {\n+\t\tsnprintf(xstats_names[i].name, sizeof(xstats_names[i].name),\n+\t\t\t \"%s\", rte_lio_stats_strings[i].name);\n+\t}\n+\n+\treturn LIO_NB_XSTATS;\n+}\n+\n+/* Reset hw stats for the port */\n+static void\n+lio_dev_xstats_reset(struct rte_eth_dev *eth_dev)\n+{\n+\tstruct lio_device *lio_dev = LIO_DEV(eth_dev);\n+\tstruct lio_dev_ctrl_cmd ctrl_cmd;\n+\tstruct lio_ctrl_pkt ctrl_pkt;\n+\n+\tif (!lio_dev->intf_open) {\n+\t\tlio_dev_err(lio_dev, \"Port %d down\\n\",\n+\t\t\t    lio_dev->port_id);\n+\t\treturn;\n+\t}\n+\n+\t/* flush added to prevent cmd failure\n+\t * incase the queue is full\n+\t */\n+\tlio_flush_iq(lio_dev, lio_dev->instr_queue[0]);\n+\n+\tmemset(&ctrl_pkt, 0, sizeof(struct lio_ctrl_pkt));\n+\tmemset(&ctrl_cmd, 0, sizeof(struct lio_dev_ctrl_cmd));\n+\n+\tctrl_cmd.eth_dev = eth_dev;\n+\tctrl_cmd.cond = 0;\n+\n+\tctrl_pkt.ncmd.s.cmd = LIO_CMD_CLEAR_STATS;\n+\tctrl_pkt.ctrl_cmd = &ctrl_cmd;\n+\n+\tif (lio_send_ctrl_pkt(lio_dev, &ctrl_pkt)) {\n+\t\tlio_dev_err(lio_dev, \"Failed to send clear stats command\\n\");\n+\t\treturn;\n+\t}\n+\n+\tif (lio_wait_for_ctrl_cmd(lio_dev, &ctrl_cmd)) {\n+\t\tlio_dev_err(lio_dev, \"Clear stats command timed out\\n\");\n+\t\treturn;\n+\t}\n+\n+\t/* clear stored per queue stats */\n+\tRTE_FUNC_PTR_OR_RET(*eth_dev->dev_ops->stats_reset);\n+\t(*eth_dev->dev_ops->stats_reset)(eth_dev);\n+}\n+\n /* Retrieve the device statistics (# packets in/out, # bytes in/out, etc */\n static void\n lio_dev_stats_get(struct rte_eth_dev *eth_dev,\n@@ -1471,7 +1662,10 @@ static int lio_dev_configure(struct rte_eth_dev *eth_dev)\n \t.allmulticast_disable\t= lio_dev_allmulticast_disable,\n \t.link_update\t\t= lio_dev_link_update,\n \t.stats_get\t\t= lio_dev_stats_get,\n+\t.xstats_get\t\t= lio_dev_xstats_get,\n+\t.xstats_get_names\t= lio_dev_xstats_get_names,\n \t.stats_reset\t\t= lio_dev_stats_reset,\n+\t.xstats_reset\t\t= lio_dev_xstats_reset,\n \t.dev_infos_get\t\t= lio_dev_info_get,\n \t.mtu_set\t\t= lio_dev_change_vf_mtu,\n \t.rx_queue_setup\t\t= lio_dev_rx_queue_setup,\ndiff --git a/drivers/net/liquidio/lio_ethdev.h b/drivers/net/liquidio/lio_ethdev.h\nindex 6543061..150e9c9 100644\n--- a/drivers/net/liquidio/lio_ethdev.h\n+++ b/drivers/net/liquidio/lio_ethdev.h\n@@ -62,6 +62,83 @@ struct octeon_if_cfg_info {\n \tchar lio_firmware_version[LIO_FW_VERSION_LENGTH];\n };\n \n+/** Stats for each NIC port in RX direction. */\n+struct octeon_rx_stats {\n+\t/* link-level stats */\n+\tuint64_t total_rcvd;\n+\tuint64_t bytes_rcvd;\n+\tuint64_t total_bcst;\n+\tuint64_t total_mcst;\n+\tuint64_t runts;\n+\tuint64_t ctl_rcvd;\n+\tuint64_t fifo_err; /* Accounts for over/under-run of buffers */\n+\tuint64_t dmac_drop;\n+\tuint64_t fcs_err;\n+\tuint64_t jabber_err;\n+\tuint64_t l2_err;\n+\tuint64_t frame_err;\n+\n+\t/* firmware stats */\n+\tuint64_t fw_total_rcvd;\n+\tuint64_t fw_total_fwd;\n+\tuint64_t fw_total_fwd_bytes;\n+\tuint64_t fw_err_pko;\n+\tuint64_t fw_err_link;\n+\tuint64_t fw_err_drop;\n+\tuint64_t fw_rx_vxlan;\n+\tuint64_t fw_rx_vxlan_err;\n+\n+\t/* LRO */\n+\tuint64_t fw_lro_pkts;   /* Number of packets that are LROed */\n+\tuint64_t fw_lro_octs;   /* Number of octets that are LROed */\n+\tuint64_t fw_total_lro;  /* Number of LRO packets formed */\n+\tuint64_t fw_lro_aborts; /* Number of times lRO of packet aborted */\n+\tuint64_t fw_lro_aborts_port;\n+\tuint64_t fw_lro_aborts_seq;\n+\tuint64_t fw_lro_aborts_tsval;\n+\tuint64_t fw_lro_aborts_timer;\n+\t/* intrmod: packet forward rate */\n+\tuint64_t fwd_rate;\n+};\n+\n+/** Stats for each NIC port in RX direction. */\n+struct octeon_tx_stats {\n+\t/* link-level stats */\n+\tuint64_t total_pkts_sent;\n+\tuint64_t total_bytes_sent;\n+\tuint64_t mcast_pkts_sent;\n+\tuint64_t bcast_pkts_sent;\n+\tuint64_t ctl_sent;\n+\tuint64_t one_collision_sent;\t/* Packets sent after one collision */\n+\t/* Packets sent after multiple collision */\n+\tuint64_t multi_collision_sent;\n+\t/* Packets not sent due to max collisions */\n+\tuint64_t max_collision_fail;\n+\t/* Packets not sent due to max deferrals */\n+\tuint64_t max_deferral_fail;\n+\t/* Accounts for over/under-run of buffers */\n+\tuint64_t fifo_err;\n+\tuint64_t runts;\n+\tuint64_t total_collisions; /* Total number of collisions detected */\n+\n+\t/* firmware stats */\n+\tuint64_t fw_total_sent;\n+\tuint64_t fw_total_fwd;\n+\tuint64_t fw_total_fwd_bytes;\n+\tuint64_t fw_err_pko;\n+\tuint64_t fw_err_link;\n+\tuint64_t fw_err_drop;\n+\tuint64_t fw_err_tso;\n+\tuint64_t fw_tso;     /* number of tso requests */\n+\tuint64_t fw_tso_fwd; /* number of packets segmented in tso */\n+\tuint64_t fw_tx_vxlan;\n+};\n+\n+struct octeon_link_stats {\n+\tstruct octeon_rx_stats fromwire;\n+\tstruct octeon_tx_stats fromhost;\n+};\n+\n union lio_if_cfg {\n \tuint64_t if_cfg64;\n \tstruct {\n@@ -87,6 +164,12 @@ struct lio_if_cfg_resp {\n \tuint64_t status;\n };\n \n+struct lio_link_stats_resp {\n+\tuint64_t rh;\n+\tstruct octeon_link_stats link_stats;\n+\tuint64_t status;\n+};\n+\n struct lio_link_status_resp {\n \tuint64_t rh;\n \tstruct octeon_link_info link_info;\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "42/46"
    ]
}