{"id":135,"date":"2023-11-26T13:52:08","date_gmt":"2023-11-26T04:52:08","guid":{"rendered":"https:\/\/www.aisoit.com\/?p=135"},"modified":"2024-02-13T19:02:46","modified_gmt":"2024-02-13T10:02:46","slug":"arm_optee_kinibi%e5%9f%ba%e7%a4%8e_","status":"publish","type":"post","link":"https:\/\/www.aisoit.com\/?p=135","title":{"rendered":"ARM_optee_kinibi\u57fa\u790e_"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1.0 MMU\u5173\u8054\u5e38\u7528\u7b80\u79f0<\/h2>\n\n\n\n<p>ref1: <a href=\"https:\/\/zhuanlan.zhihu.com\/p\/108425561\">\u3010\u8f6c\u3011\u6df1\u5165\u7406\u89e3 TLB \u539f\u7406<\/a><\/p>\n\n\n\n<p>ref2: <a href=\"https:\/\/www.cnblogs.com\/sky-heaven\/p\/15941385.html\">[mmu\/cache]-ARM MMU\u7684\u5b66\u4e60\u7b14\u8bb0-\u4e00\u7bc7\u5c31\u591f\u4e86\u3010\u8f6c\u3011<\/a><\/p>\n\n\n\n<p>MMU: Memory Management Unit<\/p>\n\n\n\n<p>TLB: Translation lookaside buffer<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        PGD:  Page Global Dir\n        PUD:  Page Upper Dir\n        PMD:  Page Middle Dir\n        PTE:  Page Table\n    VA: virtual address\n    PA: physical address<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 MMU\u6982\u5ff5\u4ecb\u7ecd<\/h3>\n\n\n\n<p>MMU\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206: TLB maintenance \u548c address translation MMU\u7684\u4f5c\u7528\uff0c\u4e3b\u8981\u662f\u5b8c\u6210\u5730\u5740\u7684\u7ffb\u8bd1\uff0c \u65e0\u8bba\u662fmain-memory\u5730\u5740(DDR\u5730\u5740)\uff0c \u8fd8\u662fIO\u5730\u5740(\u8bbe\u5907device\u5730\u5740)\uff0c \u5728\u5f00\u542f\u4e86MMU\u7684\u7cfb\u7edf\u4e2d\uff0cCPU\u53d1\u8d77\u7684\u6307\u4ee4\u8bfb\u53d6\u3001\u6570\u636e\u8bfb\u5199\u90fd\u662f\u865a\u62df\u5730\u5740\uff0c \u5728ARM Core\u5185\u90e8\uff0c\u4f1a\u5148\u7ecf\u8fc7MMU\u5c06\u8be5\u865a\u62df\u5730\u5740\u81ea\u52a8\u8f6c\u6362\u6210\u7269\u7406\u5730\u5740\uff0c \u7136\u540e\u5728\u5c06\u7269\u7406\u5730\u5740\u53d1\u9001\u5230AXI\u603b\u7ebf\u4e0a\uff0c\u5b8c\u6210\u771f\u6b63\u7684\u7269\u7406\u5185\u5b58\u3001\u7269\u7406\u8bbe\u5907\u7684\u8bfb\u5199\u8bbf\u95ee<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u56db\u7ea7\u9875\u8868\u67e5\u627e\u8fc7\u7a0b<\/h3>\n\n\n\n<p>\u9700\u8981\u56db\u6b21\u5185\u5b58\u8bbf\u95ee\u3002\u9875\u8868\u67e5\u627e\u8fc7\u7a0b\u7684\u793a\u4f8b\u5982\u4e0b\u56fe\u6240\u793a<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/fc52e682a76e6c4d825c2d74da2e3a13\/image.png\" alt=\"\" style=\"width:566px;height:auto\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">1.3 TLB\u7684\u7279\u6b8a<\/h3>\n\n\n\n<p>\u865a\u62df\u5730\u5740\u6620\u5c04\u7269\u7406\u5730\u5740\u7684\u6700\u5c0f\u5355\u4f4d\u662f4KB\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    dec: 4096\n\n    bin: 1000000000000<\/code><\/pre>\n\n\n\n<p>\u6240\u4ee5TLB\u5176\u5b9e\u4e0d\u9700\u8981\u5b58\u50a8\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u4f4e12\u4f4d(\u56e0\u4e3a\u4f4e12\u4f4d\u662f\u4e00\u6837\u7684\uff0c\u6839\u672c\u6ca1\u5fc5\u8981\u5b58\u50a8)\u3002<\/p>\n\n\n\n<p>\u53e6\u5916\uff0c\u6211\u4eec\u5982\u679c\u547d\u4e2dcache\uff0c\u80af\u5b9a\u662f\u4e00\u6b21\u6027\u4ececache\u4e2d\u62ff\u51fa\u6574\u4e2a\u6570\u636e\u3002\u6240\u4ee5\u865a\u62df\u5730\u5740\u4e0d\u9700\u8981offset\u57df\u3002<\/p>\n\n\n\n<p>index\u57df\u662f\u5426\u9700\u8981\u5462\uff1f\u8fd9\u53d6\u51b3\u4e8ecache\u7684\u7ec4\u7ec7\u5f62\u5f0f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.4 \u591a\u8fdb\u7a0b\u9700\u8981\u591a\u4e2aTLB<\/h3>\n\n\n\n<p>\u4f8b\u5982\uff0c\u4e24\u4e2auser\u8fdb\u7a0b\u8fdb\u884c\u5207\u6362\u65f6\uff0c<\/p>\n\n\n\n<p>TTBR0_EL1\u662f\u8981\u4ece\u4e00\u4e2auser\u7684\u9875\u8868\u5730\u5740\uff0c\u5207\u6362\u5230\u53e6\u5916\u4e00\u4e2auser\u7684\u9875\u8868\u5730\u5740\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/4189c41e6e92f51a39b1bece09a3e828\/image.png\" alt=\"\" style=\"width:551px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">2.1 secure boot<\/h2>\n\n\n\n<p>ref: https:\/\/logmi.jp\/tech\/articles\/324297<br><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/1adb60f6f847cedc29a810aa69163d85\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/c32056a09c3d7d665392f73c0560b85b\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">2.2 OP-TEE\u3068TEE\u306e\u6a19\u6e96\u5316API<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/62dbd50d6475958b5235c71035eaec1b\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/61ba2b937aef9896360b73d22666abee\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/18fd6aeafe83ff6e6f2d3f2eaa199947\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">2.3 \u5982\u679c\u542f\u7528\u4e86hypervisor<\/h2>\n\n\n\n<p>(Two Stage Translations)<\/p>\n\n\n\n<p>VA\u2014&gt;PA\u53d8\u6210\u4e86VA\u2014&gt;IPA\u2014&gt;PA<\/p>\n\n\n\n<p>IPA : intermediate physical address<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/29dd5edf1e5a66640d75be30c6f50ab2\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">3.1 TEE parts and working sequence<\/h2>\n\n\n\n<p>ref: https:\/\/googleprojectzero.blogspot.com\/2017\/07\/trust-issues-exploiting-trustzone-tees.html<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/f709642abe5e49cd9b598b42804c4ec2\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>*TOS: Trusted Operating System<\/p>\n\n\n\n<p>Two major TEE implementations exist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Qualcomm\u2019s \u201cQSEE\u201d<\/li>\n\n\n\n<li>Trustonic\u2019s \u201cKinibi\u201d.<\/li>\n<\/ul>\n\n\n\n<p>In order for the \u201cNormal World\u201d to be able to interact with the TEE and the applications within it, the authors of the TEE must also provide:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>user-libraries<\/li>\n\n\n\n<li>daemons<\/li>\n\n\n\n<li>kernel drivers<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3.2 request load TA with TA UUID<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/8f61e961d4de68f893c064be7b8ea11d\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<ol class=\"wp-block-list\">\n<li>User-mode process wishes to load a trusted application(TA).<\/li>\n\n\n\n<li>Sending a request to a special daemon \u201cmcDriverDaemon\u201d, with UUID.<\/li>\n\n\n\n<li>The daemon may load trustlets from one of two paths with the UUID.<\/li>\n\n\n\n<li>The daemon simply contacts Trustonic\u2019s driver and issues a set of ioctls to pass request to the TEE<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">3.3 cause some security problem<\/h2>\n\n\n\n<p>ref: https:\/\/bugs.chromium.org\/p\/project-zero\/issues\/detail?id=1239<\/p>\n\n\n\n<p>While the load request itself specifies the UUID of the trustlet to be loaded,<\/p>\n\n\n\n<p>the daemon only uses the UUID to locate the binary,<\/p>\n\n\n\n<p>and doesn&#8217;t ensure that it matches the UUID encoded in the trustlet&#8217;s header.<\/p>\n\n\n\n<p>Therefore, it is possible to load any trustlet (regardless of UUID) by placing a binary with an arbitrary UUID (e.g., 07050501000000000000000000000020.tlbin) in the data partition&#8217;s registry directory,<\/p>\n\n\n\n<p>and subsequently sending a load request with the same UUID to mcDriverDaemon.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.1 confirm TEE standard API in trustonic SDK<\/h2>\n\n\n\n<p><a href=\"https:\/\/globalplatform.org\/wp-content\/uploads\/2010\/07\/TEE_Client_API_Specification-V1.0.pdf\">TEE_Client_API_Specification-V1.0.pdf<\/a><\/p>\n\n\n\n<p>TEE Client API<\/p>\n\n\n\n<p>t-base-dev-kit\/t-sdk\/TlcSdk\/Public\/GP\/tee_client_api.h<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"TEEC_EXPORT TEEC_Result TEEC_InitializeContext(\n    const char   *name,\n    TEEC_Context *context);\n\nTEEC_EXPORT TEEC_Result  TEEC_OpenSession (\n    TEEC_Context    *context,\n    TEEC_Session    *session,\n    const TEEC_UUID *destination,\n    uint32_t        connectionMethod,\n    const void      *connectionData,\n    TEEC_Operation  *operation,\n    uint32_t        *returnOrigin);\n\nTEEC_EXPORT TEEC_Result TEEC_InvokeCommand(\n    TEEC_Session     *session,\n    uint32_t         commandID,\n    TEEC_Operation   *operation,\n    uint32_t         *returnOrigin);\n\nTEEC_EXPORT void  TEEC_CloseSession (\n    TEEC_Session *session);\n\nTEEC_EXPORT void  TEEC_FinalizeContext(\n    TEEC_Context *context);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_InitializeContext<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">char<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">context<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Result<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_OpenSession<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Session<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_UUID<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">destination,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #A3BE8C\">connectionMethod,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">const<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">connectionData,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Operation<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">operation,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">returnOrigin<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_InvokeCommand<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Session<\/span><span style=\"color: #D8DEE9FF\">     <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #A3BE8C\">commandID,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Operation<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">operation,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">returnOrigin<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_CloseSession<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_FinalizeContext<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">context<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>TEE Internal core API<\/p>\n\n\n\n<p>t-base-dev-kit\/t-sdk\/TlSdk\/Public\/GPD_TEE_Internal_API\/tee_internal_api.h<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"EXTERN_C TEE_Result TA_EXPORT TA_CreateEntryPoint(void);\n\nEXTERN_C TEE_Result TA_EXPORT TA_OpenSessionEntryPoint(\n        uint32_t    nParamTypes,\n        TEE_Param   pParams[4],\n        void**      ppSessionContext);\n\nEXTERN_C TEE_Result TA_EXPORT TA_InvokeCommandEntryPoint(\n        void*       pSessionContext,\n        uint32_t    nCommandID,\n        uint32_t    nParamTypes,\n        TEE_Param   pParams[4]);\n\nEXTERN_C void TA_EXPORT TA_CloseSessionEntryPoint(\n        void*       pSessionContext);\n\nEXTERN_C void TA_EXPORT TA_DestroyEntryPoint(void);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEE_Result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_CreateEntryPoint<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEE_Result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_OpenSessionEntryPoint<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #A3BE8C\">nParamTypes,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">TEE_Param<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #A3BE8C\">pParams[<\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #A3BE8C\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">void**<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #A3BE8C\">ppSessionContext<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEE_Result<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_InvokeCommandEntryPoint<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">void*<\/span><span style=\"color: #D8DEE9FF\">       <\/span><span style=\"color: #A3BE8C\">pSessionContext,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #A3BE8C\">nCommandID,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #A3BE8C\">nParamTypes,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">TEE_Param<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #A3BE8C\">pParams[<\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #A3BE8C\">]<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_CloseSessionEntryPoint<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">void*<\/span><span style=\"color: #D8DEE9FF\">       <\/span><span style=\"color: #A3BE8C\">pSessionContext<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TA_DestroyEntryPoint<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">4.2 The TEE Client API Architecture<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/60a98fd7fff5a644bcf7602f815eda49\/TEEC_API_Architecture.png\" alt=\"\" style=\"width:453px;height:auto\"\/><\/figure><\/div>\n\n\n<p>A Shared Memory block is a region of memory allocated in the context of the Client Application memory<br>space that can be used to transfer data between that Client Application and a Trusted Application.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2.2 Share memory API<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/f90c5650bf275cdfcb3d6aa51abe0b89\/TEE_ShareMemory.png\" alt=\"\" style=\"width:479px;height:auto\"\/><\/figure><\/div>\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"TEEC_EXPORT TEEC_Result  TEEC_RegisterSharedMemory(\n    TEEC_Context      *context,\n    TEEC_SharedMemory *sharedMem);\n\nTEEC_EXPORT TEEC_Result  TEEC_AllocateSharedMemory(\n    TEEC_Context      *context,\n    TEEC_SharedMemory *sharedMem);\n\nTEEC_EXPORT void  TEEC_ReleaseSharedMemory (\n    TEEC_SharedMemory *sharedMem);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Result<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_RegisterSharedMemory<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_SharedMemory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">sharedMem<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Result<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_AllocateSharedMemory<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">context,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_SharedMemory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">sharedMem<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">TEEC_EXPORT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">void<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">TEEC_ReleaseSharedMemory<\/span><span style=\"color: #D8DEE9FF\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_SharedMemory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">sharedMem<\/span><span style=\"color: #D8DEE9FF\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4.2.3 Share memory Synchronization<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/7855aaf988b6ae3971053d8ad4eb3c89\/TEE_Sync.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>three temporal states for the Client application (A, B, D)<\/li>\n\n\n\n<li>one temporal states for the Trusted application (C)<\/li>\n\n\n\n<li>two synchronization operations (1, 2)<\/li>\n<\/ul>\n\n\n\n<p>Sync operation 1: from state A =&gt; states B and C (parallel in the two env).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ensure input buffers are synchronized from the TEEC\u201fs view of memory to the TA\u201fs view of it.<\/li>\n<\/ul>\n\n\n\n<p>Sync operation 2: from states B and C (parallel in the two env) =&gt; state D.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ensure output buffers are synchronized from the TA\u201fs view of memory to the TEEC\u201fs view of memory.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.2.4 live memory, synchronization rules<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Marked as input only: in states &#8220;B and C&#8221;, TEEC can only read, TA can only read.<\/li>\n\n\n\n<li>Marked as input and output: in states &#8220;B and C&#8221;, TEEC neither read nor write, TA may read and write.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">4.3 Fundamental Concepts<\/h2>\n\n\n\n<p><strong>TEE Contexts<\/strong> : an abstraction of the logical connection which exists between <code>TEEC<\/code> and <code>TA<\/code><\/p>\n\n\n\n<p><strong>Sessions<\/strong> : an abstraction of the logical connection which exists between <code>TEEC<\/code> and <code>TA<\/code>, A Session is opened by <code>TEEC<\/code> within the scope of a particular TEE Context. When creating a new Session, <code>TEEC<\/code> must identify the <code>UUID<\/code> of connecting <code>TA<\/code>.<\/p>\n\n\n\n<p><strong>Commands<\/strong> : the unit of communication between a Client Application and a Trusted Application within a<br>Session.<\/p>\n\n\n\n<p><strong>Operation Payload<\/strong> : a set of Operation Parameters, up to 4 Parameters. for An operation to open a Session or to invoke a generic Command.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/* Type definitions *\/\ntypedef struct TEEC_Context {\n    TEEC_Context_IMP imp;\n} TEEC_Context;\n\ntypedef struct TEEC_Session {\n    TEEC_Session_IMP imp;\n} TEEC_Session;\n\ntypedef struct TEEC_SharedMemory {\n    union {\n        void                *buffer;\n        int                 fd;\n    };\n    size_t                  size;\n    uint32_t                flags;\n    TEEC_SharedMemory_IMP   imp;\n} TEEC_SharedMemory;\n\ntypedef struct TEEC_Operation {\n    uint32_t            started;\n    uint32_t            paramTypes;\n    TEEC_Parameter      params[4];\n    TEEC_Operation_IMP  imp;\n} TEEC_Operation;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">\/*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Type<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">definitions<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Context<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context_IMP<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">imp<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Context;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Session_IMP<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">imp<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Session;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_SharedMemory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">union<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">buffer<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">int<\/span><span style=\"color: #D8DEE9FF\">                 <\/span><span style=\"color: #A3BE8C\">fd<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    }<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">size_t<\/span><span style=\"color: #D8DEE9FF\">                  <\/span><span style=\"color: #A3BE8C\">size<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #A3BE8C\">flags<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_SharedMemory_IMP<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #A3BE8C\">imp<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_SharedMemory;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TEEC_Operation<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">started<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">paramTypes<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Parameter<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #A3BE8C\">params[<\/span><span style=\"color: #B48EAD\">4<\/span><span style=\"color: #A3BE8C\">]<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Operation_IMP<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">imp<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Operation;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"typedef struct {\n    uint32_t                    open_mode;\n} TEEC_Context_IMP;\n\ntypedef struct {\n    uint32_t                    sessionId;\n    TEEC_Context_IMP            reserved1;\n    void                        *reserved2_tci; \/\/ TCI used in tests for old versions\n    bool                        reserved3;\n    pthread_mutex_t             reserved4;\n} TEEC_Session_IMP;\n\ntypedef struct {\n    bool                        reserved;\n} TEEC_SharedMemory_IMP;\n\ntypedef struct {\n    void                        *reserved;\n} TEEC_Operation_IMP;\n\ntypedef union {\n    TEEC_TempMemoryReference        tmpref;\n    TEEC_RegisteredMemoryReference  memref;\n    TEEC_Value                      value;\n} TEEC_Parameter;\n\ntypedef struct {\n    void    *buffer;\n    size_t  size;\n} TEEC_TempMemoryReference;\n\ntypedef struct {\n    TEEC_SharedMemory *parent;\n    size_t  size;\n    size_t  offset;\n} TEEC_RegisteredMemoryReference;\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #A3BE8C\">open_mode<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Context_IMP;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #A3BE8C\">sessionId<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Context_IMP<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">reserved1<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">reserved2_tci<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">\/\/<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TCI<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">used<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tests<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">old<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">versions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">bool<\/span><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #A3BE8C\">reserved3<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">pthread_mutex_t<\/span><span style=\"color: #D8DEE9FF\">             <\/span><span style=\"color: #A3BE8C\">reserved4<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Session_IMP;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">bool<\/span><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #A3BE8C\">reserved<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_SharedMemory_IMP;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #D8DEE9FF\">                        <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">reserved<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Operation_IMP;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">union<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_TempMemoryReference<\/span><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #A3BE8C\">tmpref<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_RegisteredMemoryReference<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">memref<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_Value<\/span><span style=\"color: #D8DEE9FF\">                      <\/span><span style=\"color: #A3BE8C\">value<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_Parameter;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">buffer<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">size_t<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">size<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_TempMemoryReference;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">typedef<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">struct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">TEEC_SharedMemory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">parent<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">size_t<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">size<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">size_t<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #A3BE8C\">offset<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">} TEEC_RegisteredMemoryReference;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">5.1 TRUSTONIC\u2019S KINIBI TEE IMPLEMENTATION<\/h2>\n\n\n\n<p>ref: https:\/\/azeria-labs.com\/trustonics-kinibi-tee-implementation\/<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/51bf5a6d196b39a26cfab16aa952dd39\/image.png\" alt=\"\" style=\"width:583px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">5.2 TRUSTED APPLICATIONS AND TRUSTED DRIVERS<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/79ce3761fc66ae67f7241ef20a785f0a\/image.png\" alt=\"\" style=\"width:575px;height:auto\"\/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">5.3 tlbin MCLF files.<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>MCLF       Mobicore Loadable Format<\/code><\/pre>\n\n\n\n<p>The MCLF files for TAs are typically stored in the folders:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\/system\/vendor\/app\/McRegistry<\/li>\n\n\n\n<li>\/system\/app\/mcRegistry<\/li>\n\n\n\n<li>\/data\/app\/mcRegistry<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/48c41d1a6a45de529a24b85c3bfe4560\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">5.3.2 mcOpenTrustlet<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>TCI   Trustlet Connector Interface, CA communicates with TA via TCI\nMCI   MobiCore Control Interface,\n      This driver communicates with the TEE RTM via MCI<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/bbc70bb2ec5b07781ffbf658f20a644b\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<ol class=\"wp-block-list\">\n<li>CA attempts to establish a session to a TA using mcOpenTrustlet.<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>trustedapp: memory buffer containing the Trusted Application binary.<\/li>\n\n\n\n<li>tLen: length of the memory buffer containing the Trusted Application<\/li>\n\n\n\n<li>tci: TCI buffer for communicating with the Trusted Application.<\/li>\n\n\n\n<li>tciLen: Length of the TCI buffer.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>mcOpenTrustlet request is relayed to the MobiCore Driver in the NWd<\/li>\n\n\n\n<li>MobiCore Driver issues a request to MobiCore in the SWd.<\/li>\n\n\n\n<li>brokers the creation of a new session via MCI.<\/li>\n\n\n\n<li>returns the corresponding session ID.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/** Open a new session to a Trusted Application(Trustlet). The Trusted Application will be loaded from the memory buffer.\n *\n * Write MCP open message to buffer and notify Kinibi about the availability of a new command.\n * Waits till Kinibi responds with the new session ID (stored in the MCP buffer).\n *\n * @param [in,out] session On success, the session data will be returned.\n * @param [in] spid Service Provider ID(for Service provider trustlets otherwise ignored)\n * @param [in] trustedapp memory buffer containing the Trusted Application binary\n * @param [in] tLen length of the memory buffer containing the Trusted Application\n * @param [in] tci TCI buffer for communicating with the Trusted Application.\n * @param [in] tciLen Length of the TCI buffer. Maximum allowed value is MC_MAX_TCI_LEN.\n *\n * @return MC_DRV_OK if operation has been successfully completed.\n * @return MC_DRV_INVALID_PARAMETER if session parameter is invalid.\n * @return MC_DRV_ERR_UNKNOWN_DEVICE when device id is invalid.\n * @return MC_DRV_ERR_DAEMON_UNREACHABLE when problems with daemon socket occur.\n * @return MC_DRV_ERR_UNKNOWN_DEVICE when daemon returns an error.\n * @return MC_DRV_ERR_TRUSTED_APPLICATION_NOT_FOUND when Trusted Application cannot be loaded.\n *\/\n__MC_CLIENT_LIB_API mcResult_t mcOpenTrustlet(\n    mcSessionHandle_t   *session,\n    mcSpid_t            spid,\n    uint8_t             *trustedapp,\n    uint32_t            tLen,\n    uint8_t             *tci,\n    uint32_t            tciLen\n);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">\/**<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Open<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">to<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Trusted<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Application<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">Trustlet<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #A3BE8C\">.<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">The<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Trusted<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">will<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">loaded<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">from<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">memory<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">buffer.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Write<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MCP<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">open<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">message<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">to<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">buffer<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notify<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Kinibi<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">about<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">availability<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">command.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Waits<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">till<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Kinibi<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">responds<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">with<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">ID<\/span><span style=\"color: #D8DEE9FF\"> (stored <\/span><span style=\"color: #A3BE8C\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MCP<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">buffer<\/span><span style=\"color: #D8DEE9FF\">).<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in,out] session On success, the session data will be returned.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] spid Service Provider ID<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">for Service provider trustlets otherwise ignored<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] trustedapp memory buffer containing the Trusted Application binary<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] tLen length of the memory buffer containing the Trusted Application<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] tci TCI buffer <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> communicating with the Trusted Application.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] tciLen Length of the TCI buffer. Maximum allowed value is MC_MAX_TCI_LEN.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_OK<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">operation<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">has<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">been<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">successfully<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">completed.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_INVALID_PARAMETER<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">parameter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_DEVICE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">device<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_DAEMON_UNREACHABLE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">problems<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">with<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">daemon<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">socket<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">occur.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_DEVICE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">daemon<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">returns<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">an<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">error.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_TRUSTED_APPLICATION_NOT_FOUND<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Trusted<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">cannot<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">loaded.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">__MC_CLIENT_LIB_API<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcResult_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcOpenTrustlet<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">mcSessionHandle_t<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">mcSpid_t<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">spid,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint8_t<\/span><span style=\"color: #D8DEE9FF\">             <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">trustedapp,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">tLen,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint8_t<\/span><span style=\"color: #D8DEE9FF\">             <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">tci,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #A3BE8C\">tciLen<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">5.4 TlApi: Trustlet Api<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Trustlet   A trusted process or application in certain types of secure system.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.4.1 CA notifies TA<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/762f8bba4b120add1b8129454891a46c\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<ol class=\"wp-block-list\">\n<li>Session has been established.<\/li>\n\n\n\n<li>The TA is loaded in the TEE.<\/li>\n\n\n\n<li>TCI buffer was mapped into both address spaces(CA and TA).<\/li>\n\n\n\n<li>CA write command to the TCI buffer<\/li>\n\n\n\n<li>CA notify the TA that the command is ready to be processed using the <strong>mcNotify<\/strong><\/li>\n\n\n\n<li>CA waits for the TA to respond by calling the <strong>mcWaitNotification<\/strong><\/li>\n<\/ol>\n\n\n\n<p>MobiCore Driver Api<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/** Wait for a notification issued by Kinibi for a specific session.\n *\n * @param [in] session The session the notification should correspond to.\n * @param [in] timeout Time in milliseconds to wait.\n *\n * @return MC_DRV_OK if notification is available.\n * @return MC_DRV_ERR_TIMEOUT if no notification arrived in time.\n * @return MC_DRV_INFO_NOTIFICATION if a problem with the session was encountered.\n * @return MC_DRV_ERR_NOTIFICATION if a problem with the socket occurred.\n * @return MC_DRV_INVALID_PARAMETER if a parameter is invalid.\n * @return MC_DRV_ERR_UNKNOWN_SESSION when session id is invalid.\n * @return MC_DRV_ERR_UNKNOWN_DEVICE when device id of session is invalid.\n *\/\n__MC_CLIENT_LIB_API mcResult_t mcWaitNotification(\n    mcSessionHandle_t   *session,\n    int32_t             timeout\n);\n\n\/** Notify a session.\n * Corresponding errors can only be received by mcWaitNotification().\n *\n * @param session The session to be notified.\n *\n * @return MC_DRV_OK if operation has been successfully completed.\n * @return MC_DRV_INVALID_PARAMETER if session parameter is invalid.\n * @return MC_DRV_ERR_UNKNOWN_SESSION when session id is invalid.\n * @return MC_DRV_ERR_UNKNOWN_DEVICE when device id of session is invalid.\n *\/\n__MC_CLIENT_LIB_API mcResult_t mcNotify(\n    mcSessionHandle_t   *session\n);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">\/**<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Wait<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">issued<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">by<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Kinibi<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">specific<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] session The session the notification should correspond to.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> [in] timeout Time <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> milliseconds to wait.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_OK<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">available.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_TIMEOUT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">no<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">arrived<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">time.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_INFO_NOTIFICATION<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">problem<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">with<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">was<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">encountered.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_NOTIFICATION<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">problem<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">with<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">socket<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">occurred.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_INVALID_PARAMETER<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">parameter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_SESSION<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_DEVICE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">device<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">__MC_CLIENT_LIB_API<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcResult_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcWaitNotification<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">mcSessionHandle_t<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">int32_t<\/span><span style=\"color: #D8DEE9FF\">             <\/span><span style=\"color: #A3BE8C\">timeout<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\/**<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Notify<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Corresponding<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">errors<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">can<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">only<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">received<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">by<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcWaitNotification<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #A3BE8C\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">The<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">to<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">be<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notified.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_OK<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">operation<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">has<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">been<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">successfully<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">completed.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_INVALID_PARAMETER<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">parameter<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_SESSION<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">MC_DRV_ERR_UNKNOWN_DEVICE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">device<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">id<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">session<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">invalid.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">__MC_CLIENT_LIB_API<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcResult_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">mcNotify<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">mcSessionHandle_t<\/span><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #A3BE8C\">session<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">5.4.2 TA notifies CA<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/gitlab.eiprime.com:3443\/panasonic\/android9h3\/uploads\/b4c4fb94b54b5dc41328d521b651147b\/image.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<ol class=\"wp-block-list\">\n<li>The TA reads the TCI buffer to see which command ID<\/li>\n\n\n\n<li>Processes the corresponding command with the parameters from TCI buffer<\/li>\n\n\n\n<li>Having completed the request, the TA writes output back to the TCI buffer<\/li>\n\n\n\n<li>Calls <strong>tlApiNotify<\/strong>, back to the NWd causing the <strong>mcWaitNotification<\/strong> call to complete.<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"\/** Wait for a notification of the NWd.\n * the platform E_TLAPI_INVALID_TIMEOUT is returned.\n *\n * @param timeout milliseconds to wait\n *       TLAPI_NO_TIMEOUT =&gt; direct return\n *       TLAPI_INFINITE_TIMEOUT =&gt; wait infinitely\n * @return TLAPI_OK if notification has been received.\n *\/\n_TLAPI_EXTERN_C tlApiResult_t tlApiWaitNotification(uint32_t timeout);\n\n\/** Notify the TrustletConnector about changes in the TCI message buffer.\n * tlApiNotify() returns when the notification is processed and the Trustlet can continue.\n *\n * @return TLAPI_OK if notification has been issued successfully.\n *\/\n_TLAPI_EXTERN_C tlApiResult_t tlApiNotify(void);\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #88C0D0\">\/**<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Wait<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">a<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">of<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">NWd.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">platform<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">E_TLAPI_INVALID_TIMEOUT<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">returned.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@param<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">timeout<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">milliseconds<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">to<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">wait<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\">       <\/span><span style=\"color: #A3BE8C\">TLAPI_NO_TIMEOUT<\/span><span style=\"color: #D8DEE9FF\"> =<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">direct<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\">       <\/span><span style=\"color: #A3BE8C\">TLAPI_INFINITE_TIMEOUT<\/span><span style=\"color: #D8DEE9FF\"> =<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">wait<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">infinitely<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TLAPI_OK<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">has<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">been<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">received.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">_TLAPI_EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tlApiResult_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tlApiWaitNotification<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">uint32_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">timeout<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">\/**<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Notify<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TrustletConnector<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">about<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">changes<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TCI<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">message<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">buffer.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tlApiNotify<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">returns<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">when<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">is<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">processed<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">the<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">Trustlet<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">can<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">continue.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">@return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">TLAPI_OK<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">notification<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">has<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">been<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">issued<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">successfully.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">*\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #88C0D0\">_TLAPI_EXTERN_C<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tlApiResult_t<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">tlApiNotify<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">void<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n<div class=\"likebtn_container\" style=\"\"><!-- LikeBtn.com BEGIN --><span class=\"likebtn-wrapper\"  data-identifier=\"post_135\"  data-site_id=\"65cb32bb943ec9f6275ac6aa\"  data-style=\"\"  data-unlike_allowed=\"\"  data-show_copyright=\"\"  data-item_url=\"https:\/\/www.aisoit.com\/?p=135\"  data-item_title=\"ARM_optee_kinibi\u57fa\u790e_\"  data-item_date=\"2023-11-26T13:52:08+09:00\"  data-engine=\"WordPress\"  data-plugin_v=\"2.6.58\"  data-prx=\"https:\/\/www.aisoit.com\/wp-admin\/admin-ajax.php?action=likebtn_prx\"  data-event_handler=\"likebtn_eh\" ><\/span><!-- LikeBtn.com END --><\/div>","protected":false},"excerpt":{"rendered":"<p>1.0 MMU\u5173\u8054\u5e38\u7528\u7b80\u79f0 ref1: \u3010\u8f6c\u3011\u6df1\u5165\u7406\u89e3 TLB \u539f\u7406 ref2: [mmu\/cache]-ARM MMU\u7684\u5b66\u4e60\u7b14\u8bb0-\u4e00\u7bc7\u5c31\u591f\u4e86\u3010\u8f6c\u3011 MMU: Memory Management Unit TLB: Translation lookaside buffer 1.1 MMU\u6982\u5ff5\u4ecb\u7ecd MMU\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206: TLB maintenance \u548c address translation MMU\u7684\u4f5c\u7528\uff0c\u4e3b\u8981\u662f\u5b8c\u6210\u5730\u5740\u7684\u7ffb\u8bd1\uff0c \u65e0\u8bba\u662fmain-memory\u5730\u5740(DDR\u5730\u5740)\uff0c \u8fd8\u662fIO\u5730\u5740(\u8bbe\u5907device\u5730\u5740)\uff0c \u5728\u5f00\u542f\u4e86MMU\u7684\u7cfb\u7edf\u4e2d\uff0cCPU\u53d1\u8d77\u7684\u6307\u4ee4\u8bfb\u53d6\u3001\u6570\u636e\u8bfb\u5199\u90fd\u662f\u865a\u62df\u5730\u5740\uff0c \u5728ARM Core\u5185\u90e8\uff0c\u4f1a\u5148\u7ecf\u8fc7MMU\u5c06\u8be5\u865a\u62df\u5730\u5740\u81ea\u52a8\u8f6c\u6362\u6210\u7269\u7406\u5730\u5740\uff0c \u7136\u540e\u5728\u5c06\u7269\u7406\u5730\u5740\u53d1\u9001\u5230AXI\u603b\u7ebf\u4e0a\uff0c\u5b8c\u6210\u771f\u6b63\u7684\u7269\u7406\u5185\u5b58\u3001\u7269\u7406\u8bbe\u5907\u7684\u8bfb\u5199\u8bbf\u95ee 1.2 \u56db\u7ea7\u9875\u8868\u67e5\u627e\u8fc7\u7a0b \u9700\u8981\u56db\u6b21\u5185\u5b58\u8bbf\u95ee\u3002\u9875\u8868\u67e5\u627e\u8fc7\u7a0b\u7684\u793a\u4f8b\u5982\u4e0b\u56fe\u6240\u793a 1.3 TLB\u7684\u7279\u6b8a \u865a\u62df\u5730\u5740\u6620\u5c04\u7269\u7406\u5730\u5740\u7684\u6700\u5c0f\u5355\u4f4d\u662f4KB\u3002 \u6240\u4ee5TLB\u5176\u5b9e\u4e0d\u9700\u8981\u5b58\u50a8\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u4f4e12\u4f4d(\u56e0\u4e3a\u4f4e12\u4f4d\u662f\u4e00\u6837\u7684\uff0c\u6839\u672c\u6ca1\u5fc5\u8981\u5b58\u50a8)\u3002 \u53e6\u5916\uff0c\u6211\u4eec\u5982\u679c\u547d\u4e2dcache\uff0c\u80af\u5b9a\u662f\u4e00\u6b21\u6027\u4ececache\u4e2d\u62ff\u51fa\u6574\u4e2a\u6570\u636e\u3002\u6240\u4ee5\u865a\u62df\u5730\u5740\u4e0d\u9700\u8981offset\u57df\u3002 index\u57df\u662f\u5426\u9700\u8981\u5462\uff1f\u8fd9\u53d6\u51b3\u4e8ecache\u7684\u7ec4\u7ec7\u5f62\u5f0f\u3002 1.4 \u591a\u8fdb\u7a0b\u9700\u8981\u591a\u4e2aTLB \u4f8b\u5982\uff0c\u4e24\u4e2auser\u8fdb\u7a0b\u8fdb\u884c\u5207\u6362\u65f6\uff0c TTBR0_EL1\u662f\u8981\u4ece\u4e00\u4e2auser\u7684\u9875\u8868\u5730\u5740\uff0c\u5207\u6362\u5230\u53e6\u5916\u4e00\u4e2auser\u7684\u9875\u8868\u5730\u5740\u3002 2.1 secure boot ref: https:\/\/logmi.jp\/tech\/articles\/324297 2.2 OP-TEE\u3068TEE\u306e\u6a19\u6e96\u5316API 2.3 \u5982\u679c\u542f\u7528\u4e86hypervisor (Two [&hellip;]<\/p>\n<div class=\"likebtn_container\" style=\"\"><!-- LikeBtn.com BEGIN --><span class=\"likebtn-wrapper\"  data-identifier=\"post_135\"  data-site_id=\"65cb32bb943ec9f6275ac6aa\"  data-style=\"\"  data-unlike_allowed=\"\"  data-show_copyright=\"\"  data-item_url=\"https:\/\/www.aisoit.com\/?p=135\"  data-item_title=\"ARM_optee_kinibi\u57fa\u790e_\"  data-item_date=\"2023-11-26T13:52:08+09:00\"  data-engine=\"WordPress\"  data-plugin_v=\"2.6.58\"  data-prx=\"https:\/\/www.aisoit.com\/wp-admin\/admin-ajax.php?action=likebtn_prx\"  data-event_handler=\"likebtn_eh\" ><\/span><!-- LikeBtn.com END --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7],"tags":[],"class_list":["post-135","post","type-post","status-publish","format-standard","hentry","category-tech"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/posts\/135","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=135"}],"version-history":[{"count":13,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/posts\/135\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=\/wp\/v2\/posts\/135\/revisions\/277"}],"wp:attachment":[{"href":"https:\/\/www.aisoit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aisoit.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}