get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 19882,
    "url": "http://patches.dpdk.org/api/patches/19882/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1485172803-17288-11-git-send-email-hemant.agrawal@nxp.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": "<1485172803-17288-11-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1485172803-17288-11-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-01-23T11:59:40",
    "name": "[dpdk-dev,PATCHv6,10/33] bus/fslmc: add vfio support",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "99472f5b7d0e32f0b404201be7087152009085b9",
    "submitter": {
        "id": 477,
        "url": "http://patches.dpdk.org/api/people/477/?format=api",
        "name": "Hemant Agrawal",
        "email": "hemant.agrawal@nxp.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/1485172803-17288-11-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/19882/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/19882/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 AC276F94A;\n\tMon, 23 Jan 2017 13:01:20 +0100 (CET)",
            "from NAM01-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam01on0063.outbound.protection.outlook.com [104.47.32.63])\n\tby dpdk.org (Postfix) with ESMTP id 860F758CD\n\tfor <dev@dpdk.org>; Mon, 23 Jan 2017 13:00:50 +0100 (CET)",
            "from BN6PR03CA0033.namprd03.prod.outlook.com (10.175.124.19) by\n\tBN6PR03MB2465.namprd03.prod.outlook.com (10.168.223.19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.1.860.13; Mon, 23 Jan 2017 12:00:47 +0000",
            "from BY2FFO11FD044.protection.gbl (2a01:111:f400:7c0c::169) by\n\tBN6PR03CA0033.outlook.office365.com (2603:10b6:404:10c::19) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.860.13 via\n\tFrontend Transport; Mon, 23 Jan 2017 12:00:47 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11FD044.mail.protection.outlook.com (10.1.14.229) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.803.8\n\tvia Frontend Transport; Mon, 23 Jan 2017 12:00:46 +0000",
            "from bf-netperf1.idc ([10.232.134.28])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv0NC07eY019311; Mon, 23 Jan 2017 05:00:43 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed)\n\theader.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com;\n\tnxp.com; \n\tdkim=none (message not signed) header.d=none;",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Hemant Agrawal <hemant.agrawal@nxp.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<thomas.monjalon@6wind.com>, <bruce.richardson@intel.com>,\n\t<shreyansh.jain@nxp.com>, <john.mcnamara@intel.com>,\n\t<ferruh.yigit@intel.com>, <jerin.jacob@caviumnetworks.com>,\n\tHemant Agrawal <hemant.agrawal@nxp.com>",
        "Date": "Mon, 23 Jan 2017 17:29:40 +0530",
        "Message-ID": "<1485172803-17288-11-git-send-email-hemant.agrawal@nxp.com>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1485172803-17288-1-git-send-email-hemant.agrawal@nxp.com>",
        "References": "<1484832240-2048-1-git-send-email-hemant.agrawal@nxp.com>\n\t<1485172803-17288-1-git-send-email-hemant.agrawal@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131296464464566765;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(10009020)(6009001)(7916002)(336005)(39840400002)(39400400002)(39860400002)(39850400002)(39410400002)(39380400002)(39450400003)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(77096006)(36756003)(54906002)(81156014)(81166006)(5660300001)(4326007)(38730400001)(189998001)(50466002)(8676002)(50226002)(47776003)(626004)(8936002)(575784001)(86362001)(110136003)(85426001)(2906002)(48376002)(356003)(97736004)(8656002)(305945005)(68736007)(92566002)(33646002)(2351001)(5003940100001)(104016004)(106466001)(50986999)(2950100002)(6916009)(105606002)(76176999)(53936002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR03MB2465;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BY2FFO11FD044;\n\t1:dsUpTGrXkgrvql4y1aOFQkJcNCO1S2qIpfVJBuXBh8QxUaTF1/TVr1EJgCFbQbpK2PsFybdtWT+6Ki7pXMOZf6lUgyOgI5Rrhd/9PXTHU2mbA7ptw7a29BD6lz+qhRa6q58GeLakomhZhDFIMg/XTZ6y2LgPaZh1EnH/VNgPesy6HxU+iBX3WOIROmh3rVJePFFWj82XmE/bp+FtrasOncIeLh3+B3xyZaW7iG1AGbsu7EZYkIgA6nI08DD/ig3ur9Qxwxrbv7kyAumCg4MzZGGbX+YaLYkxvxUnIzMHa/kAg29Kjf+WWXIf2qAUPZaSIVIAO4KA6/tfD9jOrkTlTIHFAaxF38hQ9OyDvQBQ929lvveJw826/dPNwwlmoTUMG6dEShCSt+wXF8P2+ZekzbQazrtXwGTP13k1DoAQeWws0HPgNbJeo9viXqFpBEMauIauLLNW6rVsCKnv89Tvq+kn5Q3w7tEDQ4I2LLN5PMykLQUvfm/99w/cjldZd6za1+etRa+H8PYXLHzmUU4kQSMVQPtzyhD2TO3Awx9HDe2L46eo6J5yMWMwgZ7n0RKuHogpcgF63OJvzvhjL31lulQxuTTg5bT78jxauYngjHsWE5BQzMq7VDUUlbO7JlZ5C2O/VEd6SRUReNHFXVILQeqlbhQpAIK8NENYc3cz5bO4FifnqZrfBHzzeHw2oYfAXs6sTApkBGX9SFmnd1LQTb+spNK8GXIMjrZQCLFEQmIP12oHnEI3dbcy7XDYSAGE",
            "1; BN6PR03MB2465;\n\t3:ZVNRJdTz+u5rDDQ5FuFeHO1+JpsrpxkR6XsqMULuoGSwckWQQjHQEPau4q4q5/yoGJiSUGrQnckxtaEODbDfyFB4is8ZhZLuABK1gqKxcRtyUB2I7gvh5oyEupAt7RKZnHIS067KeL491/KXpYlTdK8BFLkuk3PWqBEuXWon1QMpyal2SODRLrXaVX2Ct2oYFjmqUDCtXQkOfuWbJA9C3sH1SfXWkgjFdqGL4q644V2IxeUYHJNAfSOA935En1xYsBrqS+XDh2Xqw5/uGmX9A/89AmxHJJRtd0IolOvnCbKX+pO7rX/TB/1QYHFTAWrPbbRbSEa3e2iy4papwxwk0KayFXBfJuIqqAu/duoJjjVQ4r3KtrJbHiPBoeYqT+uK;\n\t25:xLTbW48GP8CHDum1pIeq5Xz9/W7QfMPUDGzEWdsR08lg+T9yNaAYlJ61uzkTpZjH2Gox7/iSUi8LjVCUbmlBFq/SZ+w9kj3jL50oF+U8fr2S8ciJtMhR/8mFf/haFoDpNwX5m4SzoS4llHkSTNzXmVpQslNTi9jPs4x5lml5kwibnVKuiSDpfGfH9XrGclxFV7bA/rZJ+wsZ0PQP+WpsvKyYJv15W6dmsf9v/94BZrKmM9GIVSojNBS9k9UlBPr6R7lgqR6owZuRy+GJFoBYMgtEsljvEHAu+TzJpYBXtnYSlgzXBiT+8rrToURW4Q1+o5Sej6Qfnr1wFlErkkF0aibBWNdpj9+74nmOC+ctlVnGlAbCzdCw1z+cqSRWOL1vNL4NJUBcrUiyvZYe8lTcJtra2JMWSmbjTGSw0dLPfAPTEGi0/6FXHVzJ+Sj2rMqpwnS0ew9gh8MSndFCzFuqEA==",
            "1; BN6PR03MB2465;\n\t31:p8u9clYCY8n8yvjyG7U4t/QR4CNFujYiz/af4gZJY1W1kDk3zlkLTevUdZQTYJDt91GHRC+tKImf6DqJEIb2MuHO/GnmlKw/GgLzCLSh2Mwj2TtWyTXRQ550yB03/IBFs5kPxIcfEv40isnksYUUh6Xe+hlhUpQfGSHy88/IEjPjWrXNT1JzRGFykZdtLnXeIGzcEYLe9GtHV6+o91Y0AB3DQfbw6CXp5B6qvY/Et0FPIajhn+mpznXEnMUt8PwQg5/NIQRp3t9+4h37hF4Fyg==",
            "1; BN6PR03MB2465;\n\t4:QnWizyEIM5SR+gkdon95aY3q7XfpRUXdIhuK4Ik7DwosvIdhJhyeyQwDi0vjuPhFUsnuXFJmJBRe9+OpTMd2tUFjHXc4qZNzp3uddCXldniD1YkA025a1V3GVf9i5usW0UHZT5/C+bVQ6UOmYPlZrkAE2FrTpsH/2L1J5pBECaZKrKVFhH6S47yi7Wc9mJ2fYe+aVoE4Pq+E6W9SuATJ1IUnVnu3KsfsY/jrjMlz8NS/D/z+musYA8cnaAkL9ThbH30HVzremhZGOcScEo5Otx3bDYLOikKpJhzpPQgGlEXPbAF3ZZYNMMztxfh5hnKcbMCBPxlPfp9Q9eZMOO17s65oJu93aRI7YABarBu9U2FoEbw/84+iUwmulC6QTGYNc//GtQtP72ylJJOfCBcMOyUlYP6nac3O48/OO5BdvkpnczUICSDtGLpCKKmALX6gU2Jxp/PkyVVgJ/lZR2NzC/Rd/muW0aTOlduhwANb2e4DLs3C4r60J0OnPzwQjcDNxKNQiJqGbqwYDEZexJK0toonPCIJSaGM8guErBWHNBSSNiD2Cpy5xQ44g9O2JrJ2kE2ZfApvWgaseIkpzggSISNAY/Ct0NtlyBSAYRNe0nTdRY+iStrverVf3Kmkpr+Kq4u6C95GTpwzvplxWCrAZHd8QBSs4MFiQ/3k1ktzbMQyPkD6QprzaZsIq1AhIX8/772igtzSOqQU8IevSoXu1qRS/mUTJrVmYoYwwmz008rhYr/X1H2uAdRjlfZmc33M2pLaaweV0O4P58+XcqgXirEvbAclqW38M9KLPhy5DPI7SFXVa0K78JAb7jYP9GWS",
            "=?us-ascii?Q?1; BN6PR03MB2465;\n\t23:8zQ/BoS+UIcnB2Z43i+R1Y55DxVHsVTNn/Kra+j5q?=\n\tOrT+qgksridHreBS1JwCfgAocNrky2lbmDK9c4EvlZOXYIJYAT/ZLvVQUESxRxoXirdHh86njJ2Xt9BEX8sHEkgKf6i8YGDvy0CabqN0RjXX2nBApqgP3MecgFcNmPhDoUaD/wXvmVOJe9WLK8MY9gHKo9VDTIaZcIptktOsAU/dKmcolh9dt2VW42deI7b3/E2IRnkMszGbaz9ANs2oORUhcDPD192eWqQRpckHtT/VtRtXjP5f4CXA1himkKdlgx+Afa7H+d4T4/99R3uaLSDYH7qaZKZOhj0V/4a1TKuBdi2r3Zhyj1w8boSt8oI+qfP0bmk0M8pU4hyQA/IsdF4kw08QLzx4Ac8XdIMh1PiMiD78kzs0leuu6fZcanXz/EiPDepn0+cEGfqBR/B6FQnk6ku6BrImDKerEpZ1xQEABiRy5enJSytsZnsVfkD7wQiW80iHqjmS7dvtkh4znV+Q2UY/2XtvOCjcGrzG/G0rQPiOgqlOHvsMsmLgqcloAesQrBoXPW+/ZgNt20y1pN81DMk9oz8GewGTZ0xNFE7XcODuO8bl79TB9pTqJq+WZNSKhsv5YthSp1tctR2K3+Y4+J24Hn2PdFvSdz6y37oSFZ25+A9w++3NZnAlOuM8mLsUPrz8wnqC3JqQOpv5NJPESmW8+j1744igYOtvcayalbZ2ddBJvxIj+IMD7jGYXYS2q9l4Nbxt2JvyBN55N7aBxGvCVVXWrZzL3Dwv0XOqu4mEPJtf5BNgQMGB6FzRxq63puAy44IcQzy3IJr/mr+Z70grHTO9k8pIksKhkTxEEd4guUchgFVEqFVAoT2wX1yeQL5gmBgWeZgspKgkZHBvwGpnL8fNMDvogY6IP0r+ZyMgsokC/Ma09cs19Fn9A3TmPtWhyD6QL4TZOEbTMxBOThIebwlJbLMTQhjpSQLolK6vO5qT46n4gYynoHqvoSTVW/ZewYcgmq1o2GJL21B0ojITxdRiXVoPZCAX5xhvGmBi14OWk5E0j14foqQpod3ibmAlpJIg+kdhIe1QNCeQc/tX4uQXj/vUxby5jIp3WwNcdlhEUGlRv9drTrNodNlYEXP9LLzo51VqClrtrTiVi5T/ivx++ULlWyy/sUhXDE/sQoNSSrujE6w7Mi29+ZhGtcXm1RDrs1pD9f2zrenfKb3143BQdsUzK4anvnzf3Db08hvUEhOscZOPyHGbm3I4sx+oVVSu538EnRonJFUC4d1gpI0VpsQxJaf8YM5cXKKO17e7DWugyifmMsW/Bg=",
            "1; BN6PR03MB2465;\n\t6:2s9w+2WJjauB5W4uLipFYuZzLx1gLGgP/uQlERADwz9N3Xhz7pIUk+qVez/NB8b15HDWIWoqrwoDKcRcn79v7p4ZU7WSS9IheqxHPmObuQzrOsNo2P6bv41wQuyQwyd7R8s1XVwstpKvZjOLVSVgMRpiirv86UCWJeHbttySFPdfWcraeyOGvac+tcF1L9uZhfuaBndXyROcZWT1iBKwE1Hp4bZRGP2Kjz/kGRwNCGGLxZ+lkeYnoax3qXR366/gNUQ2MSc9q0kb7lfW6H6M1xePFIif2P+IDSfibuGhabgNisNmVOo3Qq/S9W/w2WI8aIfVBjOdoi9TuodcIr0jRRRIbbIl0kFrXymlbCZI3CnfPLOgqoeCtTzF3jWBTpYNhASc/YIXGxm7Y2deXG0NwOmW6UE/lgigvFyhhWkudaZdbzx7ZQexHTUtLTgDKj68;\n\t5:jKierMcRwQccmaP55uhPYVkm5uOWYOuXyHiJtq5FEnHLLb6cKqIEown5Lsp2GOVzN6id1I99p1Mwa2aa3uovPvHyp8RNNGrw5PNCZo7h1LmGWDHmMJ6SKUczbQ5rho2l7iyiqwjHPw3vjeueNx0+XNVF6tL+YxfQ4fsVZLBYnSf+dGNR6CEerlBCHZu8uNoU;\n\t24:AmfQFdJHxF3LDYfvXuHl/dyzYw/ps1oAuYpO5hqDRWI9avsl/gLht2VXcVjDW0x1ukY7GPJXwrB3PFDJQdYk8YrXRXB42KvRyPb6GYDA/Ug=",
            "1; BN6PR03MB2465;\n\t7:h08dW3ywSgpM57nDAigM7oI5iED430G51AoEVAXTN+BG6daNVkfboYd6HsHOfoOes1RNIwrOqXTYrLs2CqDvl2kZkmT6xv3nv1UDFUsoDjA56qlvjzDGDhgEbf5EELR1JbPcV8p0tNRQpRZoA40w9+nuymI2m2sXnvdp2sscY4TjJrJuCFTdmSLRYvtyW/ofq49no3UEwMO11+0YQ9WfFHuxAXVGfzIzmQiEXusJeJ4vqsvrZIn1R/8Y5GNUQND0QUoJf9F9CjJ8LO2p8xkxYPUgUaWK1w8x1K1PjsS1Ec2yJGlSLWgzoFyoUySTmoAPr2Lxn354oEfXsVQQeJfPLO91gQCSaHbLcvSuFDAVTPRESah/VqZYyFLBxxz7zG1d+VTJE9JOSOsaIRDBP4lEq+LFs5N3+92LSWD19rju5JpYP2n20GYktgcR0JCRN3jWLItIXtUvHdV5a+T1s/Dj+Q=="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-Office365-Filtering-Correlation-Id": "108243fa-a226-4a4c-d9ed-08d443877723",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:BN6PR03MB2465; ",
        "X-Microsoft-Antispam-PRVS": "<BN6PR03MB24656D3F59B09DB1E0156E7F89720@BN6PR03MB2465.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684)(21532816269658); ",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6095060)(601004)(2401047)(13023025)(13017025)(13015025)(13024025)(13018025)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6096035)(20161123561025)(20161123559025)(20161123556025)(20161123563025)(20161123565025);\n\tSRVR:BN6PR03MB2465; BCL:0; PCL:0; RULEID:(400006); SRVR:BN6PR03MB2465;",
        "X-Forefront-PRVS": "0196A226D1",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "23 Jan 2017 12:00:46.2538\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[tx30smr01.am.freescale.net]",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BN6PR03MB2465",
        "Subject": "[dpdk-dev] [PATCHv6 10/33] bus/fslmc: add vfio support",
        "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": "Add support for using VFIO for dpaa2 based fsl-mc bus.\n\nThere are some differences in the way vfio used for fsl-mc bus\nfrom the eal vfio.\n - The scanning of bus for individual objects on the basis of\n   the DPRC container.\n - The use and mapping of MC portal for object access\n\nWith the evolution of bus model, they canbe further aligned with\neal vfio code.\n\nSigned-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\n drivers/bus/fslmc/Makefile                  |   2 +\n drivers/bus/fslmc/fslmc_bus.c               |  10 +\n drivers/bus/fslmc/fslmc_vfio.c              | 450 ++++++++++++++++++++++++++++\n drivers/bus/fslmc/fslmc_vfio.h              |  74 +++++\n drivers/bus/fslmc/rte_bus_fslmc_version.map |   1 +\n 5 files changed, 537 insertions(+)\n create mode 100644 drivers/bus/fslmc/fslmc_vfio.c\n create mode 100644 drivers/bus/fslmc/fslmc_vfio.h",
    "diff": "diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile\nindex 4a118a3..7cccc0e 100644\n--- a/drivers/bus/fslmc/Makefile\n+++ b/drivers/bus/fslmc/Makefile\n@@ -41,6 +41,7 @@ CFLAGS += \"-Wno-strict-aliasing\"\n \n CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc\n CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/mc\n+CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal\n \n # versioning export map\n EXPORT_MAP := rte_bus_fslmc_version.map\n@@ -55,6 +56,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += \\\n         mc/dpio.c \\\n         mc/mc_sys.c\n \n+SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += fslmc_vfio.c\n SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += fslmc_bus.c\n \n # library dependencies\ndiff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c\nindex 8a4f519..ee794e7 100644\n--- a/drivers/bus/fslmc/fslmc_bus.c\n+++ b/drivers/bus/fslmc/fslmc_bus.c\n@@ -42,6 +42,7 @@\n #include <rte_ethdev.h>\n \n #include \"rte_fslmc.h\"\n+#include \"fslmc_vfio.h\"\n \n #define FSLMC_BUS_LOG(level, fmt, args...) \\\n \tRTE_LOG(level, EAL, \"%s(): \" fmt \"\\n\", __func__, ##args)\n@@ -51,6 +52,15 @@\n static int\n rte_fslmc_scan(void)\n {\n+\tif (fslmc_vfio_setup_group()) {\n+\t\tFSLMC_BUS_LOG(ERR, \"fslmc: Unable to setup VFIO\");\n+\t\treturn -1;\n+\t}\n+\tif (fslmc_vfio_process_group()) {\n+\t\tFSLMC_BUS_LOG(ERR, \"fslmc: Unable to setup devices\");\n+\t\treturn -1;\n+\t}\n+\tRTE_LOG(INFO, EAL, \"fslmc: Bus scan completed\\n\");\n \treturn 0;\n }\n \ndiff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c\nnew file mode 100644\nindex 0000000..73db595\n--- /dev/null\n+++ b/drivers/bus/fslmc/fslmc_vfio.c\n@@ -0,0 +1,450 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright (c) 2015-2016 Freescale Semiconductor, Inc. All rights reserved.\n+ *   Copyright (c) 2016 NXP. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Freescale Semiconductor, Inc nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include <unistd.h>\n+#include <stdio.h>\n+#include <sys/types.h>\n+#include <string.h>\n+#include <stdlib.h>\n+#include <fcntl.h>\n+#include <errno.h>\n+#include <sys/ioctl.h>\n+#include <sys/stat.h>\n+#include <sys/types.h>\n+#include <sys/mman.h>\n+#include <sys/vfs.h>\n+#include <libgen.h>\n+#include <dirent.h>\n+#include <sys/eventfd.h>\n+\n+#include <rte_mbuf.h>\n+#include <rte_ethdev.h>\n+#include <rte_malloc.h>\n+#include <rte_memcpy.h>\n+#include <rte_string_fns.h>\n+#include <rte_cycles.h>\n+#include <rte_kvargs.h>\n+#include <rte_dev.h>\n+#include <rte_ethdev.h>\n+#include <rte_bus.h>\n+\n+#include \"rte_fslmc.h\"\n+#include \"fslmc_vfio.h\"\n+\n+#define VFIO_MAX_CONTAINERS\t1\n+\n+#define FSLMC_VFIO_LOG(level, fmt, args...) \\\n+\tRTE_LOG(level, EAL, \"%s(): \" fmt \"\\n\", __func__, ##args)\n+\n+/** Pathname of FSL-MC devices directory. */\n+#define SYSFS_FSL_MC_DEVICES \"/sys/bus/fsl-mc/devices\"\n+\n+/* Number of VFIO containers & groups with in */\n+static struct fslmc_vfio_group vfio_groups[VFIO_MAX_GRP];\n+static struct fslmc_vfio_container vfio_containers[VFIO_MAX_CONTAINERS];\n+static int container_device_fd;\n+void *(*rte_mcp_ptr_list);\n+static uint32_t mcp_id;\n+\n+static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)\n+{\n+\tstruct fslmc_vfio_container *container;\n+\tint i, fd, ret;\n+\n+\t/* Try connecting to vfio container if already created */\n+\tfor (i = 0; i < VFIO_MAX_CONTAINERS; i++) {\n+\t\tcontainer = &vfio_containers[i];\n+\t\tif (!ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER,\n+\t\t\t   &container->fd)) {\n+\t\t\tFSLMC_VFIO_LOG(INFO, \"Container pre-exists with\"\n+\t\t\t\t    \" FD[0x%x] for this group\",\n+\t\t\t\t    container->fd);\n+\t\t\tvfio_group->container = container;\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\n+\t/* Opens main vfio file descriptor which represents the \"container\" */\n+\tfd = vfio_get_container_fd();\n+\tif (fd < 0) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"Failed to open VFIO container\");\n+\t\treturn -errno;\n+\t}\n+\n+\t/* Check whether support for SMMU type IOMMU present or not */\n+\tif (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU)) {\n+\t\t/* Connect group to container */\n+\t\tret = ioctl(vfio_group->fd, VFIO_GROUP_SET_CONTAINER, &fd);\n+\t\tif (ret) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"Failed to setup group container\");\n+\t\t\tclose(fd);\n+\t\t\treturn -errno;\n+\t\t}\n+\n+\t\tret = ioctl(fd, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU);\n+\t\tif (ret) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"Failed to setup VFIO iommu\");\n+\t\t\tclose(fd);\n+\t\t\treturn -errno;\n+\t\t}\n+\t} else {\n+\t\tFSLMC_VFIO_LOG(ERR, \"No supported IOMMU available\");\n+\t\tclose(fd);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tcontainer = NULL;\n+\tfor (i = 0; i < VFIO_MAX_CONTAINERS; i++) {\n+\t\tif (vfio_containers[i].used)\n+\t\t\tcontinue;\n+\t\tFSLMC_VFIO_LOG(DEBUG, \"Unused container at index %d\", i);\n+\t\tcontainer = &vfio_containers[i];\n+\t}\n+\tif (!container) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"No free container found\");\n+\t\tclose(fd);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\tcontainer->used = 1;\n+\tcontainer->fd = fd;\n+\tcontainer->group_list[container->index] = vfio_group;\n+\tvfio_group->container = container;\n+\tcontainer->index++;\n+\treturn 0;\n+}\n+\n+int vfio_dmamap_mem_region(uint64_t vaddr,\n+\t\t\t   uint64_t iova,\n+\t\t\t   uint64_t size)\n+{\n+\tstruct fslmc_vfio_group *group;\n+\tstruct vfio_iommu_type1_dma_map dma_map = {\n+\t\t.argsz = sizeof(dma_map),\n+\t\t.flags = VFIO_DMA_MAP_FLAG_READ | VFIO_DMA_MAP_FLAG_WRITE,\n+\t};\n+\n+\tdma_map.vaddr = vaddr;\n+\tdma_map.size = size;\n+\tdma_map.iova = iova;\n+\n+\t/* SET DMA MAP for IOMMU */\n+\tgroup = &vfio_groups[0];\n+\tif (ioctl(group->container->fd, VFIO_IOMMU_MAP_DMA, &dma_map)) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"VFIO_IOMMU_MAP_DMA (errno = %d)\", errno);\n+\t\treturn -1;\n+\t}\n+\treturn 0;\n+}\n+\n+static int64_t vfio_map_mcp_obj(struct fslmc_vfio_group *group, char *mcp_obj)\n+{\n+\tint64_t v_addr = (int64_t)MAP_FAILED;\n+\tint32_t ret, mc_fd;\n+\n+\tstruct vfio_device_info d_info = { .argsz = sizeof(d_info) };\n+\tstruct vfio_region_info reg_info = { .argsz = sizeof(reg_info) };\n+\n+\t/* getting the mcp object's fd*/\n+\tmc_fd = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, mcp_obj);\n+\tif (mc_fd < 0) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"error in VFIO get device %s fd from group\"\n+\t\t\t    \" %d\", mcp_obj, group->fd);\n+\t\treturn v_addr;\n+\t}\n+\n+\t/* getting device info*/\n+\tret = ioctl(mc_fd, VFIO_DEVICE_GET_INFO, &d_info);\n+\tif (ret < 0) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"error in VFIO getting DEVICE_INFO\");\n+\t\tgoto MC_FAILURE;\n+\t}\n+\n+\t/* getting device region info*/\n+\tret = ioctl(mc_fd, VFIO_DEVICE_GET_REGION_INFO, &reg_info);\n+\tif (ret < 0) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"error in VFIO getting REGION_INFO\");\n+\t\tgoto MC_FAILURE;\n+\t}\n+\n+\tFSLMC_VFIO_LOG(DEBUG, \"region offset = %llx  , region size = %llx\",\n+\t\t     reg_info.offset, reg_info.size);\n+\n+\tv_addr = (uint64_t)mmap(NULL, reg_info.size,\n+\t\tPROT_WRITE | PROT_READ, MAP_SHARED,\n+\t\tmc_fd, reg_info.offset);\n+\n+MC_FAILURE:\n+\tclose(mc_fd);\n+\n+\treturn v_addr;\n+}\n+\n+/* Following function shall fetch total available list of MC devices\n+ * from VFIO container & populate private list of devices and other\n+ * data structures\n+ */\n+int fslmc_vfio_process_group(void)\n+{\n+\tstruct fslmc_vfio_device *vdev;\n+\tstruct vfio_device_info device_info = { .argsz = sizeof(device_info) };\n+\tchar *temp_obj, *object_type __rte_unused, *mcp_obj, *dev_name;\n+\tint32_t object_id, i, dev_fd;\n+\tDIR *d;\n+\tstruct dirent *dir;\n+\tchar path[PATH_MAX];\n+\tint64_t v_addr;\n+\tint ndev_count;\n+\tstruct fslmc_vfio_group *group = &vfio_groups[0];\n+\tstatic int process_once;\n+\n+\t/* if already done once */\n+\tif (process_once) {\n+\t\tFSLMC_VFIO_LOG(DEBUG, \"Already scanned once - re-scan \"\n+\t\t\t    \"not supported\");\n+\t\treturn 0;\n+\t}\n+\tprocess_once = 0;\n+\n+\tsprintf(path, \"/sys/kernel/iommu_groups/%d/devices\", group->groupid);\n+\n+\td = opendir(path);\n+\tif (!d) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"Unable to open directory %s\", path);\n+\t\treturn -1;\n+\t}\n+\n+\t/*Counting the number of devices in a group and getting the mcp ID*/\n+\tndev_count = 0;\n+\tmcp_obj = NULL;\n+\twhile ((dir = readdir(d)) != NULL) {\n+\t\tif (dir->d_type == DT_LNK) {\n+\t\t\tndev_count++;\n+\t\t\tif (!strncmp(\"dpmcp\", dir->d_name, 5)) {\n+\t\t\t\tif (mcp_obj)\n+\t\t\t\t\tfree(mcp_obj);\n+\t\t\t\tmcp_obj = malloc(sizeof(dir->d_name));\n+\t\t\t\tif (!mcp_obj) {\n+\t\t\t\t\tFSLMC_VFIO_LOG(ERR, \"mcp obj:Unable to\"\n+\t\t\t\t\t\t    \" allocate memory\");\n+\t\t\t\t\treturn -ENOMEM;\n+\t\t\t\t}\n+\t\t\t\tstrcpy(mcp_obj, dir->d_name);\n+\t\t\t\ttemp_obj = strtok(dir->d_name, \".\");\n+\t\t\t\ttemp_obj = strtok(NULL, \".\");\n+\t\t\t\tsscanf(temp_obj, \"%d\", &mcp_id);\n+\t\t\t}\n+\t\t}\n+\t}\n+\tclosedir(d);\n+\n+\tif (!mcp_obj) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"DPAA2 MCP Object not Found\");\n+\t\treturn -ENODEV;\n+\t}\n+\tRTE_LOG(INFO, EAL, \"fslmc: DPRC contains = %d devices\\n\", ndev_count);\n+\n+\t/* Allocate the memory depends upon number of objects in a group*/\n+\tgroup->vfio_device = (struct fslmc_vfio_device *)malloc(ndev_count *\n+\t\t\t     sizeof(struct fslmc_vfio_device));\n+\tif (!(group->vfio_device)) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"vfio device: Unable to allocate memory\\n\");\n+\t\tfree(mcp_obj);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\t/* Allocate memory for MC Portal list */\n+\trte_mcp_ptr_list = malloc(sizeof(void *) * 1);\n+\tif (!rte_mcp_ptr_list) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"portal list: Unable to allocate memory!\");\n+\t\tfree(mcp_obj);\n+\t\tgoto FAILURE;\n+\t}\n+\n+\tv_addr = vfio_map_mcp_obj(group, mcp_obj);\n+\tfree(mcp_obj);\n+\tif (v_addr == (int64_t)MAP_FAILED) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"Error mapping region (errno = %d)\", errno);\n+\t\tgoto FAILURE;\n+\t}\n+\n+\tFSLMC_VFIO_LOG(DEBUG, \"DPAA2 MC has VIR_ADD = %ld\", v_addr);\n+\n+\trte_mcp_ptr_list[0] = (void *)v_addr;\n+\n+\td = opendir(path);\n+\tif (!d) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"Unable to open %s Directory\", path);\n+\t\tgoto FAILURE;\n+\t}\n+\n+\ti = 0;\n+\tFSLMC_VFIO_LOG(DEBUG, \"DPAA2 - Parsing devices:\");\n+\t/* Parsing each object and initiating them*/\n+\twhile ((dir = readdir(d)) != NULL) {\n+\t\tif (dir->d_type != DT_LNK)\n+\t\t\tcontinue;\n+\t\tif (!strncmp(\"dprc\", dir->d_name, 4) ||\n+\t\t    !strncmp(\"dpmcp\", dir->d_name, 5))\n+\t\t\tcontinue;\n+\t\tdev_name = malloc(sizeof(dir->d_name));\n+\t\tif (!dev_name) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"name: Unable to allocate memory\");\n+\t\t\tgoto FAILURE;\n+\t\t}\n+\t\tstrcpy(dev_name, dir->d_name);\n+\t\tobject_type = strtok(dir->d_name, \".\");\n+\t\ttemp_obj = strtok(NULL, \".\");\n+\t\tsscanf(temp_obj, \"%d\", &object_id);\n+\t\tFSLMC_VFIO_LOG(DEBUG, \" - %s \", dev_name);\n+\n+\t\t/* getting the device fd*/\n+\t\tdev_fd = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, dev_name);\n+\t\tif (dev_fd < 0) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"VFIO_GROUP_GET_DEVICE_FD error\"\n+\t\t\t\t    \" Device fd: %s, Group: %d\",\n+\t\t\t\t    dev_name, group->fd);\n+\t\t\tfree(dev_name);\n+\t\t\tgoto FAILURE;\n+\t\t}\n+\n+\t\tfree(dev_name);\n+\t\tvdev = &group->vfio_device[group->object_index++];\n+\t\tvdev->fd = dev_fd;\n+\t\tvdev->index = i;\n+\t\ti++;\n+\t\t/* Get Device inofrmation */\n+\t\tif (ioctl(vdev->fd, VFIO_DEVICE_GET_INFO, &device_info)) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"DPAA2 VFIO_DEVICE_GET_INFO fail\");\n+\t\t\tgoto FAILURE;\n+\t\t}\n+\t}\n+\tclosedir(d);\n+\n+\treturn 0;\n+\n+FAILURE:\n+\tfree(group->vfio_device);\n+\tgroup->vfio_device = NULL;\n+\treturn -1;\n+}\n+\n+int fslmc_vfio_setup_group(void)\n+{\n+\tstruct fslmc_vfio_group *group = NULL;\n+\tint groupid;\n+\tint ret, i;\n+\tchar *container;\n+\tstruct vfio_group_status status = { .argsz = sizeof(status) };\n+\n+\t/* if already done once */\n+\tif (container_device_fd)\n+\t\treturn 0;\n+\n+\tcontainer = getenv(\"DPRC\");\n+\n+\tif (container == NULL) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"VFIO container not set in env DPRC\");\n+\t\treturn -1;\n+\t}\n+\t/* get group number */\n+\tret = vfio_get_group_no(SYSFS_FSL_MC_DEVICES, container, &groupid);\n+\tif (ret == 0) {\n+\t\tRTE_LOG(WARNING, EAL, \"%s not managed by VFIO, skipping\\n\",\n+\t\t\tcontainer);\n+\t\treturn 1;\n+\t}\n+\n+\t/* if negative, something failed */\n+\tif (ret < 0)\n+\t\treturn -1;\n+\n+\tFSLMC_VFIO_LOG(DEBUG, \"VFIO iommu group id = %d\", groupid);\n+\n+\t/* Check if group already exists */\n+\tfor (i = 0; i < VFIO_MAX_GRP; i++) {\n+\t\tgroup = &vfio_groups[i];\n+\t\tif (group->groupid == groupid) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"groupid already exists %d\",\n+\t\t\t\t       groupid);\n+\t\t\treturn 0;\n+\t\t}\n+\t}\n+\n+\t/* get the actual group fd */\n+\tgroup->fd = vfio_get_group_fd(groupid);\n+\tif (group->fd < 0)\n+\t\treturn -1;\n+\n+\t/*\n+\t * at this point, we know that this group is viable (meaning,\n+\t * all devices are either bound to VFIO or not bound to anything)\n+\t */\n+\n+\tif (ioctl(group->fd, VFIO_GROUP_GET_STATUS, &status)) {\n+\t\tFSLMC_VFIO_LOG(ERR, \" VFIO error getting group status\");\n+\t\tclose(group->fd);\n+\t\treturn -1;\n+\t}\n+\tif (!(status.flags & VFIO_GROUP_FLAGS_VIABLE)) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"VFIO group not viable\");\n+\t\tclose(group->fd);\n+\t\treturn -1;\n+\t}\n+\t/* Since Group is VIABLE, Store the groupid */\n+\tgroup->groupid = groupid;\n+\n+\t/* check if group does not have a container yet */\n+\tif (!(status.flags & VFIO_GROUP_FLAGS_CONTAINER_SET)) {\n+\t\t/* Now connect this IOMMU group to given container */\n+\t\tif (vfio_connect_container(group)) {\n+\t\t\tFSLMC_VFIO_LOG(ERR, \"VFIO error connecting container\"\n+\t\t\t\t       \" with groupid %d\", groupid);\n+\t\t\tclose(group->fd);\n+\t\t\treturn -1;\n+\t\t}\n+\t}\n+\n+\t/* Get Device information */\n+\tret = ioctl(group->fd, VFIO_GROUP_GET_DEVICE_FD, container);\n+\tif (ret < 0) {\n+\t\tFSLMC_VFIO_LOG(ERR, \"VFIO error getting device %s fd from\"\n+\t\t\t       \" group  %d\", container, group->groupid);\n+\t\treturn ret;\n+\t}\n+\tcontainer_device_fd = ret;\n+\tFSLMC_VFIO_LOG(DEBUG, \"VFIO Container FD is [0x%X]\",\n+\t\t     container_device_fd);\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h\nnew file mode 100644\nindex 0000000..5e58211\n--- /dev/null\n+++ b/drivers/bus/fslmc/fslmc_vfio.h\n@@ -0,0 +1,74 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright (c) 2015-2016 Freescale Semiconductor, Inc. All rights reserved.\n+ *   Copyright (c) 2016 NXP. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Freescale Semiconductor, Inc nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _FSLMC_VFIO_H_\n+#define _FSLMC_VFIO_H_\n+\n+#include \"eal_vfio.h\"\n+\n+#define DPAA2_VENDOR_ID\t\t0x1957\n+#define DPAA2_MC_DPNI_DEVID\t7\n+#define DPAA2_MC_DPSECI_DEVID\t3\n+\n+#define VFIO_MAX_GRP 1\n+\n+typedef struct fslmc_vfio_device {\n+\tint fd; /* fslmc root container device ?? */\n+\tint index; /*index of child object */\n+\tstruct fslmc_vfio_device *child; /* Child object */\n+} fslmc_vfio_device;\n+\n+typedef struct fslmc_vfio_group {\n+\tint fd; /* /dev/vfio/\"groupid\" */\n+\tint groupid;\n+\tstruct fslmc_vfio_container *container;\n+\tint object_index;\n+\tstruct fslmc_vfio_device *vfio_device;\n+} fslmc_vfio_group;\n+\n+typedef struct fslmc_vfio_container {\n+\tint fd; /* /dev/vfio/vfio */\n+\tint used;\n+\tint index; /* index in group list */\n+\tstruct fslmc_vfio_group *group_list[VFIO_MAX_GRP];\n+} fslmc_vfio_container;\n+\n+int vfio_dmamap_mem_region(\n+\tuint64_t vaddr,\n+\tuint64_t iova,\n+\tuint64_t size);\n+\n+int fslmc_vfio_setup_group(void);\n+int fslmc_vfio_process_group(void);\n+\n+#endif /* _FSLMC_VFIO_H_ */\ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex c4b3408..23aff2e 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -47,6 +47,7 @@ DPDK_17.02 {\n         dpseci_set_rx_queue;\n         rte_fslmc_driver_register;\n         rte_fslmc_driver_unregister;\n+        rte_mcp_ptr_list;\n \n \tlocal: *;\n };\n",
    "prefixes": [
        "dpdk-dev",
        "PATCHv6",
        "10/33"
    ]
}