get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 35202,
    "url": "http://patches.dpdk.org/api/patches/35202/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180216213700.3415-3-pbhagavatula@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": "<20180216213700.3415-3-pbhagavatula@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180216213700.3415-3-pbhagavatula@caviumnetworks.com",
    "date": "2018-02-16T21:36:52",
    "name": "[dpdk-dev,02/10] mempool/octeontx: probe timvf PCIe devices",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "94bf15bd54bc2fd13a4589d476f954e95245d8e3",
    "submitter": {
        "id": 768,
        "url": "http://patches.dpdk.org/api/people/768/?format=api",
        "name": "Pavan Nikhilesh",
        "email": "pbhagavatula@caviumnetworks.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180216213700.3415-3-pbhagavatula@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/35202/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/35202/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id F1BE31B293;\n\tFri, 16 Feb 2018 22:37:42 +0100 (CET)",
            "from NAM01-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam01on0082.outbound.protection.outlook.com [104.47.34.82])\n\tby dpdk.org (Postfix) with ESMTP id 7A0001B293\n\tfor <dev@dpdk.org>; Fri, 16 Feb 2018 22:37:40 +0100 (CET)",
            "from localhost.localdomain (111.93.218.67) by\n\tDM5PR07MB3467.namprd07.prod.outlook.com (2603:10b6:4:67::22) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.506.18;\n\tFri, 16 Feb 2018 21:37:37 +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=8/TpMfcKzbUF3iiGbDSgos2sZMJTlxqfNPOAVP4gHy4=;\n\tb=JohrtczkYSBXTu7YLA/sx2HJvRA6kFlEbK55UVd2a5XfWh5g9jXOF0MaxAocKel24EvhEH9/HAvmIl0VDzlK/CXqC4LRJya88yD59eXPCJa3GV64EZJZwV8bJE21XDFxyKlLvZEDVXVaVVJXK2ZLJmFg0oWjr4GDc0Zg5Y7dLYg=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Pavan.Bhagavatula@cavium.com; ",
        "From": "Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>",
        "To": "jerin.jacob@caviumnetworks.com, santosh.shukla@caviumnetworks.com,\n\terik.g.carrillo@intel.com",
        "Cc": "dev@dpdk.org,\n\tPavan Nikhilesh <pbhagavatula@caviumnetworks.com>",
        "Date": "Sat, 17 Feb 2018 03:06:52 +0530",
        "Message-Id": "<20180216213700.3415-3-pbhagavatula@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.16.1",
        "In-Reply-To": "<20180216213700.3415-1-pbhagavatula@caviumnetworks.com>",
        "References": "<20180216213700.3415-1-pbhagavatula@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[111.93.218.67]",
        "X-ClientProxiedBy": "SG2PR01CA0090.apcprd01.prod.exchangelabs.com\n\t(2603:1096:3:15::16) To DM5PR07MB3467.namprd07.prod.outlook.com\n\t(2603:10b6:4:67::22)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "19fa7950-d0d5-4598-d739-08d575858086",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(7020095)(4652020)(5600026)(4604075)(2017052603307)(7153060)(7193020);\n\tSRVR:DM5PR07MB3467; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; DM5PR07MB3467;\n\t3:bcYLliD0+Z2yraKl/8OQL3qC3qdKuTxng1Vqb4w0fEz7v/oYvUlHtiGaJUz1Ps58skdAnVm59U0B7+XojD9C3EbS47wO+hQV3qeWn9+CPfkHFn/FgD2Es5ICLS7Hup+b+Yhor8idYKvPJjO2c3I6HrzJz1yxEX+7Lg01UbzaiC/HD7WgvLXRWr7vsFGkF6vhMKBhIkfI9sQ9rclDPAXRoQwy5JoGNdMoa0UuojThYMIlaFtSoJVrXNhdsdEfdLFH;\n\t25:nGKdCTo56oOaCVm2E3AbOkAQW2Gawp1wyb/ZEh4MQ4B3i9xZzYqcYpUfvZdiikEtkltQby77h0wIvlIhvFgGJvXKElXer3V7y8ddWLMB7FBUchz0UmfHVI/aPP6XL5UBnZVF31GNTq7GlFnyZAjQQwVYlKWto2RrWpxeM41aPUBjVRdtTZiYcWy6i1PytdjnowvquDgZr2xGMoA9ek5ClpkWJ49dSb8CKPUDtb6uB1WLmzeco/gotsKPzlwA0PKq3dG2j1VDatI6azR9IIXhmvoJcXNUuwbTLkkLw+G1/0wTFksrvAOldCnzeUYiLfK4CrOAi78cnTgkgAy2jwcSDQ==;\n\t31:cfE5WPxHUaRL6CzYEyMn/ShTKJ3WixXMOT0LQnLAjn/DkRK2NXe4LUShHNrX67rrOaXjsauhEQf/NgCNSpDXxlWhwukvraP3BBGn06FXAgj4AK6h+jQN/AiwmNMuIui+FAvkPuDT/sQnkzGCSt2C1OmlVQmD1I5psDaZzdUoerXYBdvfpF5/AHMMUT50SVcJAHQRVz+rB0nW2u2+lErt9Kg6XTLNv+e5sF+SM7C5Ex8=",
            "1; DM5PR07MB3467;\n\t20:MbKN0d/MBORQzrZI1HoV3li6BFC+Ymwwdtmep9fpOTEWlOJ1dySN9io91KtGV8EQDPfQlWgB1xadOF/PYxP6jUEYoXr0XAI+tgwy7yBjN3/o/g0y0eT3v8C7Hdin3ZkF19ebklHmCN/PFHMujoVjr1wH1ljQ01avNf9cIlegdgH2/oB7MRNmIgLEox7+Y6Xc2HWGOFn1ydbg6atBmGVFFm4l/HRzN2JEy6qcLDy7+k7qUfTgwmZkB4GcPUaUCdxQtTILFE6HY3bNwBAAtQqoZd+Do+Ffn13DS6TF6pGGBlpUI7s8CMirGF9SIYNlz3YsE+P9UpBsinnu55unaL7KSjmwxcRZ6CdFlAIxI9f4zZwNMtLZNrG6pwLVA5B1QQxpddtRPnJgIvdIBdpdl0fHZTuMcgGEBR2gYLxRWMqKDqly34OPkKh+VPpjl6uuF4fIcQqDkB7yGUSUiBuwCcyGjt+tqAIKGjeKlzlwrzgEoWlsUw2i6DyS+c4+xgX2CZRRJbQkS5+pkj0UJzsafhrX6jeJw6N4Y83djC1vUWnY2lztPchfN/ZX4Gq2wx68iLV/DXaSusclxWoE3wyWmePObCk4cXSGR8aKBTHkcCoWxFs=;\n\t4:Yow8esBSF2qFwgrEUBQiI0t2++ESwRDj8t4+JDlxWD1V6jtPgebCFZlQ4JLr9O7iajG2sQckfFORByGA9CHM5p2JaUS4dUgJJ2MV/9rZWpN0w0INwYfNU+hGCdIkDedB8aSyXHiXXpdyDMH62XHtwxppkwVKUFmhM/A9/YEawH6iondrkcc/x4ipmpAyCehEtQI5DMG2unhel19cRWQeI4QCTnFrEE5d79GiV3yYKu/Jul3qZWl2R0+q+knDN0CYUZPkrOm8783jaFoaF9GAag==",
            "=?us-ascii?Q?1; DM5PR07MB3467;\n\t23:7J3QivzUlkmyRKrAYzwxM0C3jFVE0MjsLk/KsEj0u?=\n\tBf1mKwl8G+6wGOuLD+BVsyrKCh8Biz3bEwM3hBMICeBLc5ewLpdo1Rb6EHvCUK3+p36mfzYkh0EiWcZgGHJLLYDzWMGXrSNPa/qUYp0ISm5WsqmSVE3E82ejZvB/mfY73miQwo1sIpdPS4b4EDBKOQYV+Oe9Z3FyH2IThnXUO18ovcAtwfh3s28rAB67MgaxBSmoZj5R4jTYmRzxaSLqM5MQrkX6jVJNgssxMfqXM27gbsu8WbCxnWtik9lnNBtFoKfgCGrtBJOP/r8C2L3dwARxKgr0Ok6EB1tSJ8Bjp/ktIP4uYRpGqf50WzrrNeeNkVKtsitxgVVkffUw9MNXtmx8zSsHzolV2flQUNUbGWpnble3tt9EdnR9O8sBPsPqwlRHEjk89EvalpsvYAUFVt2+OHBxVtNhA0gY3HEF5dtLgvV2eTfYhvyWNPDgY88ZfKG3eR+1arFMF4Wh1cSAMVii7apXqOf48HcnOyTO1hl7Vlwz7vORaDlEddCM+UBEHGxzTL5pE6m3DeVWsi1JwaoVVda90/ehzt1LtG84QnH/Sy0vG/LjdyZ/GaXlzXZ0Cra8Q4EnUJLGyVqtLafx3xQv04eNEBhV4X0yBxUWXcq7RTYNSkkYj0hpJ5B8M4A+X/Tr+B9rn12/vNG8ytjyw9ZTNUJztH5dBa6fQ4Jm/HZgpBpo6TK10eo1WrTonziaGG88R5gF3GBjoOBKRDf42k9SWLldRroXEMk7l/5MNOQu+BvtgLyiP0nLwjH2ZJVZvBQkCooyxey0FIzdR5WfSiIecW8y58/bPd0LcJHweAYmUxUsCli754c4gfO535gpq93/Rt3hNQ7EcxfLcsvdL40b4iiEgpIL/WwyKEtTi3Hx9/QNCokn2AkhEYbymPp1YEcJl5k13hp8gb4PSKtIh+GB8mp2yJ7Ibex0w4Jl9gQ9reXUvKkVW6HdE2hM/S/pTMHaGU4mpEd3ekLb4PJ+th4VvUtU+l5fybHO2R/iUXxhd5E9fRq0sS4P2LXrTSQ0dNBSByHVRfYPScboU1R5u21Q4ucb8X3brwZ7K+npD3wzuXa5DCgg57LHmZIuShFN96cz2KK3cYP326Rz1D61/nnD7jhD2j0ytFOc9Krm+nIjmPHXWGAj8FvNAE7I5tUizOWkQxlZwZSx+jQGb5TeyVwBX1RioXIQto+rgYzqFz35EyHad+GqYU39NV4iv+cycYDkkHHkbbWlG/d8m1psdr3",
            "1; DM5PR07MB3467;\n\t6:OL8+QPkgbdg6ilDpjhhrE+pl+3MsCfQcgB3JANXQfU23l31odmZvLDEc7b5JbYQN+0D/jHBo1uFb8e6iG0KHGT/wqYOLcthshXVpAA6v1I4nKJNsa0W+fSMZBAdT1H7E4E4z0ZjHEBXy+KWKVoRc/JuMWu0ukO2bQl14XEN6UFgnV8AzoZ5s/gFEsNe0UtBOohNcs5DN1IMH9qCA1UDGrb/s5vzXg719/rLlGOnUeLhNGaQhHUcj5OwnPDJPhZuAWDl0wJ8/SUcpsHlco1xdjqEmwIQ+Ub5fVlUrnodCeh2AiEFIzriyW0S7YDtrJaJ7uvcvm9QzIU8S1SB8+hr+aeEwDYoJFMi7pm3p9LFCKjc=;\n\t5:eRWMw0bRHoJpyzlS92bVqSXVDyjm8MDQPuxyBj0cOfpMqdrGDOOO1vBuAl51pGfr/CGXF4oTtYHeceOqwfNurG3ZqdlPr3utpjE2Z5PP9cW0gY8n1qq4WoKC231ckKYWghyaGvVpZsxKdHJ5n7viqCXyrsIMhxUYHZzc2g6HZ0k=;\n\t24:cNfl+IkkDIRRjC0J/z3yXxiBlWnAjrPy7yNZQbMSAIASdUUHiZ5E2a0+817g9U4gUa1C7ZRviIXR+BR9yi47VVcW3Y4x8BaBrAHcuwRPH6s=;\n\t7:A9wTe4fTu/2mb0Yf40lXcNOZYQtkXFlGrWlZGoXx/GNCc1px0dgrZ/q5m0qyiTbDJRrnFxaSQaADpZVlXJgVyPeUZI0B+3zIxerxx3CxIQJM1Enny1QNOYsLiglPNAVOQ+h6llPro4WCIFYprUUfb3iM6hD0/mEZlsvZu4rSDiMq8o+UZmpC5exXOn56kp3Ay2fb1frg7cJs50pYB0Lm2gWVLv/iFzMgt9HFYsvhMY9jKFW6W2eXeFVwDznCRrIS"
        ],
        "X-MS-TrafficTypeDiagnostic": "DM5PR07MB3467:",
        "X-Microsoft-Antispam-PRVS": "<DM5PR07MB3467514103E1E9E76E75477680CB0@DM5PR07MB3467.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040501)(2401047)(8121501046)(5005006)(10201501046)(3231101)(944501161)(93006095)(3002001)(6041288)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(6072148)(201708071742011);\n\tSRVR:DM5PR07MB3467; BCL:0; PCL:0; RULEID:; SRVR:DM5PR07MB3467; ",
        "X-Forefront-PRVS": "0585417D7B",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(6069001)(346002)(366004)(396003)(39860400002)(39380400002)(376002)(189003)(199004)(6486002)(25786009)(2950100002)(386003)(6506007)(53936002)(42882006)(5009440100003)(4326008)(107886003)(6666003)(59450400001)(6512007)(16586007)(106356001)(316002)(105586002)(36756003)(478600001)(2906002)(47776003)(6116002)(76176011)(3846002)(1076002)(97736004)(66066001)(8676002)(51416003)(50466002)(48376002)(81156014)(5660300001)(68736007)(8936002)(575784001)(52116002)(16526019)(26005)(305945005)(1857600001)(72206003)(81166006)(50226002)(7736002)(42262002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3467; H:localhost.localdomain;\n\tFPR:; \n\tSPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Feb 2018 21:37:37.1463\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "19fa7950-d0d5-4598-d739-08d575858086",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM5PR07MB3467",
        "Subject": "[dpdk-dev] [PATCH 02/10] mempool/octeontx: probe timvf PCIe devices",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://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": "<https://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": "On Octeontx HW, each event timer device is enumerated as separate SRIOV VF\nPCIe device.\n\nIn order to expose as a event timer device:\nOn PCIe probe, the driver stores the information associated with the\nPCIe device and later when appliacation requests for a event timer device\nthrough `rte_event_timer_adapter_create` the driver infrastructure creates\nthe timer adapter with earlier probed PCIe VF devices.\n\nSigned-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>\n---\n drivers/mempool/octeontx/Makefile                  |   1 +\n drivers/mempool/octeontx/meson.build               |   1 +\n drivers/mempool/octeontx/octeontx_mbox.h           |   7 +\n drivers/mempool/octeontx/octeontx_timvf.c          | 145 +++++++++++++++++++++\n .../octeontx/rte_mempool_octeontx_version.map      |   3 +\n usertools/dpdk-devbind.py                          |   8 ++\n 6 files changed, 165 insertions(+)\n create mode 100644 drivers/mempool/octeontx/octeontx_timvf.c",
    "diff": "diff --git a/drivers/mempool/octeontx/Makefile b/drivers/mempool/octeontx/Makefile\nindex dfc373e62..a0547437a 100644\n--- a/drivers/mempool/octeontx/Makefile\n+++ b/drivers/mempool/octeontx/Makefile\n@@ -20,6 +20,7 @@ LIBABIVER := 1\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += octeontx_ssovf.c\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += octeontx_mbox.c\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += octeontx_fpavf.c\n+SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += octeontx_timvf.c\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_MEMPOOL) += rte_mempool_octeontx.c\n \n ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)\ndiff --git a/drivers/mempool/octeontx/meson.build b/drivers/mempool/octeontx/meson.build\nindex 1e894a56b..c938436c9 100644\n--- a/drivers/mempool/octeontx/meson.build\n+++ b/drivers/mempool/octeontx/meson.build\n@@ -4,6 +4,7 @@\n sources = files('octeontx_ssovf.c',\n \t\t'octeontx_mbox.c',\n \t\t'octeontx_fpavf.c',\n+\t\t'octeontx_timvf.c',\n \t\t'rte_mempool_octeontx.c'\n )\n \ndiff --git a/drivers/mempool/octeontx/octeontx_mbox.h b/drivers/mempool/octeontx/octeontx_mbox.h\nindex 1b056071a..7fcc9950f 100644\n--- a/drivers/mempool/octeontx/octeontx_mbox.h\n+++ b/drivers/mempool/octeontx/octeontx_mbox.h\n@@ -21,6 +21,11 @@ enum octeontx_ssovf_type {\n \tOCTEONTX_SSO_HWS,  /* SSO hardware workslot vf */\n };\n \n+struct octeontx_timvf_info {\n+\tuint16_t domain; /* Domain id */\n+\tuint8_t total_timvfs; /* Total timvf available in domain */\n+};\n+\n struct octeontx_mbox_hdr {\n \tuint16_t vfid;  /* VF index or pf resource index local to the domain */\n \tuint8_t coproc; /* Coprocessor id */\n@@ -32,5 +37,7 @@ int octeontx_ssovf_info(struct octeontx_ssovf_info *info);\n void *octeontx_ssovf_bar(enum octeontx_ssovf_type, uint8_t id, uint8_t bar);\n int octeontx_ssovf_mbox_send(struct octeontx_mbox_hdr *hdr,\n \t\tvoid *txdata, uint16_t txlen, void *rxdata, uint16_t rxlen);\n+int octeontx_timvf_info(struct octeontx_timvf_info *info);\n+void *octeontx_timvf_bar(uint8_t id, uint8_t bar);\n \n #endif /* __OCTEONTX_MBOX_H__ */\ndiff --git a/drivers/mempool/octeontx/octeontx_timvf.c b/drivers/mempool/octeontx/octeontx_timvf.c\nnew file mode 100644\nindex 000000000..b20743a33\n--- /dev/null\n+++ b/drivers/mempool/octeontx/octeontx_timvf.c\n@@ -0,0 +1,145 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2017 Cavium, Inc\n+ */\n+\n+#include <rte_eal.h>\n+#include <rte_io.h>\n+#include <rte_pci.h>\n+#include <rte_bus_pci.h>\n+\n+#include \"octeontx_mbox.h\"\n+#include \"octeontx_pool_logs.h\"\n+\n+#ifndef PCI_VENDOR_ID_CAVIUM\n+#define PCI_VENDOR_ID_CAVIUM\t\t\t(0x177D)\n+#endif\n+\n+#define PCI_DEVICE_ID_OCTEONTX_TIM_VF\t\t(0xA051)\n+#define TIM_MAX_RINGS\t\t\t\t(64)\n+\n+struct timvf_res {\n+\tuint16_t domain;\n+\tuint16_t vfid;\n+\tvoid *bar0;\n+\tvoid *bar2;\n+\tvoid *bar4;\n+};\n+\n+struct timdev {\n+\tuint8_t total_timvfs;\n+\tstruct timvf_res rings[TIM_MAX_RINGS];\n+};\n+\n+static struct timdev tdev;\n+\n+int\n+octeontx_timvf_info(struct octeontx_timvf_info *tinfo)\n+{\n+\tint i;\n+\tstruct octeontx_ssovf_info info;\n+\n+\tif (tinfo == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (!tdev.total_timvfs)\n+\t\treturn -ENODEV;\n+\n+\tif (octeontx_ssovf_info(&info) < 0)\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < tdev.total_timvfs; i++) {\n+\t\tif (info.domain != tdev.rings[i].domain) {\n+\t\t\tmbox_log_err(\"GRP error, vfid=%d/%d domain=%d/%d %p\",\n+\t\t\t\ti, tdev.rings[i].vfid,\n+\t\t\t\tinfo.domain, tdev.rings[i].domain,\n+\t\t\t\ttdev.rings[i].bar0);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t}\n+\n+\ttinfo->total_timvfs = tdev.total_timvfs;\n+\ttinfo->domain = info.domain;\n+\treturn 0;\n+}\n+\n+void*\n+octeontx_timvf_bar(uint8_t id, uint8_t bar)\n+{\n+\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n+\t\treturn NULL;\n+\n+\tif (id > tdev.total_timvfs)\n+\t\treturn NULL;\n+\n+\tswitch (bar) {\n+\tcase 0:\n+\t\treturn tdev.rings[id].bar0;\n+\tcase 4:\n+\t\treturn tdev.rings[id].bar4;\n+\tdefault:\n+\t\treturn NULL;\n+\t}\n+}\n+\n+static int\n+timvf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)\n+{\n+\tuint64_t val;\n+\tuint16_t vfid;\n+\tstruct timvf_res *res;\n+\n+\tRTE_SET_USED(pci_drv);\n+\n+\t/* For secondary processes, the primary has done all the work */\n+\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n+\t\treturn 0;\n+\n+\tif (pci_dev->mem_resource[0].addr == NULL ||\n+\t\t\tpci_dev->mem_resource[4].addr == NULL) {\n+\t\tmbox_log_err(\"Empty bars %p %p\",\n+\t\t\t\tpci_dev->mem_resource[0].addr,\n+\t\t\t\tpci_dev->mem_resource[4].addr);\n+\t\treturn -ENODEV;\n+\t}\n+\n+\tval = rte_read64((uint8_t *)pci_dev->mem_resource[0].addr + 0x100);\n+\tvfid = (val >> 23) & 0xff;\n+\tif (vfid >= TIM_MAX_RINGS) {\n+\t\tmbox_log_err(\"Invalid vfid(%d/%d)\", vfid, TIM_MAX_RINGS);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tres = &tdev.rings[tdev.total_timvfs];\n+\tres->vfid = vfid;\n+\tres->bar0 = pci_dev->mem_resource[0].addr;\n+\tres->bar2 = pci_dev->mem_resource[2].addr;\n+\tres->bar4 = pci_dev->mem_resource[4].addr;\n+\tres->domain = (val >> 7) & 0xffff;\n+\ttdev.total_timvfs++;\n+\trte_wmb();\n+\n+\tmbox_log_dbg(\"Domain=%d VFid=%d bar0 %p total_timvfs=%d\", res->domain,\n+\t\t\tres->vfid, pci_dev->mem_resource[0].addr,\n+\t\t\ttdev.total_timvfs);\n+\treturn 0;\n+}\n+\n+\n+static const struct rte_pci_id pci_timvf_map[] = {\n+\t{\n+\t\tRTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM,\n+\t\t\t\tPCI_DEVICE_ID_OCTEONTX_TIM_VF)\n+\t},\n+\t{\n+\t\t.vendor_id = 0,\n+\t},\n+};\n+\n+static struct rte_pci_driver pci_timvf = {\n+\t.id_table = pci_timvf_map,\n+\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_IOVA_AS_VA,\n+\t.probe = timvf_probe,\n+\t.remove = NULL,\n+};\n+\n+RTE_PMD_REGISTER_PCI(octeontx_timvf, pci_timvf);\ndiff --git a/drivers/mempool/octeontx/rte_mempool_octeontx_version.map b/drivers/mempool/octeontx/rte_mempool_octeontx_version.map\nindex fe8cdeca0..91e0a3a93 100644\n--- a/drivers/mempool/octeontx/rte_mempool_octeontx_version.map\n+++ b/drivers/mempool/octeontx/rte_mempool_octeontx_version.map\n@@ -5,5 +5,8 @@ DPDK_17.11 {\n \tocteontx_ssovf_bar;\n \tocteontx_ssovf_mbox_send;\n \n+\tocteontx_timvf_info;\n+\tocteontx_timvf_bar;\n+\n \tlocal: *;\n };\ndiff --git a/usertools/dpdk-devbind.py b/usertools/dpdk-devbind.py\nindex 18d938607..340643b70 100755\n--- a/usertools/dpdk-devbind.py\n+++ b/usertools/dpdk-devbind.py\n@@ -22,11 +22,14 @@\n               'SVendor': None, 'SDevice': None}\n cavium_pkx = {'Class': '08', 'Vendor': '177d', 'Device': 'a0dd,a049',\n               'SVendor': None, 'SDevice': None}\n+cavium_tim = {'Class': '08', 'Vendor': '177d', 'Device': 'a051',\n+              'SVendor': None, 'SDevice': None}\n \n network_devices = [network_class, cavium_pkx]\n crypto_devices = [encryption_class, intel_processor_class]\n eventdev_devices = [cavium_sso]\n mempool_devices = [cavium_fpa]\n+eventtimer_devices = [cavium_tim]\n \n # global dict ethernet devices present. Dictionary indexed by PCI address.\n # Each device within this is itself a dictionary of device properties\n@@ -565,6 +568,9 @@ def show_status():\n     if status_dev == \"mempool\" or status_dev == \"all\":\n         show_device_status(mempool_devices, \"Mempool\")\n \n+    if status_dev == \"event_timer\" or status_dev == \"all\":\n+        show_device_status(eventtimer_devices, \"Event Timer\")\n+\n def parse_args():\n     '''Parses the command-line arguments given by the user and takes the\n     appropriate action for each'''\n@@ -638,6 +644,7 @@ def do_arg_actions():\n             get_device_details(crypto_devices)\n             get_device_details(eventdev_devices)\n             get_device_details(mempool_devices)\n+            get_device_details(eventtimer_devices)\n         show_status()\n \n \n@@ -650,6 +657,7 @@ def main():\n     get_device_details(crypto_devices)\n     get_device_details(eventdev_devices)\n     get_device_details(mempool_devices)\n+    get_device_details(eventtimer_devices)\n     do_arg_actions()\n \n if __name__ == \"__main__\":\n",
    "prefixes": [
        "dpdk-dev",
        "02/10"
    ]
}