get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 19880,
    "url": "http://patches.dpdk.org/api/patches/19880/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1485172803-17288-9-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-9-git-send-email-hemant.agrawal@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1485172803-17288-9-git-send-email-hemant.agrawal@nxp.com",
    "date": "2017-01-23T11:59:38",
    "name": "[dpdk-dev,PATCHv6,08/33] bus/fslmc: add mc dpseci object support",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "867ba484b5f9e2f904822617a047a4ee0bf85230",
    "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-9-git-send-email-hemant.agrawal@nxp.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/19880/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/19880/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 B639DF923;\n\tMon, 23 Jan 2017 13:01:14 +0100 (CET)",
            "from NAM01-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam01on0073.outbound.protection.outlook.com [104.47.32.73])\n\tby dpdk.org (Postfix) with ESMTP id 2F59456A1\n\tfor <dev@dpdk.org>; Mon, 23 Jan 2017 13:00:44 +0100 (CET)",
            "from BN3PR0301CA0007.namprd03.prod.outlook.com (10.160.180.145) by\n\tMWHPR03MB2480.namprd03.prod.outlook.com (10.169.200.150) 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:41 +0000",
            "from BY2FFO11OLC007.protection.gbl (2a01:111:f400:7c0c::177) by\n\tBN3PR0301CA0007.outlook.office365.com (2a01:111:e400:4000::17) 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:41 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBY2FFO11OLC007.mail.protection.outlook.com (10.1.14.254) 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:40 +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\tv0NC07eW019311; Mon, 23 Jan 2017 05:00:37 -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\tCristian Sovaiala\n\t<cristian.sovaiala@nxp.com>, Hemant Agrawal <hemant.agrawal@nxp.com>",
        "Date": "Mon, 23 Jan 2017 17:29:38 +0530",
        "Message-ID": "<1485172803-17288-9-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": "131296464402359539;\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)(336005)(7916002)(39840400002)(39400400002)(39410400002)(39860400002)(39450400003)(39850400002)(39380400002)(2980300002)(1110001)(1109001)(339900001)(189002)(45074003)(51234002)(199003)(47776003)(68736007)(36756003)(50466002)(2906002)(4326007)(48376002)(50986999)(86362001)(92566002)(33646002)(189998001)(5660300001)(76176999)(104016004)(626004)(5003940100001)(97736004)(38730400001)(77096006)(54906002)(8656002)(305945005)(85426001)(356003)(105606002)(110136003)(81156014)(2351001)(6916009)(50226002)(53946003)(53936002)(8936002)(8676002)(106466001)(81166006)(2950100002)(2004002)(559001)(579004);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR03MB2480;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BY2FFO11OLC007;\n\t1:hAqEf6Ib2tMiAXQ267sCQeSzuALyDnMZRc2dgCJVYfFTrmTv1b9jthjRIF4fl/nKmpp4gAzT0RcSNdmoA+RlOeZ29vX2X6Cd7U5aHr2QuO7IPUywUHPuLZIvp2T7ep9JD05yDWj1BlMJyu6FKcfMd8H+Ju1n2heJ4xO5Kf9Iw80rssFo07vbcAkqELPJRYTW3ah45RDLiaXHisYwE71W8297MDWXHaQJluDDwk8aq86iSLaaIa8AA0hMuhrKWZJLe7OZyV9ZxXc933oakqyhtWUmGCtGbow1xzGdAjx1FPfFu/Evym+3x9Y0Nz1K/Hv26oklQcEzfMYExLrv2/beijJT3idaJzZEDF0Svo0CR4E3i2tyZ9Fx725xBKIWRcIoPD5A43OK7a/KHcLi1oNIvr7etYVjXoa5gPJlVpz+a0UA4uoTF4RvB5AFDKO+74IyRrO55XNKWBefYRemqfiBn38vepn75iOtPJTmE47Nr/MafiCz2GexvWpgeZQOBwsyfQXSGchrhr4HDTEHh7EMjAOsOiy3Z9ypgz2AvOMiiUA1JcPkPvLtamEat3n9rLNoNJpRydhB+yz106Cdw3f8hoP+/ojhoWG8FBRabgySmwUF1YsRsxYYPAF6sEDWoJM/z7zdgIcOiGPKXrvW5+rIBxp0epfGRkOb8LD8TSQuM6HHhL0ebK5eseZ+rjvBGiL8QzXVFTzwSv/ersx+xUhLFJiMuKwJuPvUD9eUtFR5032NY1N3OtlZye1peSt81qXV",
            "1; MWHPR03MB2480;\n\t3:uyePpJGyOk/I0DX0nu81kR+zxRWBL23TDNz96SBW68ncCRCQMh/Xc8UF+BMAuVb8Ohf7MzBN/ez8pdOXJzFhnLnnSVZRo+3LS2MSe1CZHjOB3T46dP8Zi9XCjFTsUrLF//XcMLN3bTjmAr6cBaZs2U7rqg+JIEAzbNHE3d5VfHEmSaXTfT8cR24q4Om+d2tlvTn324Iie4fHOtHRHd6Kr+J+2fA+Hinx8Nx7BmntipbESBkamhuUxcxyzy/ouOGrHi+H7vEbK3zGZZm0qiuK81yPuPiBN6Fh5nTo7YPzFDgj3/x3CtLaH3hOIE5TqeacSmQW7ayzXp6M/geYi2h3UgoI0jDAJRIHhZOhT4Q1lK8GGYzaLm0h5LnYOYH1/pd5",
            "1; MWHPR03MB2480;\n\t25:PTEDMcqv7EEhG0VpUXVh7jy25xaGfrhy827lp1u3QoR0CUcA8yJZ4SsetE+PgqMXGCe+R4uZT1UVVtyq3u+7IUy9+NkdHku78G3wtLrUM+xNUQKomAavDTDpQR4cq83+C3zoEvGynbnrKeiTLEVj9MdY/wHYhH3w455exOJy/T8FvQFBxvHwySozVDgCCdpYrY01ynbxT/fQxnrq2EsfhTG8CymPO5HiNo39+NCN4USI8+ZPrGtFtIKzYUyqw2JOPtSJi119yLx6FIWtoMlsZ12+PBwIRJdx20KFIvSsmIFNUMWtEC0kzDYy/kl/GI7pkgp87/A3lVmTdY/eC/YK+sXjZ0wLjevUT7iUgphEl31OgSkVshWMKRkA/FLRGMZKsiAPBu4qJuBVRCwkz4UlDZI/Jg9VHjsQoork3tqbrzKaiqm+4FLq7BgOo3mpaLvGkiEoF8x9EOQ5y2y1pN2+GQaRwKU8YF0h8NabH5aPpJdNOptsLcKMZnSlyWqEtWcYL5YKi/PMfwfOMfwQvXuFyMIMS0LFekGjJR1D5MKWEFsOceI4Jd+35pkU++6IZVNkpoH1tiQUXWs3Gk3A4RCDrD4B7fPxFW1rXIjVWlo6k1vVcIetAaiwlvcNh9Dqpxa0H8O+Ui1wW8wLS/Zu2+1F7swfevjQzJAifgA8kb/dZSjl+ghlI55eI8HG4oXRXL9A88bB+aKlCc3dX3PT0fBNRsWrO57SYjYgHDtx9//Diy2UBPahSVuK5Lh3fwgU/Rk0clfUyKP1C8Od1Qs6e0l0V93BlwAOVx7cK2dBJyKmxxU=",
            "1; MWHPR03MB2480;\n\t31:/n2TL97sKJkevcekuyo/ESstLTCmS/xQ34ABgB0eHh1s7mUXhdgNooLrQGYdz/OkF1J5lww25cRc6ZmoiSjAQkQuKX8AplDxu56rGj0jIq2q2OaoSIxUeNXxPCOc7kefMn/PrydRs5XN+kevkzG1D+5w0fWMDW1TaUUYrwdqdLIIuFGeMccjM8lt5b4s8FQDjfm/r6jR3X5cw6ZLV8DOxpTbgQ/qR1JyT1PM6bgFJTN2gwuhnKuxzkFoUsI/VNUqTjUMJ25XSG1tjOvY0arypw==",
            "1; MWHPR03MB2480;\n\t4:yECjyrWkQ6aggo61BeJxnPlgaZpRa/U9DWnhWDiPZWAjL0p33TUXJSswYArEAbuyWRM/QfwfmLyfePu0VUHKi9+fwi/GNdqpLxiMgwpwUsu7pk+KyYzbFK8fxW5egXV2PhUaJLzf7BEZ2K0IM3wjdnlG6nDsJwrB4ViGVs5DwfnvCnDbNayDPQYwDoFpXhYfqtkWf9V03zRTE77tvEh0DyaM/KjDdL6IpR1UBZAK14rEiHxU/F+jyUmHtYRLlWUFksUNtqZjyY08rJ5ID3e1BWXjAC7DnpFqQW4wgmcnD7VzKEavgssgKcmlPZ5lV3tDn7glihED/BLLQAwWU2Ys7toOyjo/1TBvdy97uZZ8Q/Ihx5LKXds/KC+HQ2LeRRIO0VNlx4C1bwRGNorN4Q8Tt+kgeU9EDwkZu5PAZaGcEe3ygphWaoq8vXi9MCBnjzYczJDSLrFYHOOreGHquuVBNDGxWF++0IOMjBgUyw9W5Xt4+ihTIcWZzF95Ib4hbLHLkU1M8tVD1mbftALVwsh+ZexYrRCLi8lx7eZPHlS+hx0yxeRSsgd7MmVBplUZShZRJ+GeqX4VaNqrbJ1gqFSmDdqyv5LnqhoErfbkadYsy8n/M/lTdlUKsKUNs59IlUD9D1TcDBpov3vy9074IxGP/g8g3ecNDIJrXxc/KcU32sjFl/mYukwy78/mX+uZTPmQS9RP8PqH2d1oi9mtl2/iXevNz0ebANJ2p7eRBaoupRReiJrXK47Eb6aIdoCgPnzkHuZVpXpGLQOzvTRhh3Gg+Q==",
            "=?us-ascii?Q?1; MWHPR03MB2480;\n\t23:Thb5L0eyK0TMdzQxIdc/IcitTCQgUM4wnBlQU68Lz?=\n\tyFNjlJmOwKPE3JuruzU3wrjI0GzMBoWGzSipT//BU5l1oRcqfjIGa3GiCbWXJdannfM5I6031TJkeAoGzfqbDbFqyhkXF5+sAvyC+txTYqRw+Ns2RqVTTqrcPbIIJShwxnjUPf1tsEDpzDC9lBMzuj9a1cKXOvTQlUGbRaborWstED9Anm69jL4KQUHRTMrnOFQe1bUpy1G/b5xV9RMWNDgTWN9flQDwiRHxRODRFxyMNU6PjFLFm7N/aNi8vrZRHOcpmB6loQipf4obJmfFxGLcvjXqpmAolZ7I0jHaK5Uhqa0bBXCoxNhLdYD5FnEwRKdbBA4SlbJ+Xie4l7KY314M7Y3tKbSN1ayaGjh7BuonFnrTb/WYDkme9MvR4F//x3bomJy1Yo6wgX9wZTCmnIe5j9i+FnZqPJGjAccTs+G1HPokneEOf3UR0ajYyGrMEBrTxIw79VgIChM3K4CoHG6ZxOyOFtY67kWU997HUSMmrFAIos//LtGQ5S38Z5Af6L5KN+XnfMXeIelzzBY6V7GXEretPjZTP2OXnbMVhcWcmgDJYYzUInmByh3K/XkHDkYjrkr4+fHUG+BgQ7iw9NZtyCRJwS3OFJrfzXHJmDmYuN6sPdAlddW/in6cXUEtgk0wZXLzVZ4js1CD8V50PNkeLefdIaQDsw0ZwahIghbNb1ck86Xip7xAHpNNojK3lALoYP8h8WJ9zQoC1h1cun28YblFTyyTxDpE92UKDYgCUO082aho2CupRr8vtPqZUE1fIQcHAw6j934s5TdJ7ZRj6XM8dzrppB1cbg8QEXoZc7eI6F8/nIB0oeqs724nycjJYQu9ZZs8rUghAXBiSzaH3XtqfZH8kesCK36y1wEmM2oKlLVk9vu+yATkimwp7gea3gvImr7LBPkICe/G7/VkP3ieP1istQXZfSraa1DSpcrgJ4UEvpscBXn7EoxmiLKWgn4F8KwtBgFSeqJVKaSs2SQFkOvlX6DobpG29sWgAZRUUZvx7f1weM1OLjizdoZUaOymmjPdtJGjLjSdr2CvYBSqb8K0189MLOyh1BTsDcN/GfkxHGF39asN62w4rF4NBpJ2xnPwI8z5bx1CBzGD5G5LRgGiI8BFKi3nORFDcGomrGTuDFxS6sPGBcfNgXZHfwvA+7YHG7eyMIUHRPS6YtyYVuh+cmxh3m6pB39tiK/ATx6XkkamxkLQePbYkWbJ206CC4G1Uwo6Vq+z8yLOHhmzijmrMOy1JN8iRU483Xs5o2YzpRU9T3tqz5FVuvOdX9bhAm4kT/deJT3z0l7NF3SW+BYmjRPQA0ESPrVfzl3y7EJNG3gB1+6wx27xx+CRnm8FFHaaf2Cnx3hAFjb",
            "1; MWHPR03MB2480;\n\t6:E4WLd1jfqioHHEd1obpn2ZfhOGKFkbY8dHUbV/9JhPJ9VMQZhMLC6Y/Pze1IsYs93nSzgQdwg92KjdLZB/xwXSfcypuO7OrUMJ/7bFgp3BeQ6/kdAECdcYw6bvSHGDVwCnWHFvyce3Nlkq+pqow8FEF6i1CHRGnnNE14lHuZZ4/yk7okrrQo0BNp0iXHz+Cqo66ZysbQiiipEnSAeMosT04YUf8aB+t9HzXgofxPIyTitkocE25C5GHdUFXGixBoOt64WU8v3W0G9zn7ZTGPgyHwU2D3TbDl9VXF2V0yZ/1NHNLJl9Nkr6+lJcJ6Lij/7Up3NqkWnIkq2Z3X85VGrCiDnWp2rTAL1/5uOzHqd+9SN+4ta4Z5W6xlDF+L2sI/aRu7G8mF5oUGt1LlD218zVZCPTk2ybjmLkVSu9bFIWbYxbEYr8IWdM31R19PhzSL;\n\t5:WoT03jNHEMaeevxDjVkrPA6bFFPOJxUXHoQt7tLvmI9uV8y8G15EU+aCzxCUYv0IBvOIAw6QwTQGpJ1KcZV41HdbexBy+FdshnbUpsD+5j6fv0a/6IV9UNhmRGiQqpuTeh6JXO1mcgaq4nytyyX9fXlWZ+twdIMIeqij/EnPynSfJIKsdZii86Fojg8PMlAy;\n\t24:5bWRBELavjIoqqmDjw+4xgKK2+U70t2hHKL4ZMhEWxDmXZFypuuTdQsTStWM4Oc7heWwikHhrmKguRGEXIvNbtxXugixLiOQlWvtFnxr4no=",
            "1; MWHPR03MB2480;\n\t7:vyit2A1LsU8R1/scKY06UG1ArdKXheO22MPckeKxGGUohi+UppeMv+scYGRldP3xzb8n/dqUTcjx77lOhRQW1nxn82c8bl0N3womG/pYaxZduSyLezewF1Dx71OekYoHcO3LASrFl06AcuQwa1zL/Kyc+WdAcCR9hLd4IP06R/zazDtaDDy9YKkH6F9mjVVQIob8bfr5hqM//sGq2I+Q7qnMxutAlmOYvxVU9YCAZWdnT3eu9mH8qPXl5IbLrRJk8Z7eTrV1C1Xes+rgjoQQzKZEhztIyOQ/DY8EI2Uq+fDpr+m8HLdE5FEjZfJ/edS8E3fKT07122/MrpAKwGNY+57jb1hJtPmepiHSzSNylflR+IdAE30AJlMZ6YlJCg6j+YaiUZakGoNzEgUdtDTQnXeTJXggkazcF2FZcFc28u/efon3xZMpfk5ymWN4iKryFzlydG8ZhdLTAKnmtG640Q=="
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-Office365-Filtering-Correlation-Id": "72fa7da0-a839-4355-4399-08d44387736c",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0; RULEID:(22001);\n\tSRVR:MWHPR03MB2480; ",
        "X-Microsoft-Antispam-PRVS": "<MWHPR03MB24806B6C03EACA47D66E859389720@MWHPR03MB2480.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197)(275809806118684); ",
        "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:MWHPR03MB2480; BCL:0; PCL:0; RULEID:(400006); SRVR:MWHPR03MB2480;",
        "X-Forefront-PRVS": "0196A226D1",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "23 Jan 2017 12:00:40.0331\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": "MWHPR03MB2480",
        "Subject": "[dpdk-dev] [PATCHv6 08/33] bus/fslmc: add mc dpseci object 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": "dpseci represent a instance of SEC HW in DPAA2.\n\nSigned-off-by: Cristian Sovaiala <cristian.sovaiala@nxp.com>\nSigned-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>\n---\n drivers/bus/fslmc/Makefile                  |   1 +\n drivers/bus/fslmc/mc/dpseci.c               | 534 ++++++++++++++++++++++\n drivers/bus/fslmc/mc/fsl_dpseci.h           | 668 ++++++++++++++++++++++++++++\n drivers/bus/fslmc/mc/fsl_dpseci_cmd.h       | 255 +++++++++++\n drivers/bus/fslmc/rte_bus_fslmc_version.map |  10 +\n 5 files changed, 1468 insertions(+)\n create mode 100644 drivers/bus/fslmc/mc/dpseci.c\n create mode 100644 drivers/bus/fslmc/mc/fsl_dpseci.h\n create mode 100644 drivers/bus/fslmc/mc/fsl_dpseci_cmd.h",
    "diff": "diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile\nindex 628e517..4a118a3 100644\n--- a/drivers/bus/fslmc/Makefile\n+++ b/drivers/bus/fslmc/Makefile\n@@ -50,6 +50,7 @@ LIBABIVER := 1\n \n SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += \\\n         mc/dpni.c \\\n+        mc/dpseci.c \\\n         mc/dpbp.c \\\n         mc/dpio.c \\\n         mc/mc_sys.c\ndiff --git a/drivers/bus/fslmc/mc/dpseci.c b/drivers/bus/fslmc/mc/dpseci.c\nnew file mode 100644\nindex 0000000..bc8c9c5\n--- /dev/null\n+++ b/drivers/bus/fslmc/mc/dpseci.c\n@@ -0,0 +1,534 @@\n+/*-\n+ * This file is provided under a dual BSD/GPLv2 license. When using or\n+ * redistributing this file, you may do so under either license.\n+ *\n+ *   BSD LICENSE\n+ *\n+ * Copyright 2013-2016 Freescale Semiconductor Inc.\n+ * Copyright (c) 2016 NXP.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\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 the\n+ * documentation and/or other materials provided with the distribution.\n+ * * Neither the name of the above-listed copyright holders nor the\n+ * names of any contributors may be used to endorse or promote products\n+ * derived from this software without specific prior written permission.\n+ *\n+ *   GPL LICENSE SUMMARY\n+ *\n+ * ALTERNATIVELY, this software may be distributed under the terms of the\n+ * GNU General Public License (\"GPL\") as published by the Free Software\n+ * Foundation, either version 2 of that License or (at your option) any\n+ * later version.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+ * POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#include <fsl_mc_sys.h>\n+#include <fsl_mc_cmd.h>\n+#include <fsl_dpseci.h>\n+#include <fsl_dpseci_cmd.h>\n+\n+int dpseci_open(struct fsl_mc_io *mc_io,\n+\t\tuint32_t cmd_flags,\n+\t\tint dpseci_id,\n+\t\tuint16_t *token)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_OPEN,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  0);\n+\tDPSECI_CMD_OPEN(cmd, dpseci_id);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\t*token = MC_CMD_HDR_READ_TOKEN(cmd.header);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_close(struct fsl_mc_io *mc_io,\n+\t\t uint32_t cmd_flags,\n+\t\t uint16_t token)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_CLOSE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_create(struct fsl_mc_io\t*mc_io,\n+\t\t  uint16_t\tdprc_token,\n+\t\t  uint32_t\tcmd_flags,\n+\t\t  const struct dpseci_cfg\t*cfg,\n+\t\t  uint32_t\t*obj_id)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_CREATE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  dprc_token);\n+\tDPSECI_CMD_CREATE(cmd, cfg);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tCMD_CREATE_RSP_GET_OBJ_ID_PARAM0(cmd, *obj_id);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_destroy(struct fsl_mc_io\t*mc_io,\n+\t\t   uint16_t\tdprc_token,\n+\t\t   uint32_t\tcmd_flags,\n+\t\t   uint32_t\tobject_id)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_DESTROY,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  dprc_token);\n+\t/* set object id to destroy */\n+\tCMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, object_id);\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_enable(struct fsl_mc_io *mc_io,\n+\t\t  uint32_t cmd_flags,\n+\t\t  uint16_t token)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_ENABLE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_disable(struct fsl_mc_io *mc_io,\n+\t\t   uint32_t cmd_flags,\n+\t\t   uint16_t token)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_DISABLE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_is_enabled(struct fsl_mc_io *mc_io,\n+\t\t      uint32_t cmd_flags,\n+\t\t      uint16_t token,\n+\t\t      int *en)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_IS_ENABLED,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_IS_ENABLED(cmd, *en);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_reset(struct fsl_mc_io *mc_io,\n+\t\t uint32_t cmd_flags,\n+\t\t uint16_t token)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_RESET,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_irq(struct fsl_mc_io *mc_io,\n+\t\t   uint32_t cmd_flags,\n+\t\t   uint16_t token,\n+\t\t   uint8_t irq_index,\n+\t\t   int *type,\n+\t\t   struct dpseci_irq_cfg *irq_cfg)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_IRQ,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_IRQ(cmd, irq_index);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_IRQ(cmd, *type, irq_cfg);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_set_irq(struct fsl_mc_io *mc_io,\n+\t\t   uint32_t cmd_flags,\n+\t\t   uint16_t token,\n+\t\t   uint8_t irq_index,\n+\t\t   struct dpseci_irq_cfg *irq_cfg)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_SET_IRQ,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_SET_IRQ(cmd, irq_index, irq_cfg);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_irq_enable(struct fsl_mc_io *mc_io,\n+\t\t\t  uint32_t cmd_flags,\n+\t\t\t  uint16_t token,\n+\t\t\t  uint8_t irq_index,\n+\t\t\t  uint8_t *en)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_IRQ_ENABLE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_IRQ_ENABLE(cmd, irq_index);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_IRQ_ENABLE(cmd, *en);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_set_irq_enable(struct fsl_mc_io *mc_io,\n+\t\t\t  uint32_t cmd_flags,\n+\t\t\t  uint16_t token,\n+\t\t\t  uint8_t irq_index,\n+\t\t\t  uint8_t en)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_SET_IRQ_ENABLE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_SET_IRQ_ENABLE(cmd, irq_index, en);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_irq_mask(struct fsl_mc_io *mc_io,\n+\t\t\tuint32_t cmd_flags,\n+\t\t\tuint16_t token,\n+\t\t\tuint8_t irq_index,\n+\t\t\tuint32_t *mask)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_IRQ_MASK,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_IRQ_MASK(cmd, irq_index);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_IRQ_MASK(cmd, *mask);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_set_irq_mask(struct fsl_mc_io *mc_io,\n+\t\t\tuint32_t cmd_flags,\n+\t\t\tuint16_t token,\n+\t\t\tuint8_t irq_index,\n+\t\t\tuint32_t mask)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_SET_IRQ_MASK,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_SET_IRQ_MASK(cmd, irq_index, mask);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_irq_status(struct fsl_mc_io *mc_io,\n+\t\t\t  uint32_t cmd_flags,\n+\t\t\t  uint16_t token,\n+\t\t\t  uint8_t irq_index,\n+\t\t\t  uint32_t *status)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_IRQ_STATUS,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_IRQ_STATUS(cmd, irq_index, *status);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_IRQ_STATUS(cmd, *status);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_clear_irq_status(struct fsl_mc_io *mc_io,\n+\t\t\t    uint32_t cmd_flags,\n+\t\t\t    uint16_t token,\n+\t\t\t    uint8_t irq_index,\n+\t\t\t    uint32_t status)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_CLEAR_IRQ_STATUS,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_CLEAR_IRQ_STATUS(cmd, irq_index, status);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_attributes(struct fsl_mc_io *mc_io,\n+\t\t\t  uint32_t cmd_flags,\n+\t\t\t  uint16_t token,\n+\t\t\t  struct dpseci_attr *attr)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_ATTR,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_ATTR(cmd, attr);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_set_rx_queue(struct fsl_mc_io *mc_io,\n+\t\t\tuint32_t cmd_flags,\n+\t\t\tuint16_t token,\n+\t\t\tuint8_t queue,\n+\t\t\tconst struct dpseci_rx_queue_cfg *cfg)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_SET_RX_QUEUE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_SET_RX_QUEUE(cmd, queue, cfg);\n+\n+\t/* send command to mc*/\n+\treturn mc_send_command(mc_io, &cmd);\n+}\n+\n+int dpseci_get_rx_queue(struct fsl_mc_io *mc_io,\n+\t\t\tuint32_t cmd_flags,\n+\t\t\tuint16_t token,\n+\t\t\tuint8_t queue,\n+\t\t\tstruct dpseci_rx_queue_attr *attr)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_RX_QUEUE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_RX_QUEUE(cmd, queue);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_RX_QUEUE(cmd, attr);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_get_tx_queue(struct fsl_mc_io *mc_io,\n+\t\t\tuint32_t cmd_flags,\n+\t\t\tuint16_t token,\n+\t\t\tuint8_t queue,\n+\t\t\tstruct dpseci_tx_queue_attr *attr)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_TX_QUEUE,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\tDPSECI_CMD_GET_TX_QUEUE(cmd, queue);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_TX_QUEUE(cmd, attr);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_get_sec_attr(struct fsl_mc_io\t\t*mc_io,\n+\t\t\tuint32_t\t\t\tcmd_flags,\n+\t\t\tuint16_t\t\t\ttoken,\n+\t\t\tstruct dpseci_sec_attr *attr)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_SEC_ATTR,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_SEC_ATTR(cmd, attr);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_get_sec_counters(struct fsl_mc_io\t\t*mc_io,\n+\t\t\t    uint32_t\t\t\tcmd_flags,\n+\t\tuint16_t\t\t\ttoken,\n+\t\tstruct dpseci_sec_counters *counters)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\t/* prepare command */\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_SEC_COUNTERS,\n+\t\t\t\t\t  cmd_flags,\n+\t\t\t\t\t  token);\n+\n+\t/* send command to mc*/\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* retrieve response parameters */\n+\tDPSECI_RSP_GET_SEC_COUNTERS(cmd, counters);\n+\n+\treturn 0;\n+}\n+\n+int dpseci_get_api_version(struct fsl_mc_io *mc_io,\n+\t\t\t   uint32_t cmd_flags,\n+\t\t\t   uint16_t *major_ver,\n+\t\t\t   uint16_t *minor_ver)\n+{\n+\tstruct mc_command cmd = { 0 };\n+\tint err;\n+\n+\tcmd.header = mc_encode_cmd_header(DPSECI_CMDID_GET_API_VERSION,\n+\t\t\t\t\tcmd_flags,\n+\t\t\t\t\t0);\n+\n+\terr = mc_send_command(mc_io, &cmd);\n+\tif (err)\n+\t\treturn err;\n+\n+\tDPSECI_RSP_GET_API_VERSION(cmd, *major_ver, *minor_ver);\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/bus/fslmc/mc/fsl_dpseci.h b/drivers/bus/fslmc/mc/fsl_dpseci.h\nnew file mode 100644\nindex 0000000..b8c6dcc\n--- /dev/null\n+++ b/drivers/bus/fslmc/mc/fsl_dpseci.h\n@@ -0,0 +1,668 @@\n+/*-\n+ * This file is provided under a dual BSD/GPLv2 license. When using or\n+ * redistributing this file, you may do so under either license.\n+ *\n+ *   BSD LICENSE\n+ *\n+ * Copyright 2013-2016 Freescale Semiconductor Inc.\n+ * Copyright (c) 2016 NXP.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\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 the\n+ * documentation and/or other materials provided with the distribution.\n+ * * Neither the name of the above-listed copyright holders nor the\n+ * names of any contributors may be used to endorse or promote products\n+ * derived from this software without specific prior written permission.\n+ *\n+ *   GPL LICENSE SUMMARY\n+ *\n+ * ALTERNATIVELY, this software may be distributed under the terms of the\n+ * GNU General Public License (\"GPL\") as published by the Free Software\n+ * Foundation, either version 2 of that License or (at your option) any\n+ * later version.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+ * POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#ifndef __FSL_DPSECI_H\n+#define __FSL_DPSECI_H\n+\n+/* Data Path SEC Interface API\n+ * Contains initialization APIs and runtime control APIs for DPSECI\n+ */\n+\n+struct fsl_mc_io;\n+\n+/**\n+ * General DPSECI macros\n+ */\n+\n+/**\n+ * Maximum number of Tx/Rx priorities per DPSECI object\n+ */\n+#define DPSECI_PRIO_NUM\t\t8\n+\n+/**\n+ * All queues considered; see dpseci_set_rx_queue()\n+ */\n+#define DPSECI_ALL_QUEUES\t(uint8_t)(-1)\n+\n+/**\n+ * dpseci_open() - Open a control session for the specified object\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @dpseci_id:\tDPSECI unique ID\n+ * @token:\tReturned token; use in subsequent API calls\n+ *\n+ * This function can be used to open a control session for an\n+ * already created object; an object may have been declared in\n+ * the DPL or by calling the dpseci_create() function.\n+ * This function returns a unique authentication token,\n+ * associated with the specific object ID and the specific MC\n+ * portal; this token must be used in all subsequent commands for\n+ * this specific object.\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_open(struct fsl_mc_io\t*mc_io,\n+\t\tuint32_t\t\tcmd_flags,\n+\t\tint\t\t\tdpseci_id,\n+\t\tuint16_t\t\t*token);\n+\n+/**\n+ * dpseci_close() - Close the control session of the object\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ *\n+ * After this function is called, no further operations are\n+ * allowed on the object without opening a new control session.\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_close(struct fsl_mc_io\t*mc_io,\n+\t\t uint32_t\t\tcmd_flags,\n+\t\t uint16_t\t\ttoken);\n+\n+/**\n+ * struct dpseci_cfg - Structure representing DPSECI configuration\n+ * @num_tx_queues: num of queues towards the SEC\n+ * @num_rx_queues: num of queues back from the SEC\n+ * @priorities: Priorities for the SEC hardware processing;\n+ *\t\teach place in the array is the priority of the tx queue\n+ *\t\ttowards the SEC,\n+ *\t\tvalid priorities are configured with values 1-8;\n+ */\n+struct dpseci_cfg {\n+\tuint8_t num_tx_queues;\n+\tuint8_t num_rx_queues;\n+\tuint8_t priorities[DPSECI_PRIO_NUM];\n+};\n+\n+/**\n+ * dpseci_create() - Create the DPSECI object\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @dprc_token:\tParent container token; '0' for default container\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @cfg:\tConfiguration structure\n+ * @obj_id: returned object id\n+ *\n+ * Create the DPSECI object, allocate required resources and\n+ * perform required initialization.\n+ *\n+ * The object can be created either by declaring it in the\n+ * DPL file, or by calling this function.\n+ *\n+ * The function accepts an authentication token of a parent\n+ * container that this object should be assigned to. The token\n+ * can be '0' so the object will be assigned to the default container.\n+ * The newly created object can be opened with the returned\n+ * object id and using the container's associated tokens and MC portals.\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_create(struct fsl_mc_io\t\t*mc_io,\n+\t\t  uint16_t\t\t\tdprc_token,\n+\t\t  uint32_t\t\t\tcmd_flags,\n+\t\t  const struct dpseci_cfg\t*cfg,\n+\t\t  uint32_t\t\t\t*obj_id);\n+\n+/**\n+ * dpseci_destroy() - Destroy the DPSECI object and release all its resources.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @dprc_token: Parent container token; '0' for default container\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @object_id:\tThe object id; it must be a valid id within the container that\n+ * created this object;\n+ *\n+ * The function accepts the authentication token of the parent container that\n+ * created the object (not the one that currently owns the object). The object\n+ * is searched within parent using the provided 'object_id'.\n+ * All tokens to the object must be closed before calling destroy.\n+ *\n+ * Return:\t'0' on Success; error code otherwise.\n+ */\n+int dpseci_destroy(struct fsl_mc_io\t*mc_io,\n+\t\t   uint16_t\t\tdprc_token,\n+\t\t   uint32_t\t\tcmd_flags,\n+\t\t   uint32_t\t\tobject_id);\n+\n+/**\n+ * dpseci_enable() - Enable the DPSECI, allow sending and receiving frames.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_enable(struct fsl_mc_io\t*mc_io,\n+\t\t  uint32_t\t\tcmd_flags,\n+\t\t  uint16_t\t\ttoken);\n+\n+/**\n+ * dpseci_disable() - Disable the DPSECI, stop sending and receiving frames.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_disable(struct fsl_mc_io\t*mc_io,\n+\t\t   uint32_t\t\tcmd_flags,\n+\t\t   uint16_t\t\ttoken);\n+\n+/**\n+ * dpseci_is_enabled() - Check if the DPSECI is enabled.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @en:\t\tReturns '1' if object is enabled; '0' otherwise\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_is_enabled(struct fsl_mc_io\t*mc_io,\n+\t\t      uint32_t\t\tcmd_flags,\n+\t\t      uint16_t\t\ttoken,\n+\t\t      int\t\t*en);\n+\n+/**\n+ * dpseci_reset() - Reset the DPSECI, returns the object to initial state.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_reset(struct fsl_mc_io\t*mc_io,\n+\t\t uint32_t\t\tcmd_flags,\n+\t\t uint16_t\t\ttoken);\n+\n+/**\n+ * struct dpseci_irq_cfg - IRQ configuration\n+ * @addr:\tAddress that must be written to signal a message-based interrupt\n+ * @val:\tValue to write into irq_addr address\n+ * @irq_num: A user defined number associated with this IRQ\n+ */\n+struct dpseci_irq_cfg {\n+\t     uint64_t\t\taddr;\n+\t     uint32_t\t\tval;\n+\t     int\t\tirq_num;\n+};\n+\n+/**\n+ * dpseci_set_irq() - Set IRQ information for the DPSECI to trigger an interrupt\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @irq_index:\tIdentifies the interrupt index to configure\n+ * @irq_cfg:\tIRQ configuration\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_set_irq(struct fsl_mc_io\t\t*mc_io,\n+\t\t   uint32_t\t\t\tcmd_flags,\n+\t\t   uint16_t\t\t\ttoken,\n+\t\t   uint8_t\t\t\tirq_index,\n+\t\t   struct dpseci_irq_cfg\t*irq_cfg);\n+\n+/**\n+ * dpseci_get_irq() - Get IRQ information from the DPSECI\n+ *\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @type:\tInterrupt type: 0 represents message interrupt\n+ *\t\ttype (both irq_addr and irq_val are valid)\n+ * @irq_cfg:\tIRQ attributes\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_irq(struct fsl_mc_io\t\t*mc_io,\n+\t\t   uint32_t\t\t\tcmd_flags,\n+\t\t   uint16_t\t\t\ttoken,\n+\t\t   uint8_t\t\t\tirq_index,\n+\t\t   int\t\t\t\t*type,\n+\t\t   struct dpseci_irq_cfg\t*irq_cfg);\n+\n+/**\n+ * dpseci_set_irq_enable() - Set overall interrupt state.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @en:\t\t\tInterrupt state - enable = 1, disable = 0\n+ *\n+ * Allows GPP software to control when interrupts are generated.\n+ * Each interrupt can have up to 32 causes.  The enable/disable control's the\n+ * overall interrupt state. if the interrupt is disabled no causes will cause\n+ * an interrupt\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_set_irq_enable(struct fsl_mc_io\t*mc_io,\n+\t\t\t  uint32_t\t\tcmd_flags,\n+\t\t\t  uint16_t\t\ttoken,\n+\t\t\t  uint8_t\t\tirq_index,\n+\t\t\t  uint8_t\t\ten);\n+\n+/**\n+ * dpseci_get_irq_enable() - Get overall interrupt state\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @en:\t\t\tReturned Interrupt state - enable = 1, disable = 0\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_irq_enable(struct fsl_mc_io\t*mc_io,\n+\t\t\t  uint32_t\t\tcmd_flags,\n+\t\t\t  uint16_t\t\ttoken,\n+\t\t\t  uint8_t\t\tirq_index,\n+\t\t\t  uint8_t\t\t*en);\n+\n+/**\n+ * dpseci_set_irq_mask() - Set interrupt mask.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @mask:\t\tevent mask to trigger interrupt;\n+ *\t\t\t\teach bit:\n+ *\t\t\t\t\t0 = ignore event\n+ *\t\t\t\t\t1 = consider event for asserting IRQ\n+ *\n+ * Every interrupt can have up to 32 causes and the interrupt model supports\n+ * masking/unmasking each cause independently\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_set_irq_mask(struct fsl_mc_io\t*mc_io,\n+\t\t\tuint32_t\t\tcmd_flags,\n+\t\t\tuint16_t\t\ttoken,\n+\t\t\tuint8_t\t\t\tirq_index,\n+\t\t\tuint32_t\t\tmask);\n+\n+/**\n+ * dpseci_get_irq_mask() - Get interrupt mask.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @mask:\t\tReturned event mask to trigger interrupt\n+ *\n+ * Every interrupt can have up to 32 causes and the interrupt model supports\n+ * masking/unmasking each cause independently\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_irq_mask(struct fsl_mc_io\t*mc_io,\n+\t\t\tuint32_t\t\tcmd_flags,\n+\t\t\tuint16_t\t\ttoken,\n+\t\t\tuint8_t\t\t\tirq_index,\n+\t\t\tuint32_t\t\t*mask);\n+\n+/**\n+ * dpseci_get_irq_status() - Get the current status of any pending interrupts\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @status:\t\tReturned interrupts status - one bit per cause:\n+ *\t\t\t\t\t0 = no interrupt pending\n+ *\t\t\t\t\t1 = interrupt pending\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_irq_status(struct fsl_mc_io\t*mc_io,\n+\t\t\t  uint32_t\t\tcmd_flags,\n+\t\t\t  uint16_t\t\ttoken,\n+\t\t\t  uint8_t\t\tirq_index,\n+\t\t\t  uint32_t\t\t*status);\n+\n+/**\n+ * dpseci_clear_irq_status() - Clear a pending interrupt's status\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\t\tToken of DPSECI object\n+ * @irq_index:\tThe interrupt index to configure\n+ * @status:\t\tbits to clear (W1C) - one bit per cause:\n+ *\t\t\t\t\t0 = don't change\n+ *\t\t\t\t\t1 = clear status bit\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_clear_irq_status(struct fsl_mc_io\t*mc_io,\n+\t\t\t    uint32_t\t\tcmd_flags,\n+\t\t\t    uint16_t\t\ttoken,\n+\t\t\t    uint8_t\t\tirq_index,\n+\t\t\t    uint32_t\t\tstatus);\n+\n+/**\n+ * struct dpseci_attr - Structure representing DPSECI attributes\n+ * @id: DPSECI object ID\n+ * @num_tx_queues: number of queues towards the SEC\n+ * @num_rx_queues: number of queues back from the SEC\n+ */\n+struct dpseci_attr {\n+\tint\tid;\n+\tuint8_t\tnum_tx_queues;\n+\tuint8_t\tnum_rx_queues;\n+};\n+\n+/**\n+ * dpseci_get_attributes() - Retrieve DPSECI attributes.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @attr:\tReturned object's attributes\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_attributes(struct fsl_mc_io\t*mc_io,\n+\t\t\t  uint32_t\t\tcmd_flags,\n+\t\t\t  uint16_t\t\ttoken,\n+\t\t\t  struct dpseci_attr\t*attr);\n+\n+/**\n+ * enum dpseci_dest - DPSECI destination types\n+ * @DPSECI_DEST_NONE: Unassigned destination; The queue is set in parked mode\n+ *\t\tand does not generate FQDAN notifications; user is expected to\n+ *\t\tdequeue from the queue based on polling or other user-defined\n+ *\t\tmethod\n+ * @DPSECI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN\n+ *\t\tnotifications to the specified DPIO; user is expected to dequeue\n+ *\t\tfrom the queue only after notification is received\n+ * @DPSECI_DEST_DPCON: The queue is set in schedule mode and does not generate\n+ *\t\tFQDAN notifications, but is connected to the specified DPCON\n+ *\t\tobject; user is expected to dequeue from the DPCON channel\n+ */\n+enum dpseci_dest {\n+\tDPSECI_DEST_NONE = 0,\n+\tDPSECI_DEST_DPIO = 1,\n+\tDPSECI_DEST_DPCON = 2\n+};\n+\n+/**\n+ * struct dpseci_dest_cfg - Structure representing DPSECI destination parameters\n+ * @dest_type: Destination type\n+ * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type\n+ * @priority: Priority selection within the DPIO or DPCON channel; valid values\n+ *\tare 0-1 or 0-7, depending on the number of priorities in that\n+ *\tchannel; not relevant for 'DPSECI_DEST_NONE' option\n+ */\n+struct dpseci_dest_cfg {\n+\tenum dpseci_dest\tdest_type;\n+\tint\t\t\tdest_id;\n+\tuint8_t\t\t\tpriority;\n+};\n+\n+/**\n+ * DPSECI queue modification options\n+ */\n+\n+/**\n+ * Select to modify the user's context associated with the queue\n+ */\n+#define DPSECI_QUEUE_OPT_USER_CTX\t\t0x00000001\n+\n+/**\n+ * Select to modify the queue's destination\n+ */\n+#define DPSECI_QUEUE_OPT_DEST\t\t\t0x00000002\n+\n+/**\n+ * Select to modify the queue's order preservation\n+ */\n+#define DPSECI_QUEUE_OPT_ORDER_PRESERVATION\t0x00000004\n+\n+/**\n+ * struct dpseci_rx_queue_cfg - DPSECI RX queue configuration\n+ * @options: Flags representing the suggested modifications to the queue;\n+ *\tUse any combination of 'DPSECI_QUEUE_OPT_<X>' flags\n+ * @order_preservation_en: order preservation configuration for the rx queue\n+ * valid only if 'DPSECI_QUEUE_OPT_ORDER_PRESERVATION' is contained in 'options'\n+ * @user_ctx: User context value provided in the frame descriptor of each\n+ *\tdequeued frame;\n+ *\tvalid only if 'DPSECI_QUEUE_OPT_USER_CTX' is contained in 'options'\n+ * @dest_cfg: Queue destination parameters;\n+ *\tvalid only if 'DPSECI_QUEUE_OPT_DEST' is contained in 'options'\n+ */\n+struct dpseci_rx_queue_cfg {\n+\tuint32_t options;\n+\tint order_preservation_en;\n+\tuint64_t user_ctx;\n+\tstruct dpseci_dest_cfg dest_cfg;\n+};\n+\n+/**\n+ * dpseci_set_rx_queue() - Set Rx queue configuration\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @queue:\tSelect the queue relative to number of\n+ *\t\tpriorities configured at DPSECI creation; use\n+ *\t\tDPSECI_ALL_QUEUES to configure all Rx queues identically.\n+ * @cfg:\tRx queue configuration\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_set_rx_queue(struct fsl_mc_io\t\t\t*mc_io,\n+\t\t\tuint32_t\t\t\t\tcmd_flags,\n+\t\t\tuint16_t\t\t\t\ttoken,\n+\t\t\tuint8_t\t\t\t\t\tqueue,\n+\t\t\tconst struct dpseci_rx_queue_cfg\t*cfg);\n+\n+/**\n+ * struct dpseci_rx_queue_attr - Structure representing attributes of Rx queues\n+ * @user_ctx: User context value provided in the frame descriptor of each\n+ *\tdequeued frame\n+ * @order_preservation_en: Status of the order preservation configuration\n+ *\t\t\t\ton the queue\n+ * @dest_cfg: Queue destination configuration\n+ * @fqid: Virtual FQID value to be used for dequeue operations\n+ */\n+struct dpseci_rx_queue_attr {\n+\tuint64_t\t\tuser_ctx;\n+\tint\t\t\torder_preservation_en;\n+\tstruct dpseci_dest_cfg\tdest_cfg;\n+\tuint32_t\t\tfqid;\n+};\n+\n+/**\n+ * dpseci_get_rx_queue() - Retrieve Rx queue attributes.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @queue:\tSelect the queue relative to number of\n+ *\t\t\t\tpriorities configured at DPSECI creation\n+ * @attr:\tReturned Rx queue attributes\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_rx_queue(struct fsl_mc_io\t\t*mc_io,\n+\t\t\tuint32_t\t\t\tcmd_flags,\n+\t\t\tuint16_t\t\t\ttoken,\n+\t\t\tuint8_t\t\t\t\tqueue,\n+\t\t\tstruct dpseci_rx_queue_attr\t*attr);\n+\n+/**\n+ * struct dpseci_tx_queue_attr - Structure representing attributes of Tx queues\n+ * @fqid: Virtual FQID to be used for sending frames to SEC hardware\n+ * @priority: SEC hardware processing priority for the queue\n+ */\n+struct dpseci_tx_queue_attr {\n+\tuint32_t fqid;\n+\tuint8_t priority;\n+};\n+\n+/**\n+ * dpseci_get_tx_queue() - Retrieve Tx queue attributes.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @queue:\tSelect the queue relative to number of\n+ *\t\t\t\tpriorities configured at DPSECI creation\n+ * @attr:\tReturned Tx queue attributes\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_tx_queue(struct fsl_mc_io\t\t*mc_io,\n+\t\t\tuint32_t\t\t\tcmd_flags,\n+\t\t\tuint16_t\t\t\ttoken,\n+\t\t\tuint8_t\t\t\t\tqueue,\n+\t\t\tstruct dpseci_tx_queue_attr\t*attr);\n+\n+/**\n+ * struct dpseci_sec_attr - Structure representing attributes of the SEC\n+ *\t\t\thardware accelerator\n+ * @ip_id:\tID for SEC.\n+ * @major_rev: Major revision number for SEC.\n+ * @minor_rev: Minor revision number for SEC.\n+ * @era: SEC Era.\n+ * @deco_num: The number of copies of the DECO that are implemented in\n+ * this version of SEC.\n+ * @zuc_auth_acc_num: The number of copies of ZUCA that are implemented\n+ * in this version of SEC.\n+ * @zuc_enc_acc_num: The number of copies of ZUCE that are implemented\n+ * in this version of SEC.\n+ * @snow_f8_acc_num: The number of copies of the SNOW-f8 module that are\n+ * implemented in this version of SEC.\n+ * @snow_f9_acc_num: The number of copies of the SNOW-f9 module that are\n+ * implemented in this version of SEC.\n+ * @crc_acc_num: The number of copies of the CRC module that are implemented\n+ * in this version of SEC.\n+ * @pk_acc_num:  The number of copies of the Public Key module that are\n+ * implemented in this version of SEC.\n+ * @kasumi_acc_num: The number of copies of the Kasumi module that are\n+ * implemented in this version of SEC.\n+ * @rng_acc_num: The number of copies of the Random Number Generator that are\n+ * implemented in this version of SEC.\n+ * @md_acc_num: The number of copies of the MDHA (Hashing module) that are\n+ * implemented in this version of SEC.\n+ * @arc4_acc_num: The number of copies of the ARC4 module that are implemented\n+ * in this version of SEC.\n+ * @des_acc_num: The number of copies of the DES module that are implemented\n+ * in this version of SEC.\n+ * @aes_acc_num: The number of copies of the AES module that are implemented\n+ * in this version of SEC.\n+ **/\n+\n+struct dpseci_sec_attr {\n+\tuint16_t\tip_id;\n+\tuint8_t\tmajor_rev;\n+\tuint8_t\tminor_rev;\n+\tuint8_t\tera;\n+\tuint8_t\tdeco_num;\n+\tuint8_t\tzuc_auth_acc_num;\n+\tuint8_t\tzuc_enc_acc_num;\n+\tuint8_t\tsnow_f8_acc_num;\n+\tuint8_t\tsnow_f9_acc_num;\n+\tuint8_t\tcrc_acc_num;\n+\tuint8_t\tpk_acc_num;\n+\tuint8_t\tkasumi_acc_num;\n+\tuint8_t\trng_acc_num;\n+\tuint8_t\tmd_acc_num;\n+\tuint8_t\tarc4_acc_num;\n+\tuint8_t\tdes_acc_num;\n+\tuint8_t\taes_acc_num;\n+};\n+\n+/**\n+ * dpseci_get_sec_attr() - Retrieve SEC accelerator attributes.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @attr:\tReturned SEC attributes\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_sec_attr(struct fsl_mc_io\t\t*mc_io,\n+\t\t\tuint32_t\t\t\tcmd_flags,\n+\t\t\tuint16_t\t\t\ttoken,\n+\t\t\tstruct dpseci_sec_attr\t\t*attr);\n+\n+/**\n+ * struct dpseci_sec_counters - Structure representing global SEC counters and\n+ *\t\t\t\tnot per dpseci counters\n+ * @dequeued_requests:\tNumber of Requests Dequeued\n+ * @ob_enc_requests:\tNumber of Outbound Encrypt Requests\n+ * @ib_dec_requests:\tNumber of Inbound Decrypt Requests\n+ * @ob_enc_bytes:\t\tNumber of Outbound Bytes Encrypted\n+ * @ob_prot_bytes:\t\tNumber of Outbound Bytes Protected\n+ * @ib_dec_bytes:\t\tNumber of Inbound Bytes Decrypted\n+ * @ib_valid_bytes:\t\tNumber of Inbound Bytes Validated\n+ */\n+struct dpseci_sec_counters {\n+\tuint64_t\tdequeued_requests;\n+\tuint64_t\tob_enc_requests;\n+\tuint64_t\tib_dec_requests;\n+\tuint64_t\tob_enc_bytes;\n+\tuint64_t\tob_prot_bytes;\n+\tuint64_t\tib_dec_bytes;\n+\tuint64_t\tib_valid_bytes;\n+};\n+\n+/**\n+ * dpseci_get_sec_counters() - Retrieve SEC accelerator counters.\n+ * @mc_io:\tPointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @token:\tToken of DPSECI object\n+ * @counters:\tReturned SEC counters\n+ *\n+ * Return:\t'0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_sec_counters(struct fsl_mc_io\t\t*mc_io,\n+\t\t\t    uint32_t\t\t\tcmd_flags,\n+\t\t\t    uint16_t\t\t\ttoken,\n+\t\t\t    struct dpseci_sec_counters\t*counters);\n+\n+/**\n+ * dpseci_get_api_version() - Get Data Path SEC Interface API version\n+ * @mc_io:  Pointer to MC portal's I/O object\n+ * @cmd_flags:\tCommand flags; one or more of 'MC_CMD_FLAG_'\n+ * @major_ver:\tMajor version of data path sec API\n+ * @minor_ver:\tMinor version of data path sec API\n+ *\n+ * Return:  '0' on Success; Error code otherwise.\n+ */\n+int dpseci_get_api_version(struct fsl_mc_io *mc_io,\n+\t\t\t   uint32_t cmd_flags,\n+\t\t\t   uint16_t *major_ver,\n+\t\t\t   uint16_t *minor_ver);\n+\n+#endif /* __FSL_DPSECI_H */\ndiff --git a/drivers/bus/fslmc/mc/fsl_dpseci_cmd.h b/drivers/bus/fslmc/mc/fsl_dpseci_cmd.h\nnew file mode 100644\nindex 0000000..97494f4\n--- /dev/null\n+++ b/drivers/bus/fslmc/mc/fsl_dpseci_cmd.h\n@@ -0,0 +1,255 @@\n+/*-\n+ * This file is provided under a dual BSD/GPLv2 license. When using or\n+ * redistributing this file, you may do so under either license.\n+ *\n+ *   BSD LICENSE\n+ *\n+ * Copyright 2013-2016 Freescale Semiconductor Inc.\n+ * Copyright (c) 2016 NXP.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are met:\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 the\n+ * documentation and/or other materials provided with the distribution.\n+ * * Neither the name of the above-listed copyright holders nor the\n+ * names of any contributors may be used to endorse or promote products\n+ * derived from this software without specific prior written permission.\n+ *\n+ *   GPL LICENSE SUMMARY\n+ *\n+ * ALTERNATIVELY, this software may be distributed under the terms of the\n+ * GNU General Public License (\"GPL\") as published by the Free Software\n+ * Foundation, either version 2 of that License or (at your option) any\n+ * later version.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+ * POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#ifndef _FSL_DPSECI_CMD_H\n+#define _FSL_DPSECI_CMD_H\n+\n+/* DPSECI Version */\n+#define DPSECI_VER_MAJOR\t\t\t\t5\n+#define DPSECI_VER_MINOR\t\t\t\t0\n+\n+/* Command IDs */\n+#define DPSECI_CMDID_CLOSE                              ((0x800 << 4) | (0x1))\n+#define DPSECI_CMDID_OPEN                               ((0x809 << 4) | (0x1))\n+#define DPSECI_CMDID_CREATE                             ((0x909 << 4) | (0x1))\n+#define DPSECI_CMDID_DESTROY                            ((0x989 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_API_VERSION                    ((0xa09 << 4) | (0x1))\n+\n+#define DPSECI_CMDID_ENABLE                             ((0x002 << 4) | (0x1))\n+#define DPSECI_CMDID_DISABLE                            ((0x003 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_ATTR                           ((0x004 << 4) | (0x1))\n+#define DPSECI_CMDID_RESET                              ((0x005 << 4) | (0x1))\n+#define DPSECI_CMDID_IS_ENABLED                         ((0x006 << 4) | (0x1))\n+\n+#define DPSECI_CMDID_SET_IRQ                            ((0x010 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_IRQ                            ((0x011 << 4) | (0x1))\n+#define DPSECI_CMDID_SET_IRQ_ENABLE                     ((0x012 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_IRQ_ENABLE                     ((0x013 << 4) | (0x1))\n+#define DPSECI_CMDID_SET_IRQ_MASK                       ((0x014 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_IRQ_MASK                       ((0x015 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_IRQ_STATUS                     ((0x016 << 4) | (0x1))\n+#define DPSECI_CMDID_CLEAR_IRQ_STATUS                   ((0x017 << 4) | (0x1))\n+\n+#define DPSECI_CMDID_SET_RX_QUEUE                       ((0x194 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_RX_QUEUE                       ((0x196 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_TX_QUEUE                       ((0x197 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_SEC_ATTR                       ((0x198 << 4) | (0x1))\n+#define DPSECI_CMDID_GET_SEC_COUNTERS                   ((0x199 << 4) | (0x1))\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_OPEN(cmd, dpseci_id) \\\n+\tMC_CMD_OP(cmd, 0, 0,  32, int,      dpseci_id)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_CREATE(cmd, cfg) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->priorities[0]);\\\n+\tMC_CMD_OP(cmd, 0, 8,  8,  uint8_t,  cfg->priorities[1]);\\\n+\tMC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  cfg->priorities[2]);\\\n+\tMC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  cfg->priorities[3]);\\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  cfg->priorities[4]);\\\n+\tMC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  cfg->priorities[5]);\\\n+\tMC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  cfg->priorities[6]);\\\n+\tMC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  cfg->priorities[7]);\\\n+\tMC_CMD_OP(cmd, 1, 0,  8,  uint8_t,  cfg->num_tx_queues);\\\n+\tMC_CMD_OP(cmd, 1, 8,  8,  uint8_t,  cfg->num_rx_queues);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_IS_ENABLED(cmd, en) \\\n+\tMC_RSP_OP(cmd, 0, 0,  1,  int,\t    en)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_SET_IRQ(cmd, irq_index, irq_cfg) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  irq_index);\\\n+\tMC_CMD_OP(cmd, 0, 32, 32, uint32_t, irq_cfg->val);\\\n+\tMC_CMD_OP(cmd, 1, 0,  64, uint64_t, irq_cfg->addr);\\\n+\tMC_CMD_OP(cmd, 2, 0,  32, int,\t    irq_cfg->irq_num); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_IRQ(cmd, irq_index) \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_IRQ(cmd, type, irq_cfg) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0, 0,  32, uint32_t, irq_cfg->val); \\\n+\tMC_RSP_OP(cmd, 1, 0,  64, uint64_t, irq_cfg->addr);\\\n+\tMC_RSP_OP(cmd, 2, 0,  32, int,\t    irq_cfg->irq_num); \\\n+\tMC_RSP_OP(cmd, 2, 32, 32, int,\t    type); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_SET_IRQ_ENABLE(cmd, irq_index, enable_state) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  enable_state); \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_IRQ_ENABLE(cmd, irq_index) \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_IRQ_ENABLE(cmd, enable_state) \\\n+\tMC_RSP_OP(cmd, 0, 0,  8,  uint8_t,  enable_state)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_SET_IRQ_MASK(cmd, irq_index, mask) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  32, uint32_t, mask); \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_IRQ_MASK(cmd, irq_index) \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_IRQ_MASK(cmd, mask) \\\n+\tMC_RSP_OP(cmd, 0, 0,  32, uint32_t, mask)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_IRQ_STATUS(cmd, irq_index, status) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  32, uint32_t, status);\\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_IRQ_STATUS(cmd, status) \\\n+\tMC_RSP_OP(cmd, 0, 0,  32, uint32_t,  status)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_CLEAR_IRQ_STATUS(cmd, irq_index, status) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  32, uint32_t, status); \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  irq_index); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_ATTR(cmd, attr) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0, 0,  32, int,\t    attr->id); \\\n+\tMC_RSP_OP(cmd, 1, 0,  8,  uint8_t,  attr->num_tx_queues); \\\n+\tMC_RSP_OP(cmd, 1, 8,  8,  uint8_t,  attr->num_rx_queues); \\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_SET_RX_QUEUE(cmd, queue, cfg) \\\n+do { \\\n+\tMC_CMD_OP(cmd, 0, 0,  32, int,      cfg->dest_cfg.dest_id); \\\n+\tMC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  cfg->dest_cfg.priority); \\\n+\tMC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  queue); \\\n+\tMC_CMD_OP(cmd, 0, 48, 4,  enum dpseci_dest, cfg->dest_cfg.dest_type); \\\n+\tMC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->user_ctx); \\\n+\tMC_CMD_OP(cmd, 2, 0,  32, uint32_t, cfg->options);\\\n+\tMC_CMD_OP(cmd, 2, 32, 1,  int,\t\tcfg->order_preservation_en);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_RX_QUEUE(cmd, queue) \\\n+\tMC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  queue)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_RX_QUEUE(cmd, attr) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0, 0,  32, int,      attr->dest_cfg.dest_id);\\\n+\tMC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->dest_cfg.priority);\\\n+\tMC_RSP_OP(cmd, 0, 48, 4,  enum dpseci_dest, attr->dest_cfg.dest_type);\\\n+\tMC_RSP_OP(cmd, 1, 0,  8,  uint64_t,  attr->user_ctx);\\\n+\tMC_RSP_OP(cmd, 2, 0,  32, uint32_t,  attr->fqid);\\\n+\tMC_RSP_OP(cmd, 2, 32, 1,  int,\t\t attr->order_preservation_en);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_CMD_GET_TX_QUEUE(cmd, queue) \\\n+\tMC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  queue)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_TX_QUEUE(cmd, attr) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0, 32, 32, uint32_t,  attr->fqid);\\\n+\tMC_RSP_OP(cmd, 1, 0,  8,  uint8_t,   attr->priority);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_SEC_ATTR(cmd, attr) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0,  0, 16, uint16_t,  attr->ip_id);\\\n+\tMC_RSP_OP(cmd, 0, 16,  8,  uint8_t,  attr->major_rev);\\\n+\tMC_RSP_OP(cmd, 0, 24,  8,  uint8_t,  attr->minor_rev);\\\n+\tMC_RSP_OP(cmd, 0, 32,  8,  uint8_t,  attr->era);\\\n+\tMC_RSP_OP(cmd, 1,  0,  8,  uint8_t,  attr->deco_num);\\\n+\tMC_RSP_OP(cmd, 1,  8,  8,  uint8_t,  attr->zuc_auth_acc_num);\\\n+\tMC_RSP_OP(cmd, 1, 16,  8,  uint8_t,  attr->zuc_enc_acc_num);\\\n+\tMC_RSP_OP(cmd, 1, 32,  8,  uint8_t,  attr->snow_f8_acc_num);\\\n+\tMC_RSP_OP(cmd, 1, 40,  8,  uint8_t,  attr->snow_f9_acc_num);\\\n+\tMC_RSP_OP(cmd, 1, 48,  8,  uint8_t,  attr->crc_acc_num);\\\n+\tMC_RSP_OP(cmd, 2,  0,  8,  uint8_t,  attr->pk_acc_num);\\\n+\tMC_RSP_OP(cmd, 2,  8,  8,  uint8_t,  attr->kasumi_acc_num);\\\n+\tMC_RSP_OP(cmd, 2, 16,  8,  uint8_t,  attr->rng_acc_num);\\\n+\tMC_RSP_OP(cmd, 2, 32,  8,  uint8_t,  attr->md_acc_num);\\\n+\tMC_RSP_OP(cmd, 2, 40,  8,  uint8_t,  attr->arc4_acc_num);\\\n+\tMC_RSP_OP(cmd, 2, 48,  8,  uint8_t,  attr->des_acc_num);\\\n+\tMC_RSP_OP(cmd, 2, 56,  8,  uint8_t,  attr->aes_acc_num);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type, arg_name */\n+#define DPSECI_RSP_GET_SEC_COUNTERS(cmd, counters) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0,  0, 64, uint64_t,  counters->dequeued_requests);\\\n+\tMC_RSP_OP(cmd, 1,  0, 64, uint64_t,  counters->ob_enc_requests);\\\n+\tMC_RSP_OP(cmd, 2,  0, 64, uint64_t,  counters->ib_dec_requests);\\\n+\tMC_RSP_OP(cmd, 3,  0, 64, uint64_t,  counters->ob_enc_bytes);\\\n+\tMC_RSP_OP(cmd, 4,  0, 64, uint64_t,  counters->ob_prot_bytes);\\\n+\tMC_RSP_OP(cmd, 5,  0, 64, uint64_t,  counters->ib_dec_bytes);\\\n+\tMC_RSP_OP(cmd, 6,  0, 64, uint64_t,  counters->ib_valid_bytes);\\\n+} while (0)\n+\n+/*                cmd, param, offset, width, type,      arg_name */\n+#define DPSECI_RSP_GET_API_VERSION(cmd, major, minor) \\\n+do { \\\n+\tMC_RSP_OP(cmd, 0, 0,  16, uint16_t, major);\\\n+\tMC_RSP_OP(cmd, 0, 16, 16, uint16_t, minor);\\\n+} while (0)\n+\n+#endif /* _FSL_DPSECI_CMD_H */\ndiff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map\nindex 5167262..c4b3408 100644\n--- a/drivers/bus/fslmc/rte_bus_fslmc_version.map\n+++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map\n@@ -35,6 +35,16 @@ DPDK_17.02 {\n         dpni_set_rx_tc_dist;\n         dpni_set_tx_confirmation_mode;\n         dpni_set_unicast_promisc;\n+        dpseci_close;\n+        dpseci_disable;\n+        dpseci_enable;\n+        dpseci_get_attributes;\n+        dpseci_get_rx_queue;\n+        dpseci_get_sec_counters;\n+        dpseci_get_tx_queue;\n+        dpseci_open;\n+        dpseci_reset;\n+        dpseci_set_rx_queue;\n         rte_fslmc_driver_register;\n         rte_fslmc_driver_unregister;\n \n",
    "prefixes": [
        "dpdk-dev",
        "PATCHv6",
        "08/33"
    ]
}