get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 19557,
    "url": "http://patches.dpdk.org/api/patches/19557/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1484647774-28984-2-git-send-email-shreyansh.jain@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": "<1484647774-28984-2-git-send-email-shreyansh.jain@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1484647774-28984-2-git-send-email-shreyansh.jain@nxp.com",
    "date": "2017-01-17T10:09:26",
    "name": "[dpdk-dev,v7,1/9] eal/bus: introduce bus abstraction",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "db6404622d06030c8d89cd711a103e2c4e2a63a9",
    "submitter": {
        "id": 497,
        "url": "http://patches.dpdk.org/api/people/497/?format=api",
        "name": "Shreyansh Jain",
        "email": "shreyansh.jain@nxp.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1484647774-28984-2-git-send-email-shreyansh.jain@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/19557/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/19557/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 3209F2BB9;\n\tTue, 17 Jan 2017 11:06:34 +0100 (CET)",
            "from NAM01-BY2-obe.outbound.protection.outlook.com\n\t(mail-by2nam01on0048.outbound.protection.outlook.com [104.47.34.48])\n\tby dpdk.org (Postfix) with ESMTP id 2E2232B99\n\tfor <dev@dpdk.org>; Tue, 17 Jan 2017 11:06:17 +0100 (CET)",
            "from CY1PR03CA0015.namprd03.prod.outlook.com (10.174.128.25) by\n\tDM2PR0301MB0752.namprd03.prod.outlook.com (10.160.97.148) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.1.845.12; Tue, 17 Jan 2017 10:06:15 +0000",
            "from BL2FFO11OLC009.protection.gbl (2a01:111:f400:7c09::170) by\n\tCY1PR03CA0015.outlook.office365.com (2603:10b6:600::25) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id\n\t15.1.845.12 via Frontend Transport; Tue, 17 Jan 2017 10:06:15 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBL2FFO11OLC009.mail.protection.outlook.com (10.173.160.145) with\n\tMicrosoft\n\tSMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id\n\t15.1.803.8 via Frontend Transport; Tue, 17 Jan 2017 10:06:14 +0000",
            "from tophie.ap.freescale.net ([10.232.14.39])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tv0HA67Te024558; Tue, 17 Jan 2017 03:06:12 -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": "Shreyansh Jain <shreyansh.jain@nxp.com>",
        "To": "<david.marchand@6wind.com>",
        "CC": "<dev@dpdk.org>, <thomas.monjalon@6wind.com>, Shreyansh Jain\n\t<shreyansh.jain@nxp.com>",
        "Date": "Tue, 17 Jan 2017 15:39:26 +0530",
        "Message-ID": "<1484647774-28984-2-git-send-email-shreyansh.jain@nxp.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1484647774-28984-1-git-send-email-shreyansh.jain@nxp.com>",
        "References": "<1484581107-2025-1-git-send-email-shreyansh.jain@nxp.com>\n\t<1484647774-28984-1-git-send-email-shreyansh.jain@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131291211749298644;\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)(39410400002)(39850400002)(39450400003)(39400400002)(39860400002)(39840400002)(39380400002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(626004)(5003940100001)(47776003)(4326007)(5660300001)(36756003)(8936002)(2351001)(30001)(104016004)(106466001)(48376002)(50226002)(356003)(68736007)(86362001)(105606002)(33646002)(8676002)(189998001)(77096006)(2950100002)(2906002)(92566002)(85426001)(81156014)(6666003)(76176999)(6916009)(8656002)(50466002)(81166006)(305945005)(38730400001)(110136003)(50986999)(97736004)(54906002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR0301MB0752;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BL2FFO11OLC009;\n\t1:q/3Np4kE1VnWBuAbGzZfeRPVikmhHgSvje5yJNN7V4w+HKjATXf6jEWsMcIn6lK9C7IE/tEm4w4Xs1bPmIZq7Kr9CZHzufzLS9P2DHBiYla5q7UFWU/vvWRDrw5gKKMiZ3U0akD95CC5M2A5ubjHEyDLiyLTiQvE7nXz7b7ZQBONhiBUFyTbLa2/eXAAk0ysulCHA3QdDAaXtULM0EV7YBXpl823hJ/VvhTHGJ4taDNQcvAgfOtxIvX/2Kn2OYvMPaFHLqOKi5umq6JVj4bHKSO8q+Cl0+r7v8SjAZ0a03cfLNVBUfOXfUMqt4W/VLgcfsM8vStGcePtqDfeCA8FM7hz3wK7ex1JRJvtvtjcCDLEVkbawSQ8zEqTqceD/ycx3DUHROEw8eP3FKR7clEbyX4NagEbIutEgDd34yc7LTLd0MwtFf6FITO8VE9HGmQy8UoxOmRGV7+lbnZkv/AuL+xWD99TF1Gf3KsDcTQdl2pBI9yJlk+76zuTzpTjmdU+/A+YPgvSdP2aOp7+XyhvScHmV1xCYGtJCt0h94CX7/moIkEQddi459pL4c4HTJXNCVmWXLjuUI1uWheOeMY/12wu9nLQdcU6REvmws4P6JjqoPmD3TQN1fkjBAXIkvK9UP1/bPtO/mdhBQhqYwmZ67tXCBC/+8Soz1s6TTfVUpTbS8xKNUgvtWiFuh9HKB3bR83wyDJFRPuvej+PlDBCoA==",
            "1; DM2PR0301MB0752;\n\t3:kZ/6ySESM8wo0UUXKXI1fFZP4zgbK0SPN83NOr9Qd/20+iVOBfrShg5pjtUQ6DQMARCXFI/8t8jvSDzhj3jKp81+hdsyBgcvYvoxvbu9lTPiaNshJF88M+i6kz5H6Qe8Bqrr3KUSowtqVjInSyRy/WfAjmrb0Grt6IZoVItOCHFqoydWNqJSmmj1PHd5SyI4u58Kvc59I6UhT8/OC6PYr0IYlQElOz1NAGSkm1pMlZsXz/x5WhRX6a2Jsaum0lmCGNlK5fEsS8ZAlXuRK5f1pBqaS5MchJOsoRwBV4EIZmDHwknthPcw1ctwje/iGOpo0GTZygEyDZQ3uklAvMdIS91yGeJSQXHgdKayAHaKov15PGU0tXtlyVbESzFHFx4z",
            "1; DM2PR0301MB0752;\n\t25:Q16MJTlRxRgClzlPd6mo2QD89aXu9XuJ1RTpgJ6Ik4dwTS4Wvce+tJJlcUHj+JbmLX+A29e9/2eepOj5Box4EqotAB9A05GrUiiYnmDqIOL/ZBJigeV4/w/e+vmh5oGt2+cQ9hw+ixsFMqttV5mnJT9o1nPD9ugI2FAj6eyrje15UOBtjqgQ45Tremdj8Z9Hyw5u/R7H86fnWKSudVx2sxffz31N9XupUUvaTvhbccPh2sCbpZk1AEi55nyVFsLKCefCR284IqHwgk752U5rBKkAwcHxLQ7JpEKrxlHhX0VViV/uKmdXZ918oLFk7vl7ziSrPL3p8T6r1SgVieQ3sMcUV8b9dc2Y2UyxpR3kJ+GQexMBzJbBxrkKFIGk9e/aXRJt/5DnlAxCF6e+bFmv1r/xBLqcJOTLFl6lQBpW9K7Yxiwalqd1KBl30rDNNt5WMr+Shw/TFrfTlnXHttO2skoiyHSuWnhbnH5iMFFyMIu98+pbyqmDY2hgOvmTLaONlsrik2bkPmjunD9mVKRTmXpPqDzKg4Doon/8WmhuInYi0cxf9zJ9oJIkGeH40ShJvvq7Yzn2lExrE6p2E5WdCxDaTbMEIW+vqK5K+0O4fWL9FRxzkyASJKXyNLmO1GqhtlhjsU/ZChgQnbbbGLmYheZsRQX864v9ERMC/ua1g5HLi+Pc+IrfpCW8j4LXngM6oxT0VWcuGvW2Xwp2cFev4AtG9TzUbw73yscuBT0GFIg+1SMnMi9KzxCVz/9iBb2GPyX5Bv3wuMSdRywoX4d+mm+AWCFF/R330wouvRPoEU0=",
            "1; DM2PR0301MB0752;\n\t31:9LvZzotVuyb2PYtzK8S5sPvW6czU5m642Bepv258OCFizSeGL1DLi8ZUEvS45XO9cWaoSr1EdKD5lHnsdP1fcGKsrQWXk2XnG5fZMdCytdKRFeREp0rKRcSo7CdEmq6QnyTHcczYT/zKSU8gbEnwxd/3hle0KUhWSV6FCG57leyBI95qHJSeFqaqvpXETRQoQT4pij3wv1rEsokKRFJ+fln2OlxRNYcg1VFZdfCDlDasNj8nXUwH2nfRQbxN/s8l2YEhS2xy8T2L6K+X2u+p7t+Rdc6zYbJrOZn3/j8Y92M=",
            "1; DM2PR0301MB0752;\n\t4:1qp6y3lTKLI9K9K4ZnK3Abn9cb/IfzOXRXvW9rgFHDyp/GmlmTRjFybL3f2zsynLoomK1bYtkralxohuHW3MPZScLRPmOpd581GrLULUwDTF1O57u8gc2ujetmDP0FAUq87wGbpdc1shlGnSmftUAvQPX2VDpUK/kEr+qOrqO3RZT/BH7v4cklvxESJBhKgNlDyMGQ5vQH1M6yTJjOG2T0dfHpW8Tf3kTvvSuT1NPlzbw4N8H4HC+9N2LFb74HnzwRygkrTegZY9LxqTw29thRG/MB4XGOrfUQhpQHksHytm40iQCB3hLA1/Xl2m1xYA0Gr84zlaH2owON+a8v3EeZlJrxjTCLzN7lC5Kt6AFJ02IphlSXiKABnOBAd5MemhVXC2cunhsdw/ATkM85mbeA4ld8xQ1qBmwq41v15FwQOsD46oA/5iXDUZK0kEi0yDWd3M4/VIfUqgBdhlSeLCE2UH8jT2RthrDubX1T5BgPYZtAR+7FelfcZtpD2E0bWKagn+T+jxONS9X8TAPo12h4M1Mdr8Y32cLxb6+DBJlOXlSuq+/xmJCQy2Jr1NiadCcr3iv0P8pKD6JCQ5iITTX1hbnppZqToTjuc7MpIlgcQiWR9cCggZDfM3/gTE8qBREj7stEiNp9PkDiCXMaWGy7iM5c9GCMy4wdiusbs3Of9jBZFGpd1z6u983N/+MmEb1zZOwd3tvemjoFngNw3KZ0xn7vTPzoyjmZJte2N5pYi4ELVbdfV2pWpXmoKDfUCE",
            "=?us-ascii?Q?1; DM2PR0301MB0752;\n\t23:Nrb8yBFVlB1KJwB5bSoiDWw6qmVCeUves0N2mWr?=\n\tyqTZ5aVuihJOoFVqNjugrnoSLt6jZwbvqq4AaIUphJtXF2i8n4CaUo5hH1ZN77LX72wkcnAbuFxR7cpG2wpIL7ps8JbPi6bnpYPzbbibO2eYpIbJsz0tVVutqBg81/fGt3O1imqtYfdme8yp8dEvQx+XeDs8f8uvzJWm7f1i9Wmy8/FAvu4/P9sfIRQdaXwM4ppypeFAlbd8QNNAwjyYCS7I1uNGw9WMRUBSIynJDj/TY/BUtjDn/jCa8kvUx6jWHndIhl+e/SBhzeyN7hswrJxmv7XUV+2E8dFduqZp+D2lHUqDplrPLR7cenIWBQ3Ar1UES/S/7Y+G+10O6B7MZnYvO3l36YwM7WB1DRxEOzbTBNh0nOPkXSDKtcj1HlLXyK0tgiS7zuO67+M0IWMoLVoROsV04zBJrJ7m5O1gz9ayIgb5Z70bYWaZWtt5vxOQMqw7V2nnCcocezKunulhFvdP490xjZ7WOlJagCtnwX1u6RRBTWeiDIMgaGQybU+ZRBtMvqkp9G4h0WZk0/yWBQ9smkGKLQ2Qu75MXM7min2VmMZa/tKhfcxMHMUd3H/KAWa3o1AuKnuG25OJo+JMLs+TJz1oX0hJAVxkpmdQoyg5gZojpOFrd8t22c6aEf2h10l/DjyEnYkmUXMZpXyWrC7taaL7ZfJIZDnYlKX1pisoDlWUa6n7lcQGcEQACSXXuwwj/FUMuv2ILQWUunb9+CjcwD6HpKG2eShSzS56WW6Yf2azvMXNpiEcRu1kwSJvN31/Gj3rvSYDFGDMFLZIsEBFmwXmuNdYOubkzcfNMb100XsFUKlVbPP+GXjoyYdjRPrKt6cQAYQW/LthX+VRyHBo+PeGUCE4sOQcIxQNbj3rb7eNL8ygtJltXd85WD7Gnw9/TjEXyItP8alsW2JK4sgZDvNyPX9JmAPMlNkmaiVtmE6fvOAwkWFUDLQ6F4Aj0GK89g4Un++e77cASCm0sUdcvIFA+UN5MPU9bvA29351xsDzTPRGAX9pu4PBv6fzLdQxVqZBdhXbO2oatcZBAJHAKHOmuv2yfDOcKpoV8JqHc3phFTRpcCcbUmvTiRJTWt6X/S/0mCIXEK/uAn0jcYiK26Ay6/YhtzhYhq/B1eKE+yMbDbVUf4OQlBeuLcNtith5xbV9brHeXPzxGiQG0Q8yM3sfKv9uXupUjJZ87cc6sa/d7IETDfs62P78fA9Dx6Hps6F25YlYals/LYBvPI5fu3+/SVf8I8SNya3N9aosX3Q==",
            "1; DM2PR0301MB0752;\n\t6:WGCib56I9ynunDtW6GaX3WS22UYDMvmG0srOdzjzgdepGT9ot9Q9jS5XuOUaLhE2DMrQZc13jM4q3SPCudQ428pDtH/X762MD8EXm+wl+miBRIqrJ0d0PINXjRgI6B8hW32H2UA/EugfkLyJd/78U2iZ4tMdHEBmy9tn9Om27pgV2bB7JxNOY7jjEFvToyHjDPASFqwAc/IjoDt4xBJ4xCklNt+f0Fmc4ZQlR0CQKvfnQnwWqOMPbiYHcpGlKRAFrwm5D8B0ZE0zKXn+RJ729m0FJ7wU2+yvGf6Vc+SEz/JIc7wxMZ7ToJe6qu+W+XHtUOIDIWkFhd/xqduaoQV6Cw4OiPk8PDT8JhX/Hqo2nHfEe3zMrQGPxS5H3uiOHTreaLy1wF/Lh2/exHYVMpuUAEdSvt6RW3fl3mHvmJROytRrnAPCC8EDUfGVZ0UbOIoQ;\n\t5:KAGkzgo0WJO1D5X8o4XgOrmG6S8YK11TMeBrtmxZUhIMuxez2Om+6IBIhhmFQyvthiXpmnyt+PULncwrW4ox5Dd6FKwEsFTqgXf2YVBEEFXVemhKG89VwKtkyyNXRIMQK+VKLtxZdTJFoU2SaRzs0zHvutOa19Ht2eUWuctaX4eOH/gPG+1svkqzn/bdKSwT;\n\t24:MK92fovhp7Enb9FEIlBzSkNZC7fIE5OhwdlqFI8/T1rsHGJecGtL8HXcil5JwjoC4lTTslvYQkZeKY5L2uQdkViaG51V49NLoTe9lyBaJY4=",
            "1; DM2PR0301MB0752;\n\t7:k/C/YjVPIc+Leq3OUxMezCkEAdTQpJ7+p6yhhf7Kl/G54Ud34EJ2PtOMbmK/QdxnFaYDAU1H7zbQeRxQKRZh/Sh6p10chDO4Rjkp7TdE8MKvLMBLf2WW2pa2zzI3+kl0jwpAO+ormJH4y9k1zX9YXdOkq+dHPHQYbGKr56Y/5hTmCWeobThbf0xBZIMH/9/fRBqOO7NX7zLxhckFn/oMOjB2aNWXsipF38dPvAbybcPq1fOlbA9hODxsCheKv+qU/JccBmlSKGbSFIKUWjZqnk4L3X2L6aWrqL8H/9Q9cltqHiQeNBJOz6o3nMxVhcymop45wyztl85CD2Zj32o8Gg41Ux0uIwHduEHHNeZyic92Tg4W6FWypKpAAW/SclOdyTo4tyIavCzpQUnReKnEwlaze7jUjsXtNEN77uZy7fP0R5h1R81Sj30w+veVnbdCwMPg6bOPTCAKxEyz9aa/wg=="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-Office365-Filtering-Correlation-Id": "07cbf690-bb4b-4dfb-30e8-08d43ec078e7",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:DM2PR0301MB0752; ",
        "X-Microsoft-Antispam-PRVS": "<DM2PR0301MB07528826FCCBE981EB35E5D4907C0@DM2PR0301MB0752.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6095060)(601004)(2401047)(5005006)(8121501046)(13017025)(13023025)(13024025)(13015025)(13018025)(10201501046)(3002001)(6055026)(6096035)(20161123565025)(20161123563025)(20161123556025)(20161123561025)(20161123559025);\n\tSRVR:DM2PR0301MB0752; BCL:0; PCL:0; RULEID:(400006);\n\tSRVR:DM2PR0301MB0752; ",
        "X-Forefront-PRVS": "01901B3451",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Jan 2017 10:06:14.7428\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": "DM2PR0301MB0752",
        "Subject": "[dpdk-dev] [PATCH v7 1/9] eal/bus: introduce bus abstraction",
        "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": "This patch introduces the rte_bus abstraction for EAL.\nThe model is:\n - One or more buses are connected to a CPU (or core)\n - One or more devices are conneted to a Bus\n - Drivers are running instances which manage one or more devices\n - Bus is responsible for identifying devices (and interrupt propogation)\n - Driver is responsible for initializing the device\n\nThis patch adds a 'rte_bus' base class which would be extended for\nspecific implementations. It also introduces Bus registration and\nderegistration functions.\n\nAn example implementation would be like:\n\n  .--------------->+-------------------+\n  |                |rte_pci_bus        |\n  |                | +----------------+|\n  |                | |rte_bus         <------.\n  |                | | name           ||     |\n  |                | | scan           ||     |\n  |                | | match          ||     |\n  |                | | probe          ||     |\n  |                | | remove         ||     |\n  |                | | ...            ||     |\n  |                | +----------------+|     |\n  |                | pci_driver_list   |     |\n  |  .-------------->pci_device_list   |     |\n  |  |             | ...               |     |\n  |  |             +-------------------+     |\n  |  |                                       |\n  |  +-------------------+                   |\n  |  |rte_pci_device     |                   |\n  '----bus               |                   |\n     | +----------------+|                   |\n     | |rte_device      ||                   |\n     | | bus --------------------------------'\n     | | ...            ||\n     | +----------------+|\n     | ...               |\n     +-------------------+\n\nSigned-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>\n---\n lib/librte_eal/bsdapp/eal/Makefile              |   1 +\n lib/librte_eal/bsdapp/eal/rte_eal_version.map   |  10 +++\n lib/librte_eal/common/Makefile                  |   2 +-\n lib/librte_eal/common/eal_common_bus.c          |  97 +++++++++++++++++++++\n lib/librte_eal/common/include/rte_bus.h         | 111 ++++++++++++++++++++++++\n lib/librte_eal/common/include/rte_dev.h         |   1 +\n lib/librte_eal/linuxapp/eal/Makefile            |   1 +\n lib/librte_eal/linuxapp/eal/rte_eal_version.map |  10 +++\n 8 files changed, 232 insertions(+), 1 deletion(-)\n create mode 100644 lib/librte_eal/common/eal_common_bus.c\n create mode 100644 lib/librte_eal/common/include/rte_bus.h",
    "diff": "diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile\nindex a15b762..cce99f7 100644\n--- a/lib/librte_eal/bsdapp/eal/Makefile\n+++ b/lib/librte_eal/bsdapp/eal/Makefile\n@@ -78,6 +78,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_cpuflags.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_string_fns.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_hexdump.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_devargs.c\n+SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_bus.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_dev.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_options.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_common_thread.c\ndiff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map\nindex 2f81f7c..4dcf653 100644\n--- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map\n+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map\n@@ -174,3 +174,13 @@ DPDK_16.11 {\n \trte_eal_vdrv_unregister;\n \n } DPDK_16.07;\n+\n+DPDK_17.02 {\n+\tglobal:\n+\n+\trte_bus_list;\n+\trte_bus_dump;\n+\trte_bus_register;\n+\trte_bus_unregister;\n+\n+} DPDK_16.11;\ndiff --git a/lib/librte_eal/common/Makefile b/lib/librte_eal/common/Makefile\nindex 09a3d3a..240995c 100644\n--- a/lib/librte_eal/common/Makefile\n+++ b/lib/librte_eal/common/Makefile\n@@ -38,7 +38,7 @@ INC += rte_per_lcore.h rte_random.h\n INC += rte_tailq.h rte_interrupts.h rte_alarm.h\n INC += rte_string_fns.h rte_version.h\n INC += rte_eal_memconfig.h rte_malloc_heap.h\n-INC += rte_hexdump.h rte_devargs.h rte_dev.h rte_vdev.h\n+INC += rte_hexdump.h rte_devargs.h rte_bus.h rte_dev.h rte_vdev.h\n INC += rte_pci_dev_feature_defs.h rte_pci_dev_features.h\n INC += rte_malloc.h rte_keepalive.h rte_time.h\n \ndiff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c\nnew file mode 100644\nindex 0000000..c891392\n--- /dev/null\n+++ b/lib/librte_eal/common/eal_common_bus.c\n@@ -0,0 +1,97 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2016 NXP\n+ *   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 NXP 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 <stdio.h>\n+#include <string.h>\n+#include <inttypes.h>\n+#include <sys/queue.h>\n+\n+#include <rte_bus.h>\n+#include <rte_devargs.h>\n+#include <rte_debug.h>\n+\n+#include \"eal_private.h\"\n+\n+struct rte_bus_list rte_bus_list =\n+\tTAILQ_HEAD_INITIALIZER(rte_bus_list);\n+\n+/* register a bus */\n+void\n+rte_bus_register(struct rte_bus *bus)\n+{\n+\tRTE_VERIFY(bus);\n+\tRTE_VERIFY(bus->name && strlen(bus->name));\n+\n+\tTAILQ_INSERT_TAIL(&rte_bus_list, bus, next);\n+\tRTE_LOG(INFO, EAL, \"Registered [%s] bus.\\n\", bus->name);\n+}\n+\n+/* unregister a bus */\n+void\n+rte_bus_unregister(struct rte_bus *bus)\n+{\n+\tTAILQ_REMOVE(&rte_bus_list, bus, next);\n+\tRTE_LOG(INFO, EAL, \"Unregistered [%s] bus.\\n\", bus->name);\n+}\n+\n+/* dump one bus info */\n+static int\n+bus_dump_one(FILE *f, struct rte_bus *bus)\n+{\n+\tint ret;\n+\n+\t/* For now, dump only the bus name */\n+\tret = fprintf(f, \" %s\\n\", bus->name);\n+\n+\t/* Error in case of inability in writing to stream */\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\treturn 0;\n+}\n+\n+void\n+rte_bus_dump(FILE *f)\n+{\n+\tint ret;\n+\tstruct rte_bus *bus;\n+\n+\tTAILQ_FOREACH(bus, &rte_bus_list, next) {\n+\t\tret = bus_dump_one(f, bus);\n+\t\tif (ret) {\n+\t\t\tRTE_LOG(ERR, EAL, \"Unable to write to stream (%d)\\n\",\n+\t\t\t\tret);\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+}\ndiff --git a/lib/librte_eal/common/include/rte_bus.h b/lib/librte_eal/common/include/rte_bus.h\nnew file mode 100644\nindex 0000000..2250269\n--- /dev/null\n+++ b/lib/librte_eal/common/include/rte_bus.h\n@@ -0,0 +1,111 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2016 NXP\n+ *   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 NXP 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 _RTE_BUS_H_\n+#define _RTE_BUS_H_\n+\n+/**\n+ * @file\n+ *\n+ * RTE PMD Bus Abstraction interfaces\n+ *\n+ * This file exposes APIs and Interfaces for Bus Abstraction over the devices\n+ * drivers in EAL.\n+ */\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <stdio.h>\n+#include <sys/queue.h>\n+\n+#include <rte_log.h>\n+#include <rte_dev.h>\n+\n+/** Double linked list of buses */\n+TAILQ_HEAD(rte_bus_list, rte_bus);\n+\n+/**\n+ * A structure describing a generic bus.\n+ */\n+struct rte_bus {\n+\tTAILQ_ENTRY(rte_bus) next;   /**< Next bus object in linked list */\n+\tconst char *name;            /**< Name of the bus */\n+};\n+\n+/**\n+ * Register a Bus handler.\n+ *\n+ * @param bus\n+ *   A pointer to a rte_bus structure describing the bus\n+ *   to be registered.\n+ */\n+void rte_bus_register(struct rte_bus *bus);\n+\n+/**\n+ * Unregister a Bus handler.\n+ *\n+ * @param bus\n+ *   A pointer to a rte_bus structure describing the bus\n+ *   to be unregistered.\n+ */\n+void rte_bus_unregister(struct rte_bus *bus);\n+\n+/**\n+ * Dump information of all the buses registered with EAL.\n+ *\n+ * @param f\n+ *\tA valid and open output stream handle\n+ *\n+ * @return\n+ *\t 0 in case of success\n+ *\t!0 in case there is error in opening the output stream\n+ */\n+void rte_bus_dump(FILE *f);\n+\n+/** Helper for Bus registration. The constructor has higher priority than\n+ * PMD constructors\n+ */\n+#define RTE_REGISTER_BUS(nm, bus) \\\n+static void __attribute__((constructor(101), used)) businitfn_ ##nm(void) \\\n+{\\\n+\t(bus).name = RTE_STR(nm);\\\n+\trte_bus_register(&bus); \\\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_BUS_H */\ndiff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h\nindex b17791f..24c1c00 100644\n--- a/lib/librte_eal/common/include/rte_dev.h\n+++ b/lib/librte_eal/common/include/rte_dev.h\n@@ -122,6 +122,7 @@ struct rte_driver;\n  */\n struct rte_device {\n \tTAILQ_ENTRY(rte_device) next; /**< Next device */\n+\tstruct rte_bus *bus;          /**< Device connected to this bus */\n \tconst struct rte_driver *driver;/**< Associated driver */\n \tint numa_node;                /**< NUMA node connection */\n \tstruct rte_devargs *devargs;  /**< Device user arguments */\ndiff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile\nindex 4e206f0..aa874a5 100644\n--- a/lib/librte_eal/linuxapp/eal/Makefile\n+++ b/lib/librte_eal/linuxapp/eal/Makefile\n@@ -87,6 +87,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_cpuflags.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_string_fns.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_hexdump.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_devargs.c\n+SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_bus.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_dev.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_options.c\n SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_common_thread.c\ndiff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\nindex 83721ba..b553b13 100644\n--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n@@ -178,3 +178,13 @@ DPDK_16.11 {\n \trte_eal_vdrv_unregister;\n \n } DPDK_16.07;\n+\n+DPDK_17.02 {\n+\tglobal:\n+\n+\trte_bus_list;\n+\trte_bus_dump;\n+\trte_bus_register;\n+\trte_bus_unregister;\n+\n+} DPDK_16.11;\n",
    "prefixes": [
        "dpdk-dev",
        "v7",
        "1/9"
    ]
}