From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [early RFC] ARM PCI Passthrough design document Date: Thu, 29 Dec 2016 14:04:15 +0000 Message-ID: <5cf9128e-e845-2a89-f7c7-ac8616941ab9@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMbJb-0006wp-KO for xen-devel@lists.xenproject.org; Thu, 29 Dec 2016 14:04:19 +0000 Received: by mail-wm0-f47.google.com with SMTP id t79so333755933wmt.0 for ; Thu, 29 Dec 2016 06:04:18 -0800 (PST) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel , Stefano Stabellini Cc: "Edgar Iglesias (edgar.iglesias@xilinx.com)" , Wei Chen , Campbell Sean , Jiandi An , Punit Agrawal , alistair.francis@xilinx.com, =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , "manish.jaggi@caviumnetworks.com" , Shanker Donthineni , Steve Capper List-Id: xen-devel@lists.xenproject.org SGkgYWxsLAoKVGhlIGRvY3VtZW50IGJlbG93IGlzIGFuIGVhcmx5IHZlcnNpb24gb2YgYSBkZXNp Z24KcHJvcG9zYWwgZm9yIFBDSSBQYXNzdGhyb3VnaCBpbiBYZW4uIEl0IGFpbXMgdG8KZGVzY3Jp YmUgZnJvbSBhbiBoaWdoIGxldmVsIHBlcnNwZWN0aXZlIHRoZSBpbnRlcmFjdGlvbgp3aXRoIHRo ZSBkaWZmZXJlbnQgc3Vic3lzdGVtcyBhbmQgaG93IGd1ZXN0IHdpbGwgYmUgYWJsZQp0byBkaXNj b3ZlciBhbmQgYWNjZXNzIFBDSS4KCkkgYW0gYXdhcmUgdGhhdCBhIHNpbWlsYXIgZGVzaWduIGhh cyBiZWVuIHBvc3RlZCByZWNlbnRseQpieSBDYXZpdW0gKHNlZSBbMV0pLCBob3dldmVyIHRoZSBh cHByb2FjaCB0byBleHBvc2UgUENJCnRvIGd1ZXN0IGlzIGRpZmZlcmVudC4gV2UgaGF2ZSByZXF1 ZXN0IHRvIHJ1biB1bm1vZGlmaWVkCmJhcmVtZXRhbCBPUyBvbiBYZW4sIGEgc3VjaCBndWVzdCB3 b3VsZCBkaXJlY3RseQphY2Nlc3MgdGhlIGRldmljZXMgYW5kIG5vIFBWIGRyaXZlcnMgd2lsbCBi ZSB1c2VkLgoKVGhhdCdzIHdoeSB0aGlzIGRlc2lnbiBpcyBiYXNlZCBvbiBlbXVsYXRpbmcgYSBy b290IGNvbnRyb2xsZXIuClRoaXMgYWxzbyBoYXMgdGhlIGFkdmFudGFnZSB0byBoYXZlIHRoZSBW TSBpbnRlcmZhY2UgYXMgY2xvc2UKYXMgYmFyZW1ldGFsIGFsbG93aW5nIHRoZSBndWVzdCB0byB1 c2UgZmlybXdhcmUgdGFibGVzIHRvIGRpc2NvdmVyCnRoZSBkZXZpY2VzLgoKQ3VycmVudGx5IG9u IEFSTSwgWGVuIGRvZXMgbm90IGhhdmUgYW55IGtub3dsZWRnZSBhYm91dCBQQ0kgZGV2aWNlcy4K VGhpcyBtZWFucyB0aGF0IElPTU1VIGFuZCBpbnRlcnJ1cHQgY29udHJvbGxlciAoc3VjaCBhcyBJ VFMpCnJlcXVpcmluZyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHdpbGwgbm90IHdvcmsgd2l0aCBQ Q0kgZXZlbiB3aXRoCkRPTTAuCgpUaGUgUENJIFBhc3N0aHJvdWdoIHdvcmsgY291bGQgYmUgZGl2 aWRlZCBpbiAyIHBoYXNlczoKCSogUGhhc2UgMTogUmVnaXN0ZXIgYWxsIFBDSSBkZXZpY2VzIGlu IFhlbiA9PiB3aWxsIGFsbG93CgkJICAgdG8gdXNlIElUUyBhbmQgU01NVSB3aXRoIFBDSSBpbiBY ZW4KICAgICAgICAqIFBoYXNlIDI6IEFzc2lnbiBkZXZpY2VzIHRvIGd1ZXN0cwoKVGhpcyBkb2N1 bWVudCBhaW1zIHRvIGRlc2NyaWJlIHRoZSAyIHBoYXNlcywgYnV0IGZvciBub3cgb25seSBwaGFz ZQoxIGlzIGZ1bGx5IGRlc2NyaWJlZC4KCkkgaGF2ZSBzZW50IHRoZSBkZXNpZ24gZG9jdW1lbnQg dG8gc3RhcnQgdG8gZ2F0aGVyIGZlZWRiYWNrIG9uCnBoYXNlIDEuCgpDaGVlcnMsCgpbMV0gaHR0 cHM6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTYtMTIvbXNnMDAy MjQuaHRtbCAKCj09PT09PT09PT09PT09PT09PT09PT09PQolIFBDSSBwYXNzLXRocm91Z2ggc3Vw cG9ydCBvbiBBUk0KJSBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBsaW5hcm8ub3JnPgolIERy YWZ0IEEKCiMgUHJlZmFjZQoKVGhpcyBkb2N1bWVudCBhaW1zIHRvIGRlc2NyaWJlIHRoZSBjb21w b25lbnRzIHJlcXVpcmVkIHRvIGVuYWJsZSBQQ0kKcGFzc3Rocm91Z2ggb24gQVJNLgoKVGhpcyBp cyBhbiBlYXJseSBkcmFmdCBhbmQgc29tZSBxdWVzdGlvbnMgYXJlIHN0aWxsIHVuYW5zd2VyZWQs IHdoZW4gdGhpcyBpcwp0aGUgY2FzZSB0aGUgdGV4dCB3aWxsIGNvbnRhaW4gWFhYLgoKIyBJbnRy b2R1Y3Rpb24KClBDSSBwYXNzdGhyb3VnaCBhbGxvd3MgdG8gZ2l2ZSBjb250cm9sIG9mIHBoeXNp Y2FsIFBDSSBkZXZpY2VzIHRvIGd1ZXN0LiBUaGlzCm1lYW5zIHRoYXQgdGhlIGd1ZXN0IHdpbGwg aGF2ZSBmdWxsIGFuZCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBQQ0kgZGV2aWNlLgoKQVJNIGlzIHN1 cHBvcnRpbmcgb25lIGtpbmQgb2YgZ3Vlc3QgdGhhdCBpcyBleHBsb2l0aW5nIGFzIG11Y2ggYXMg cG9zc2libGUKdmlydHVhbGl6YXRpb24gc3VwcG9ydCBpbiBoYXJkd2FyZS4gVGhlIGd1ZXN0IHdp bGwgcmVseSBvbiBQViBkcml2ZXIgb25seQpmb3IgSU8gKGUuZyBibG9jaywgbmV0d29yayksIGlu dGVycnVwdHMgd2lsbCBjb21lIHRocm91Z2ggdGhlIHZpcnR1YWxpemVkCmludGVycnVwdCBjb250 cm9sbGVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG5vIGJpZyBjaGFuZ2VzIHJlcXVpcmVk CndpdGhpbiB0aGUga2VybmVsLgoKQnkgY29uc2VxdWVuY2UsIGl0IHdvdWxkIGJlIHBvc3NpYmxl IHRvIHJlcGxhY2UgUFYgZHJpdmVycyBieSBhc3NpZ25pbmcgcmVhbApkZXZpY2VzIHRvIHRoZSBn dWVzdCBmb3IgSS9PIGFjY2Vzcy4gWGVuIG9uIEFSTSB3b3VsZCB0aGVyZWZvcmUgYmUgYWJsZSB0 bwpydW4gdW5tb2RpZmllZCBvcGVyYXRpbmcgc3lzdGVtLgoKVG8gYWNoaWV2ZSB0aGlzIGdvYWws IGl0IGxvb2tzIG1vcmUgc2Vuc2libGUgdG8gZ28gdG93YXJkcyBlbXVsYXRpbmcgdGhlCmhvc3Qg YnJpZGdlICh3ZSB3aWxsIGdvIGludG8gbW9yZSBkZXRhaWxzIGxhdGVyKS4gQSBndWVzdCB3b3Vs ZCBiZSBhYmxlCnRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmaXJtd2FyZSB0YWJsZXMgYW5kIG9i dmlhdGluZyB0aGUgbmVlZCBmb3IgYSBzcGVjaWZpYwpkcml2ZXIgZm9yIFhlbi4KClRodXMgaW4g dGhpcyBkb2N1bWVudCB3ZSBmb2xsb3cgdGhlIGVtdWxhdGVkIGhvc3QgYnJpZGdlIGFwcHJvYWNo LgoKIyBQQ0kgdGVybWlub2xvZ2llcwoKRWFjaCBQQ0kgZGV2aWNlIHVuZGVyIGEgaG9zdCBicmlk Z2UgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBpdHMgUmVxdWVzdGVyIElECihBS0EgUklEKS4g QSBSZXF1ZXN0ZXIgSUQgaXMgYSB0cmlwbGV0IG9mIEJ1cyBudW1iZXIsIERldmljZSBudW1iZXIs IGFuZApGdW5jdGlvbi4KCldoZW4gdGhlIHBsYXRmb3JtIGhhcyBtdWx0aXBsZSBob3N0IGJyaWRn ZXMsIHRoZSBzb2Z0d2FyZSBjYW4gYWRkIGZvdXJ0aApudW1iZXIgY2FsbGVkIFNlZ21lbnQgdG8g ZGlmZmVyZW50aWF0ZSBob3N0IGJyaWRnZXMuIEEgUENJIGRldmljZSB3aWxsCnRoZW4gdW5pcXVl bHkgYnkgc2VnbWVudDpidXM6ZGV2aWNlOmZ1bmN0aW9uIChBS0EgU0JERikuCgpTbyBnaXZlbiBh IHNwZWNpZmljIFNCREYsIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGZpbmQgdGhlIGhvc3QgYnJp ZGdlIGFuZCB0aGUKUklEIGFzc29jaWF0ZWQgdG8gYSBQQ0kgZGV2aWNlLgoKIyBJbnRlcmFjdGlv biBvZiB0aGUgUENJIHN1YnN5c3RlbSB3aXRoIG90aGVyIHN1YnN5c3RlbXMKCkluIG9yZGVyIHRv IGhhdmUgYSBQQ0kgZGV2aWNlIGZ1bGx5IHdvcmtpbmcsIFhlbiB3aWxsIG5lZWQgdG8gY29uZmln dXJlCm90aGVyIHN1YnN5c3RlbXMgc3Vic3l0ZW1zIHN1Y2ggYXMgdGhlIFNNTVUgYW5kIHRoZSBJ bnRlcnJ1cHQgQ29udHJvbGxlci4KClRoZSBpbnRlcmFjdGlvbiBleHBlY3RlZCBiZXR3ZWVuIHRo ZSBQQ0kgc3Vic3lzdGVtIGFuZCB0aGUgb3RoZXIgaXM6CiAgICAqIEFkZCBhIGRldmljZQogICAg KiBSZW1vdmUgYSBkZXZpY2UKICAgICogQXNzaWduIGEgZGV2aWNlIHRvIGEgZ3Vlc3QKICAgICog RGVhc3NpZ24gYSBkZXZpY2UgZnJvbSBhIGd1ZXN0CgpYWFg6IERldGFpbCB0aGUgaW50ZXJhY3Rp b24gd2hlbiBhc3NpZ25pbmcvZGVhc3NpZ25pbmcgZGV2aWNlCgpUaGUgZm9sbG93aW5nIHN1YnNl Y3Rpb25zIHdpbGwgYnJpZWZseSBkZXNjcmliZSB0aGUgaW50ZXJhY3Rpb24gZnJvbSBhbgpoaWdo ZXIgbGV2ZWwgcGVyc3BlY3RpdmUuIEltcGxlbWVudGF0aW9uIGRldGFpbHMgKGNhbGxiYWNrLCBz dHJ1Y3R1cmUuLi4pCmlzIG91dCBvZiBzY29wZS4KCiMjIFNNTVUKClRoZSBTTU1VIHdpbGwgYmUg dXNlZCB0byBpc29sYXRlIHRoZSBQQ0kgZGV2aWNlIHdoZW4gYWNjZXNzaW5nIHRoZSBtZW1vcnkK KGZvciBpbnN0YW5jZSBETUEgYW5kIE1TSSBEb29yYmVsbHMpLiBPZnRlbiB0aGUgU01NVSB3aWxs IGJlIGNvbmZpZ3VyZWQgdXNpbmcKYSBTdHJlYW1JRCAoU0lEKSB0aGF0IGNhbiBiZSBkZWR1Y2Vk IGZyb20gdGhlIFJJRCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmaXJtd2FyZQp0YWJsZXMgKHNlZSBi ZWxvdykuCgpXaGlsc3QgaW4gdGhlb3J5IGFsbCB0aGUgbWVtb3J5IHRyYW5zYWN0aW9uIGlzc3Vl ZCBieSBhIFBDSSBkZXZpY2Ugc2hvdWxkCmdvIHRocm91Z2ggdGhlIFNNTVUsIG9uIGNlcnRhaW4g cGxhdGZvcm1zIHNvbWUgb2YgdGhlIG1lbW9yeSB0cmFuc2FjdGlvbiBtYXkKbm90IHJlYWNoIHRo ZSBTTU1VIGJlY2F1c2UgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlIGhvc3QgYnJpZGdlLiBG b3IKaW5zdGFuY2UgdGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlIE1TSSBkb29yYmVsbCBpcyBidWls dCBpbnRvIHRoZSBQQ0kgaG9zdApicmlkZ2UuIFNlZSBbNl0gZm9yIG1vcmUgZGV0YWlscy4KClhY WDogSSB0aGluayB0aGlzIGNvdWxkIGJlIHNvbHZlZCBieSB1c2luZyB0aGUgaG9zdCBtZW1vcnkg bGF5b3V0IHdoZW4KY3JlYXRpbmcgYSBndWVzdCB3aXRoIFBDSSBkZXZpY2VzID0+IERldGFpbCBp dC4KCiMjIEludGVycnVwdCBjb250cm9sbGVyCgpQQ0kgc3VwcG9ydHMgdGhyZWUga2luZCBvZiBp bnRlcnJ1cHRzOiBsZWdhY3kgaW50ZXJydXB0LCBNU0kgYW5kIE1TSS1YLiBPbiBBUk0KbGVnYWN5 IGludGVycnVwdHMgd2lsbCBiZSBtYXBwZWQgdG8gU1BJcy4gTVNJIGFuZCBNU0kteCB3aWxsIGJl CmVpdGhlciBtYXBwZWQgdG8gU1BJcyBvciBMUElzLgoKV2hpbHN0IFNQSXMgY2FuIGJlIHByb2dy YW1tZWQgdXNpbmcgYW4gaW50ZXJydXB0IG51bWJlciwgTFBJcyBjYW4gYmUKaWRlbnRpZmllZCB2 aWEgYSBwYWlyIChEZXZpY2VJRCwgRXZlbnRJRCkgd2hlbiBjb25maWd1cmUgdGhyb3VnaCB0aGUg SVRTLgoKVGhlIERldmljZUlEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggTVNJLWNh cGFibGUgZGV2aWNlIHRoYXQgY2FuCmJlIGRlZHVjZWQgZnJvbSB0aGUgUklEIHdpdGggdGhlIGhl bHAgb2YgdGhlIGZpcm13YXJlIHRhYmxlcyAoc2VlIGJlbG93KS4KClhYWDogRmlndXJlIG91dCBp ZiBzb21ldGhpbmcgaXMgbmVjZXNzYXJ5IGZvciBHSUN2Mm0KCiMgSW5mb3JtYXRpb24gYXZhaWxh YmxlIGluIHRoZSBmaXJtd2FyZSB0YWJsZXMKCiMjIEFDUEkKCiMjIyBIb3N0IGJyaWRnZXMKClRo ZSBzdGF0aWMgdGFibGUgTUNGRyAoc2VlIDQuMiBpbiBbMV0pIHdpbGwgZGVzY3JpYmUgdGhlIGhv c3QgYnJpZGdlcyBhdmFpbGFibGUKYXQgYm9vdCBhbmQgc3VwcG9ydGluZyBFQ0FNLiBVbmZvcnR1 bmF0ZWx5IHRoZXJlIGFyZSBwbGF0Zm9ybXMgb3V0IHRoZXJlCihzZWUgWzJdKSB0aGF0IHJlLXVz ZSBNQ0ZHIHRvIGRlc2NyaWJlIGhvc3QgYnJpZGdlIHRoYXQgYXJlIG5vdCBmdWxseSBFQ0FNCmNv bXBhdGlibGUuCgpUaGlzIG1lYW5zIHRoYXQgWGVuIG5lZWRzIHRvIGFjY291bnQgZm9yIHBvc3Np YmxlIHF1aXJrcyBpbiB0aGUgaG9zdCBicmlkZ2UuClRoZSBMaW51eCBjb21tdW5pdHkgYXJlIHdv cmtpbmcgb24gYSBwYXRjaCBzZXJpZXMgZm9yIHNlZSAoc2VlIFsyXSBhbmQgWzNdKQp3aGVyZSBx dWlya3Mgd2lsbCBiZSBkZXRlY3RlZCB3aXRoOgogICAgKiBPRU0gSUQKICAgICogT0VNIFRhYmxl IElECiAgICAqIE9FTSBSZXZpc2lvbgogICAgKiBQQ0kgU2VnbWVudCAoZnJvbSBfU0VHKQogICAg KiBQQ0kgYnVzIG51bWJlciByYW5nZSAoZnJvbSBfQ1JTLCB3aWxkY2FyZCBhbGxvd2VkKQoKQmFz ZWQgb24gd2hhdCBMaW51eCBpcyBjdXJyZW50bHkgZG9pbmcsIHRoZXJlIGFyZSB0d28ga2luZCBv ZiBxdWlya3M6CiAgICAqIEFjY2Vzc2VzIHRvIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIG9mIGNl cnRhaW4gc2l6ZXMgYXJlIG5vdCBhbGxvd2VkCiAgICAqIEEgc3BlY2lmaWMgZHJpdmVyIGlzIG5l Y2Vzc2FyeSBmb3IgZHJpdmluZyB0aGUgaG9zdCBicmlkZ2UKClRoZSBmb3JtZXIgaXMgc3RyYWln aHQgZm9yd2FyZCB0byBzb2x2ZSwgdGhlIGxhdHRlciB3aWxsIHJlcXVpcmUgbW9yZSB0aG91Z2h0 LgpJbnN0YW50aWF0aW9uIG9mIGEgc3BlY2lmaWMgZHJpdmVyIGZvciB0aGUgaG9zdCBjb250cm9s bGVyIGNhbiBiZSBlYXNpbHkgZG9uZQppZiBYZW4gaGFzIHRoZSBpbmZvcm1hdGlvbiB0byBkZXRl Y3QgaXQuIEhvd2V2ZXIsIHRob3NlIGRyaXZlcnMgbWF5IHJlcXVpcmUKcmVzb3VyY2VzIGRlc2Ny aWJlZCBpbiBBU0wgKHNlZSBbNF0gZm9yIGluc3RhbmNlKS4KClhYWDogTmVlZCBtb3JlIGludmVz dGlnYXRpb24gdG8ga25vdyB3aGV0aGVyIHRoZSBtaXNzaW5nIGluZm9ybWF0aW9uIHNob3VsZApi ZSBwYXNzZWQgYnkgRE9NMCBvciBoYXJkY29kZWQgaW4gdGhlIGRyaXZlci4KCiMjIyBGaW5kaW5n IHRoZSBTdHJlYW1JRCBhbmQgRGV2aWNlSUQKClRoZSBzdGF0aWMgdGFibGUgSU9SVCAoc2VlIFs1 XSkgd2lsbCBwcm92aWRlIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBoZWxwIHRvCmRlZHVjZSB0aGUg U3RyZWFtSUQgYW5kIERldmljZUlEIGZyb20gYSBnaXZlbiBSSUQuCgojIyBEZXZpY2UgVHJlZQoK IyMjIEhvc3QgYnJpZGdlcwoKRWFjaCBEZXZpY2UgVHJlZSBub2RlIGFzc29jaWF0ZWQgdG8gYSBo b3N0IGJyaWRnZSB3aWxsIGhhdmUgYXQgbGVhc3QgdGhlCmZvbGxvd2luZyBwcm9wZXJ0aWVzIChz ZWUgYmluZGluZ3MgaW4gWzhdKToKICAgIC0gZGV2aWNlX3R5cGU6IHdpbGwgYWx3YXlzIGJlICJw Y2kiLgogICAgLSBjb21wYXRpYmxlOiBhIHN0cmluZyBpbmRpY2F0aW5nIHdoaWNoIGRyaXZlciB0 byBpbnN0YW50aWF0ZQoKVGhlIG5vZGUgbWF5IGFsc28gY29udGFpbiBvcHRpb25hbCBwcm9wZXJ0 aWVzIHN1Y2ggYXM6CiAgICAtIGxpbnV4LHBjaS1kb21haW46IGFzc2lnbiBhIGZpeCBzZWdtZW50 IG51bWJlcgogICAgLSBidXMtcmFuZ2U6IGluZGljYXRlIHRoZSByYW5nZSBvZiBidXMgbnVtYmVy cyBzdXBwb3J0ZWQKCldoZW4gdGhlIHByb3BlcnR5IGxpbnV4LHBjaS1kb21haW4gaXMgbm90IHBy ZXNlbnQsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdvdWxkCmhhdmUgdG8gYWxsb2NhdGUgdGhlIHNl Z21lbnQgbnVtYmVyIGZvciBlYWNoIGhvc3QgYnJpZGdlcy4gQmVjYXVzZSB0aGUKYWxnb3JpdGht IHRvIGFsbG9jYXRlIHRoZSBzZWdtZW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzIG5lY2Vzc2Fy eSBmb3IKRE9NMCBhbmQgWGVuIHRvIGFncmVlIG9uIHRoZSBudW1iZXIgYmVmb3JlIGFueSBQQ0kg aXMgYmVlbiBhZGRlZC4KCiMjIyBGaW5kaW5nIHRoZSBTdHJlYW1JRCBhbmQgRGV2aWNlSUQKCiMj IyBTdHJlYW1JRAoKVGhlIGZpcnN0IGJpbmRpbmcgZXhpc3RpbmcgKHNlZSBbOV0pIGZvciBTTU1V IGRpZG4ndCBoYXZlIGEgd2F5IHRvIGRlc2NyaWJlIHRoZQpyZWxhdGlvbnNoaXAgYmV0d2VlbiBS SUQgYW5kIFN0cmVhbUlELCBpdCB3YXMgYXNzdW1lZCB0aGF0IFN0cmVhbUlEID09IFJlcXVlc3Rl cklELgpUaGlzIGJpbmRpbnMgaGFzIG5vdyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYSBn ZW5lcmljIGJpbmRpbmcgKHNlZSBbMTBdKQp3aGljaCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgImlv bW11LW1hcCIgdG8gZGVzY3JpYmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCmFuIFJJRCwgdGhl IGFzc29jaWF0ZWQgSU9NTVUgYW5kIHRoZSBTdHJlYW1JRC4KCiMjIyBEZXZpY2VJRAoKVGhlIHJl bGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBSSUQgYW5kIHRoZSBEZXZpY2VJRCBjYW4gYmUgZm91bmQg dXNpbmcgdGhlCnByb3BlcnR5ICJtc2ktbWFwIiAoc2VlIFsxMV0pLgoKIyBEaXNjb3ZlcmluZyBQ Q0kgZGV2aWNlcwoKV2hpbHN0IFBDSSBkZXZpY2VzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlu IERPTTAsIHRoZSBoeXBlcnZpc29yIGRvZXMgbm90CmhhdmUgYW55IGtub3dsZWRnZSBvZiB0aGVt LiBUaGUgZmlyc3Qgc3RlcCBvZiBzdXBwb3J0aW5nIFBDSSBwYXNzdGhyb3VnaCBpcwp0byBtYWtl IFhlbiBhd2FyZSBvZiB0aGUgUENJIGRldmljZXMuCgpYZW4gd2lsbCByZXF1aXJlIGFjY2VzcyB0 byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24KZm9y IHRoZSBQQ0kgZGV2aWNlcyBvciBhY2Nlc3MgaXQgb24gYmVoYWxmIG9mIHRoZSBndWVzdCB2aWEg dGhlIGVtdWxhdGVkCmhvc3QgYnJpZGdlLgoKIyMgRGlzY292ZXJpbmcgYW5kIHJlZ2lzdGVyIGhv c3RicmlkZ2UKCkJvdGggQUNQSSBhbmQgRGV2aWNlIFRyZWUgZG8gbm90IHByb3ZpZGUgZW5vdWdo IGluZm9ybWF0aW9uIHRvIGZ1bGx5Cmluc3RhbnRpYXRlIGFuIGhvc3QgYnJpZGdlIGRyaXZlci4g SW4gdGhlIGNhc2Ugb2YgQUNQSSwgc29tZSBkYXRhIG1heSBjb21lCmZyb20gQVNMLCB3aGlsc3Qg Zm9yIERldmljZSBUcmVlIHRoZSBzZWdtZW50IG51bWJlciBpcyBub3QgYXZhaWxhYmxlLgoKU28g WGVuIG5lZWRzIHRvIHJlbHkgb24gRE9NMCB0byBkaXNjb3ZlciB0aGUgaG9zdCBicmlkZ2VzIGFu ZCBub3RpZnkgWGVuCndpdGggYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbnMuIFRoaXMgd2ls bCBiZSBkb25lIHZpYSBhIG5ldyBoeXBlcmNhbGwKUEhZU0RFVk9QX3BjaV9ob3N0X2JyaWRnZV9h ZGQuIFRoZSBsYXlvdXQgb2YgdGhlIHN0cnVjdHVyZSB3aWxsIGJlOgoKc3RydWN0IHBoeXNkZXZf cGNpX2hvc3RfYnJpZGdlX2FkZAp7CiAgICAvKiBJTiAqLwogICAgdWludDE2X3Qgc2VnOwogICAg LyogUmFuZ2Ugb2YgYnVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBicmlkZ2UgKi8KICAgIHVpbnQ4 X3QgIGJ1c19zdGFydDsKICAgIHVpbnQ4X3QgIGJ1c19ucjsKICAgIHVpbnQzMl90IHJlczA7ICAv KiBQYWRkaW5nICovCiAgICAvKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBz cGFjZSByZWdpb24gKi8KICAgIHVpbnQ2NF90IGNmZ19iYXNlOwogICAgdWludDY0X3QgY2ZnX3Np emU7Cn0KCkRPTTAgd2lsbCBpc3N1ZSB0aGUgaHlwZXJjYWxsIFBIWVNERVZPUF9wY2lfaG9zdF9i cmlkZ2VfYWRkIGZvciBlYWNoIGhvc3QKYnJpZGdlIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0u IFdoZW4gWGVuIGlzIHJlY2VpdmluZyB0aGUgaHlwZXJjYWxsLCB0aGUKdGhlIGRyaXZlciBhc3Nv Y2lhdGVkIHRvIHRoZSBob3N0IGJyaWRnZSB3aWxsIGJlIGluc3RhbnRpYXRlZC4KClhYWDogU2hh bGwgd2UgbGltaXQgRE9NMCB0aGUgYWNjZXNzIHRvIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIGZy b20gdGhhdAptb21lbnQ/CgojIyBEaXNjb3ZlcmluZyBhbmQgcmVnaXN0ZXIgUENJCgpTaW1pbGFy bHkgdG8geDg2LCBQQ0kgZGV2aWNlcyB3aWxsIGJlIGRpc2NvdmVyZWQgYnkgRE9NMCBhbmQgcmVn aXN0ZXIKdXNpbmcgdGhlIGh5cGVyY2FsbHMgUEhZU0RFVk9QX3BjaV9hZGRfZGV2aWNlIG9yIFBI WVNERVZPUF9tYW5hZ2VfcGNpX2FkZF9leHQuCgpCeSBkZWZhdWx0IGFsbCB0aGUgUENJIGRldmlj ZXMgd2lsbCBiZSBhc3NpZ25lZCB0byBET00wLiBTbyBYZW4gd291bGQgaGF2ZQp0byBjb25maWd1 cmUgdGhlIFNNTVUgYW5kIEludGVycnVwdCBDb250cm9sbGVyIHRvIGFsbG93IERPTTAgdG8gdXNl IHRoZSBQQ0kKZGV2aWNlcy4gQXMgbWVudGlvbmVkIGVhcmxpZXIsIHRob3NlIHN1YnN5c3RlbXMg d2lsbCByZXF1aXJlIHRoZSBTdHJlYW1JRAphbmQgRGV2aWNlSUQuIEJvdGggY2FuIGJlIGRlZHVj ZWQgZnJvbSB0aGUgUklELgoKWFhYOiBIb3cgdG8gaGlkZSBQQ0kgZGV2aWNlcyBmcm9tIERPTTA/ CgojIEdsb3NzYXJ5CgpFQ0FNOiBFbmhhbmNlZCBDb25maWd1cmF0aW9uIE1lY2hhbmlzbQpTQkRG OiBTZWdtZW50IEJ1cyBEZXZpY2UgRnVuY3Rpb24uIFRoZSBzZWdtZW50IGlzIGEgc29mdHdhcmUg Y29uY2VwdC4KTVNJOiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdApTUEk6IFNoYXJlZCBQZXJp cGhlcmFsIEludGVycnVwdApMUEk6IExvY2FsaXR5LXNwZWNpZmljIFBlcmlwaGVyYWwgSW50ZXJy dXB0CklUUzogSW50ZXJydXB0IFRyYW5zbGF0aW9uIFNlcnZpY2UKCiMgQmlibGlvZ3JhcGh5Cgpb MV0gUENJIGZpcm13YXJlIHNwZWNpZmljYXRpb24sIHJldiAzLjIKWzJdIGh0dHBzOi8vd3d3LnNw aW5pY3MubmV0L2xpc3RzL2xpbnV4LXBjaS9tc2c1NjcxNS5odG1sClszXSBodHRwczovL3d3dy5z cGluaWNzLm5ldC9saXN0cy9saW51eC1wY2kvbXNnNTY3MjMuaHRtbApbNF0gaHR0cHM6Ly93d3cu c3Bpbmljcy5uZXQvbGlzdHMvbGludXgtcGNpL21zZzU2NzI4Lmh0bWwKWzVdIGh0dHA6Ly9pbmZv Y2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZW4wMDQ5Yi9ERU4wMDQ5Ql9J T19SZW1hcHBpbmdfVGFibGUucGRmCls2XSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9r dm0vbXNnMTQwMTE2Lmh0bWwKWzddIGh0dHA6Ly93d3cuZmlybXdhcmUub3JnLzEyNzUvYmluZGlu Z3MvcGNpL3BjaTJfMS5wZGYKWzhdIERvY3VtZW50cy9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaQpb OV0gRG9jdW1lbnRzL2RldmljZXRyZWUvYmluZGluZ3MvaW9tbXUvYXJtLHNtbXUudHh0ClsxMF0g RG9jdW1lbnQvZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvcGNpLWlvbW11LnR4dApbMTFdIERvY3Vt ZW50cy9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9wY2ktbXNpLnR4dAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=