From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roy Spliet Subject: Re: [RESEND PATCH nouveau 3/3] volt: add support for GK20A Date: Fri, 28 Nov 2014 12:25:46 +0100 Message-ID: <54785BBA.50800@nimrod-online.com> References: <1417173180-21726-1-git-send-email-vinceh@nvidia.com> <1417173180-21726-3-git-send-email-vinceh@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1417173180-21726-3-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org SGVsbG8gVmluY2UsCgpPbmUgbWlub3IgcXVlc3Rpb24gaW5saW5lLgoKT3AgMjgtMTEtMTQgb20g MTI6MTMgc2NocmVlZiBWaW5jZSBIc3U6Cj4gVGhlIHZvbHRhZ2UgdmFsdWUgYXJlIGNhbGN1bGF0 ZWQgYnkgdGhlIGhhcmR3YXJlIGNoYXJhY3Rlcml6ZWQKPiByZXN1bHQuCj4KPiBTaWduZWQtb2Zm LWJ5OiBWaW5jZSBIc3UgPHZpbmNlaEBudmlkaWEuY29tPgo+IC0tLQo+Cj4gUmVzZW5kIHRoaXMg cGF0Y2ggd2l0aCB0aGUgZnVzZSBjaGFuZ2UgYW5kIHByb3BlciBwYXRjaCBwcmVmaXgKPiBwZXIg VGhpZXJyeSdzIHJlcXVlc3QuCj4KPiAgIGRybS9LYnVpbGQgICAgICAgICAgICAgICAgICAgfCAg IDEgKwo+ICAgZHJtL2NvcmUvc3ViZGV2L3ZvbHQvZ2syMGEuYyB8ICAgMSArCj4gICBudmttL2Vu Z2luZS9kZXZpY2UvbnZlMC5jICAgIHwgICAxICsKPiAgIG52a20vaW5jbHVkZS9zdWJkZXYvdm9s dC5oICAgfCAgIDEgKwo+ICAgbnZrbS9zdWJkZXYvY2xvY2svZ2syMGEuYyAgICB8ICAxNSArKysr Cj4gICBudmttL3N1YmRldi92b2x0L2drMjBhLmMgICAgIHwgMjAyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDYgZmlsZXMgY2hhbmdlZCwgMjIxIGluc2Vy dGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEyMDAwMCBkcm0vY29yZS9zdWJkZXYvdm9sdC9nazIw YS5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbnZrbS9zdWJkZXYvdm9sdC9nazIwYS5jCj4KPiBk aWZmIC0tZ2l0IGEvZHJtL0tidWlsZCBiL2RybS9LYnVpbGQKPiBpbmRleCA3MjhiYzViNjZiMjku LjdjNDllNjY1NTA2NiAxMDA2NDQKPiAtLS0gYS9kcm0vS2J1aWxkCj4gKysrIGIvZHJtL0tidWls ZAo+IEBAIC0yMjUsNiArMjI1LDcgQEAgbm91dmVhdS15ICs9IGNvcmUvc3ViZGV2L3ZtL252YzAu bwo+ICAgbm91dmVhdS15ICs9IGNvcmUvc3ViZGV2L3ZvbHQvYmFzZS5vCj4gICBub3V2ZWF1LXkg Kz0gY29yZS9zdWJkZXYvdm9sdC9ncGlvLm8KPiAgIG5vdXZlYXUteSArPSBjb3JlL3N1YmRldi92 b2x0L252NDAubwo+ICtub3V2ZWF1LXkgKz0gY29yZS9zdWJkZXYvdm9sdC9nazIwYS5vCj4gICAK PiAgIG5vdXZlYXUteSArPSBjb3JlL2VuZ2luZS9mYWxjb24ubwo+ICAgbm91dmVhdS15ICs9IGNv cmUvZW5naW5lL3h0ZW5zYS5vCj4gZGlmZiAtLWdpdCBhL2RybS9jb3JlL3N1YmRldi92b2x0L2dr MjBhLmMgYi9kcm0vY29yZS9zdWJkZXYvdm9sdC9nazIwYS5jCj4gbmV3IGZpbGUgbW9kZSAxMjAw MDAKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjI4OTRlYjFlZGUxMwo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcm0vY29yZS9zdWJkZXYvdm9sdC9nazIwYS5jCj4gQEAgLTAsMCArMSBAQAo+ICsuLi8u Li8uLi8uLi9udmttL3N1YmRldi92b2x0L2drMjBhLmMKPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKPiBkaWZmIC0tZ2l0IGEvbnZrbS9lbmdpbmUvZGV2aWNlL252ZTAuYyBiL252a20vZW5n aW5lL2RldmljZS9udmUwLmMKPiBpbmRleCBiMWIyZTQ4NGVjZmEuLjY3NGRhMWYwOTViMiAxMDA2 NDQKPiAtLS0gYS9udmttL2VuZ2luZS9kZXZpY2UvbnZlMC5jCj4gKysrIGIvbnZrbS9lbmdpbmUv ZGV2aWNlL252ZTAuYwo+IEBAIC0xNzksNiArMTc5LDcgQEAgbnZlMF9pZGVudGlmeShzdHJ1Y3Qg bm91dmVhdV9kZXZpY2UgKmRldmljZSkKPiAgIAkJZGV2aWNlLT5vY2xhc3NbTlZERVZfRU5HSU5F X0dSICAgICBdID0gIGdrMjBhX2dyYXBoX29jbGFzczsKPiAgIAkJZGV2aWNlLT5vY2xhc3NbTlZE RVZfRU5HSU5FX0NPUFkyICBdID0gJm52ZTBfY29weTJfb2NsYXNzOwo+ICAgCQlkZXZpY2UtPm9j bGFzc1tOVkRFVl9FTkdJTkVfUEVSRk1PTl0gPSAmbnZlMF9wZXJmbW9uX29jbGFzczsKPiArCQlk ZXZpY2UtPm9jbGFzc1tOVkRFVl9TVUJERVZfVk9MVCAgIF0gPSAmZ2syMGFfdm9sdF9vY2xhc3M7 Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgMHhmMDoKPiAgIAkJZGV2aWNlLT5jbmFtZSA9ICJHSzEx MCI7Cj4gZGlmZiAtLWdpdCBhL252a20vaW5jbHVkZS9zdWJkZXYvdm9sdC5oIGIvbnZrbS9pbmNs dWRlL3N1YmRldi92b2x0LmgKPiBpbmRleCA4MjBiNjJmZmQ3NWIuLjY3ZGI1ZTU4ODgwZCAxMDA2 NDQKPiAtLS0gYS9udmttL2luY2x1ZGUvc3ViZGV2L3ZvbHQuaAo+ICsrKyBiL252a20vaW5jbHVk ZS9zdWJkZXYvdm9sdC5oCj4gQEAgLTUyLDYgKzUyLDcgQEAgaW50ICBfbm91dmVhdV92b2x0X2lu aXQoc3RydWN0IG5vdXZlYXVfb2JqZWN0ICopOwo+ICAgI2RlZmluZSBfbm91dmVhdV92b2x0X2Zp bmkgX25vdXZlYXVfc3ViZGV2X2ZpbmkKPiAgIAo+ICAgZXh0ZXJuIHN0cnVjdCBub3V2ZWF1X29j bGFzcyBudjQwX3ZvbHRfb2NsYXNzOwo+ICtleHRlcm4gc3RydWN0IG5vdXZlYXVfb2NsYXNzIGdr MjBhX3ZvbHRfb2NsYXNzOwo+ICAgCj4gICBpbnQgbm91dmVhdV92b2x0Z3Bpb19pbml0KHN0cnVj dCBub3V2ZWF1X3ZvbHQgKik7Cj4gICBpbnQgbm91dmVhdV92b2x0Z3Bpb19nZXQoc3RydWN0IG5v dXZlYXVfdm9sdCAqKTsKPiBkaWZmIC0tZ2l0IGEvbnZrbS9zdWJkZXYvY2xvY2svZ2syMGEuYyBi L252a20vc3ViZGV2L2Nsb2NrL2drMjBhLmMKPiBpbmRleCA4MmFiYmVhMmJlMTIuLmZiNGZhZDM3 NGJkZCAxMDA2NDQKPiAtLS0gYS9udmttL3N1YmRldi9jbG9jay9nazIwYS5jCj4gKysrIGIvbnZr bS9zdWJkZXYvY2xvY2svZ2syMGEuYwo+IEBAIC00NzAsNzYgKzQ3MCw5MSBAQCBnazIwYV9wc3Rh dGVzW10gPSB7Cj4gICAJewo+ICAgCQkuYmFzZSA9IHsKPiAgIAkJCS5kb21haW5bbnZfY2xrX3Ny Y19ncGNdID0gNzIwMDAsCj4gKwkJCS52b2x0YWdlID0gMCwKPiAgIAkJfSwKPiAgIAl9LAo+ICAg CXsKPiAgIAkJLmJhc2UgPSB7Cj4gICAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDEwODAw MCwKPiArCQkJLnZvbHRhZ2UgPSAxLAo+ICAgCQl9LAo+ICAgCX0sCj4gICAJewo+ICAgCQkuYmFz ZSA9IHsKPiAgIAkJCS5kb21haW5bbnZfY2xrX3NyY19ncGNdID0gMTgwMDAwLAo+ICsJCQkudm9s dGFnZSA9IDIsCj4gICAJCX0sCj4gICAJfSwKPiAgIAl7Cj4gICAJCS5iYXNlID0gewo+ICAgCQkJ LmRvbWFpbltudl9jbGtfc3JjX2dwY10gPSAyNTIwMDAsCj4gKwkJCS52b2x0YWdlID0gMywKPiAg IAkJfSwKPiAgIAl9LAo+ICAgCXsKPiAgIAkJLmJhc2UgPSB7Cj4gICAJCQkuZG9tYWluW252X2Ns a19zcmNfZ3BjXSA9IDMyNDAwMCwKPiArCQkJLnZvbHRhZ2UgPSA0LAo+ICAgCQl9LAo+ICAgCX0s Cj4gICAJewo+ICAgCQkuYmFzZSA9IHsKPiAgIAkJCS5kb21haW5bbnZfY2xrX3NyY19ncGNdID0g Mzk2MDAwLAo+ICsJCQkudm9sdGFnZSA9IDUsCj4gICAJCX0sCj4gICAJfSwKPiAgIAl7Cj4gICAJ CS5iYXNlID0gewo+ICAgCQkJLmRvbWFpbltudl9jbGtfc3JjX2dwY10gPSA0NjgwMDAsCj4gKwkJ CS52b2x0YWdlID0gNiwKPiAgIAkJfSwKPiAgIAl9LAo+ICAgCXsKPiAgIAkJLmJhc2UgPSB7Cj4g ICAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDU0MDAwMCwKPiArCQkJLnZvbHRhZ2UgPSA3 LAo+ICAgCQl9LAo+ICAgCX0sCj4gICAJewo+ICAgCQkuYmFzZSA9IHsKPiAgIAkJCS5kb21haW5b bnZfY2xrX3NyY19ncGNdID0gNjEyMDAwLAo+ICsJCQkudm9sdGFnZSA9IDgsCj4gICAJCX0sCj4g ICAJfSwKPiAgIAl7Cj4gICAJCS5iYXNlID0gewo+ICAgCQkJLmRvbWFpbltudl9jbGtfc3JjX2dw Y10gPSA2NDgwMDAsCj4gKwkJCS52b2x0YWdlID0gOSwKPiAgIAkJfSwKPiAgIAl9LAo+ICAgCXsK PiAgIAkJLmJhc2UgPSB7Cj4gICAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDY4NDAwMCwK PiArCQkJLnZvbHRhZ2UgPSAxMCwKPiAgIAkJfSwKPiAgIAl9LAo+ICAgCXsKPiAgIAkJLmJhc2Ug PSB7Cj4gICAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDcwODAwMCwKPiArCQkJLnZvbHRh Z2UgPSAxMSwKPiAgIAkJfSwKPiAgIAl9LAo+ICAgCXsKPiAgIAkJLmJhc2UgPSB7Cj4gICAJCQku ZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDc1NjAwMCwKPiArCQkJLnZvbHRhZ2UgPSAxMiwKPiAg IAkJfSwKPiAgIAl9LAo+ICAgCXsKPiAgIAkJLmJhc2UgPSB7Cj4gICAJCQkuZG9tYWluW252X2Ns a19zcmNfZ3BjXSA9IDgwNDAwMCwKPiArCQkJLnZvbHRhZ2UgPSAxMywKPiAgIAkJfSwKPiAgIAl9 LAo+ICAgCXsKPiAgIAkJLmJhc2UgPSB7Cj4gICAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9 IDg1MjAwMCwKPiArCQkJLnZvbHRhZ2UgPSAxNCwKPiAgIAkJfSwKPiAgIAl9LAo+ICAgfTsKCklz IHRoZXJlIGEgcGFydGljdWxhciByZWFzb24gd2h5IHRoaXMgdGFibGUgaXMgaGFyZC1jb2RlZCBy YXRoZXIgdGhhbiAKc3RvcmVkIGluIHRoZSBkZXZpY2UgdHJlZT8gSXQgZG9lc24ndCBzZWVtIHRv IGRpZmZlciBtdWNoIGJldHdlZW4gCmRpZmZlcmVudCBnazIwYSdzIChidXQgdGhpcyBtaWdodCBj aGFuZ2Ugd2l0aCB0aGUgZGVudmVyLWNvcmUgdmVyc2lvbj8pLCAKYnV0IEkgZG8gYW50aWNpcGF0 ZSBhIGxvdCBvZiAiY29kZSIgZHVwbGljYXRpb24gd2hlbiBwb3N0LUsxIGNvcmVzIGFyZSAKcmVs ZWFzZWQgYW5kIHN1cHBvcnRlZC4KCj4gZGlmZiAtLWdpdCBhL252a20vc3ViZGV2L3ZvbHQvZ2sy MGEuYyBiL252a20vc3ViZGV2L3ZvbHQvZ2syMGEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi44NzM4NTk2NmU2N2YKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bnZrbS9zdWJkZXYvdm9sdC9nazIwYS5jCj4gQEAgLTAsMCArMSwyMDIgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChjKSAyMDE0LCBOVklESUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4g KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgo+ICsg KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiAr ICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBO TyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO Rwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSCj4gKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1 bGF0b3IvY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPHNvYy90ZWdyYS9mdXNlLmg+Cj4gKwo+ICsj aW5jbHVkZSA8bm91dmVhdV9wbGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8c3ViZGV2L3ZvbHQuaD4K PiArCj4gK3N0cnVjdCBjdmJfY29lZiB7Cj4gKwlpbnQgYzA7Cj4gKwlpbnQgYzE7Cj4gKwlpbnQg YzI7Cj4gKwlpbnQgYzM7Cj4gKwlpbnQgYzQ7Cj4gKwlpbnQgYzU7Cj4gK307Cj4gKwo+ICtzdHJ1 Y3QgZ2syMGFfdm9sdF9wcml2IHsKPiArCXN0cnVjdCBub3V2ZWF1X3ZvbHQgYmFzZTsKPiArCXN0 cnVjdCByZWd1bGF0b3IgKnZkZDsKPiArfTsKPiArCj4gK2NvbnN0IHN0cnVjdCBjdmJfY29lZiBn azIwYV9jdmJfY29lZltdID0gewo+ICsJLyogTUh6LCAgICAgICAgYzAsICAgICBjMSwgICBjMiwg ICAgYzMsICAgICBjNCwgICBjNSAqLwo+ICsJLyogIDcyICovIHsgMTIwOTg4NiwgLTM2NDY4LCAg NTE1LCAgIDQxNywgLTEzMTIzLCAgMjAzfSwKPiArCS8qIDEwOCAqLyB7IDExMzA4MDQsIC0yNzY1 OSwgIDI5NiwgICAyOTgsIC0xMDgzNCwgIDIyMX0sCj4gKwkvKiAxODAgKi8geyAxMTYyODcxLCAt MjcxMTAsICAyNDcsICAgMjM4LCAtMTA2ODEsICAyNjh9LAo+ICsJLyogMjUyICovIHsgMTIyMDQ1 OCwgLTI4NjU0LCAgMjQ3LCAgIDE3OSwgLTEwMzc2LCAgMjk4fSwKPiArCS8qIDMyNCAqLyB7IDEy ODA5NTMsIC0zMDIwNCwgIDI0NywgICAxMTksICAtOTc2NiwgIDMwNH0sCj4gKwkvKiAzOTYgKi8g eyAxMzQ0NTQ3LCAtMzE3NzcsICAyNDcsICAgMTE5LCAgLTg1NDUsICAyOTJ9LAo+ICsJLyogNDY4 ICovIHsgMTQyMDE2OCwgLTM0MjI3LCAgMjY5LCAgICA2MCwgIC03MTcyLCAgMjU2fSwKPiArCS8q IDU0MCAqLyB7IDE0OTA3NTcsIC0zNTk1NSwgIDI3NCwgICAgNjAsICAtNTE4OCwgIDE5N30sCj4g KwkvKiA2MTIgKi8geyAxNTk5MTEyLCAtNDI1ODMsICAzOTgsICAgICAwLCAgLTE4MzEsICAxMTl9 LAo+ICsJLyogNjQ4ICovIHsgMTM2Njk4NiwgLTE2NDU5LCAtMjc0LCAgICAgMCwgIC0zMjA0LCAg IDcyfSwKPiArCS8qIDY4NCAqLyB7IDEzOTE4ODQsIC0xNzA3OCwgLTI3NCwgICAtNjAsICAtMTUy NiwgICAzMH0sCj4gKwkvKiA3MDggKi8geyAxNDE1NTIyLCAtMTc0OTcsIC0yNzQsICAgLTYwLCAg IC00NTgsICAgIDB9LAo+ICsJLyogNzU2ICovIHsgMTQ2NDA2MSwgLTE4MzMxLCAtMjc0LCAgLTEx OSwgICAxODMxLCAgLTcyfSwKPiArCS8qIDgwNCAqLyB7IDE1MjQyMjUsIC0yMDA2NCwgLTI1NCwg IC0xMTksICAgNDI3MiwgLTE1NX0sCj4gKwkvKiA4NTIgKi8geyAxNjA4NDE4LCAtMjE2NDMsIC0y NjksICAgICAwLCAgICA3NjMsICAtNDh9LAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIGN2Yl9tdiA9 ICgoYzIgKiBzcGVlZG8gLyBzX3NjYWxlICsgYzEpICogc3BlZWRvIC8gc19zY2FsZSArIGMwKQo+ ICsgKi8KPiArc3RhdGljIGlubGluZSBpbnQKPiArZ2syMGFfdm9sdF9nZXRfY3ZiX3ZvbHRhZ2Uo aW50IHNwZWVkbywgaW50IHNfc2NhbGUsCj4gKwkJY29uc3Qgc3RydWN0IGN2Yl9jb2VmICpjb2Vm KQo+ICt7Cj4gKwlpbnQgbXY7Cj4gKwo+ICsJbXYgPSBESVZfUk9VTkRfQ0xPU0VTVChjb2VmLT5j MiAqIHNwZWVkbywgc19zY2FsZSk7Cj4gKwltdiA9IERJVl9ST1VORF9DTE9TRVNUKChtdiArIGNv ZWYtPmMxKSAqIHNwZWVkbywgc19zY2FsZSkgKyBjb2VmLT5jMDsKPiArCXJldHVybiBtdjsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGN2Yl90X212ID0KPiArICogKChjMiAqIHNwZWVkbyAvIHNfc2Nh bGUgKyBjMSkgKiBzcGVlZG8gLyBzX3NjYWxlICsgYzApICsKPiArICogKChjMyAqIHNwZWVkbyAv IHNfc2NhbGUgKyBjNCArIGM1ICogVCAvIHRfc2NhbGUpICogVCAvIHRfc2NhbGUpCj4gKyAqLwo+ ICtzdGF0aWMgaW5saW5lIGludAo+ICtnazIwYV92b2x0X2dldF9jdmJfdF92b2x0YWdlKGludCBz cGVlZG8sIGludCB0ZW1wLCBpbnQgc19zY2FsZSwgaW50IHRfc2NhbGUsCj4gKwkJY29uc3Qgc3Ry dWN0IGN2Yl9jb2VmICpjb2VmKQo+ICt7Cj4gKwlpbnQgY3ZiX212LCBtdjsKPiArCj4gKwljdmJf bXYgPSBnazIwYV92b2x0X2dldF9jdmJfdm9sdGFnZShzcGVlZG8sIHNfc2NhbGUsIGNvZWYpOwo+ ICsKPiArCW12ID0gRElWX1JPVU5EX0NMT1NFU1QoY29lZi0+YzMgKiBzcGVlZG8sIHNfc2NhbGUp ICsgY29lZi0+YzQgKwo+ICsJCURJVl9ST1VORF9DTE9TRVNUKGNvZWYtPmM1ICogdGVtcCwgdF9z Y2FsZSk7Cj4gKwltdiA9IERJVl9ST1VORF9DTE9TRVNUKG12ICogdGVtcCwgdF9zY2FsZSkgKyBj dmJfbXY7Cj4gKwlyZXR1cm4gbXY7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZ2syMGFfdm9s dF9jYWxjX3ZvbHRhZ2UoY29uc3Qgc3RydWN0IGN2Yl9jb2VmICpjb2VmKQo+ICt7Cj4gKwlpbnQg c3BlZWRvLCBtdjsKPiArCj4gKwlzcGVlZG8gPSB0ZWdyYV9za3VfaW5mby5ncHVfc3BlZWRvX3Zh bHVlOwo+ICsKPiArCW12ID0gZ2syMGFfdm9sdF9nZXRfY3ZiX3Rfdm9sdGFnZShzcGVlZG8sIC0x MCwgMTAwLCAxMCwgY29lZik7Cj4gKwltdiA9IERJVl9ST1VORF9VUChtdiwgMTAwMCk7Cj4gKwo+ ICsJcmV0dXJuIG12ICogMTAwMDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtnazIwYV92b2x0 X3ZpZF9nZXQoc3RydWN0IG5vdXZlYXVfdm9sdCAqdm9sdCkKPiArewo+ICsJc3RydWN0IGdrMjBh X3ZvbHRfcHJpdiAqcHJpdiA9ICh2b2lkICopdm9sdDsKPiArCWludCBpLCB1djsKPiArCj4gKwl1 diA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShwcml2LT52ZGQpOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCB2b2x0LT52aWRfbnI7IGkrKykKPiArCQlpZiAodm9sdC0+dmlkW2ldLnV2ID49IHV2KQo+ ICsJCQlyZXR1cm4gaTsKPiArCj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGlj IGludAo+ICtnazIwYV92b2x0X3ZpZF9zZXQoc3RydWN0IG5vdXZlYXVfdm9sdCAqdm9sdCwgdTgg dmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZ2syMGFfdm9sdF9wcml2ICpwcml2ID0gKHZvaWQgKil2b2x0 Owo+ICsKPiArCW52X2RlYnVnKHZvbHQsICJzZXQgdm9sdGFnZSBhcyAlZHV2XG4iLCB2b2x0LT52 aWRbdmlkXS51dik7Cj4gKwlyZXR1cm4gcmVndWxhdG9yX3NldF92b2x0YWdlKHByaXYtPnZkZCwg dm9sdC0+dmlkW3ZpZF0udXYsIDEyMDAwMDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2dr MjBhX3ZvbHRfc2V0X2lkKHN0cnVjdCBub3V2ZWF1X3ZvbHQgKnZvbHQsIHU4IGlkLCBpbnQgY29u ZGl0aW9uKQo+ICt7Cj4gKwlzdHJ1Y3QgZ2syMGFfdm9sdF9wcml2ICpwcml2ID0gKHZvaWQgKil2 b2x0Owo+ICsJaW50IHByZXZfdXYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocHJpdi0+dmRkKTsK PiArCWludCB0YXJnZXRfdXYgPSB2b2x0LT52aWRbaWRdLnV2Owo+ICsJaW50IHJldDsKPiArCj4g Kwludl9kZWJ1Zyh2b2x0LCAicHJldj0lZCwgdGFyZ2V0PSVkLCBjb25kaXRpb249JWRcbiIsCj4g KwkJCXByZXZfdXYsIHRhcmdldF91diwgY29uZGl0aW9uKTsKPiArCWlmICghY29uZGl0aW9uIHx8 Cj4gKwkJKGNvbmRpdGlvbiA8IDAgJiYgdGFyZ2V0X3V2IDwgcHJldl91dikgfHwKPiArCQkoY29u ZGl0aW9uID4gMCAmJiB0YXJnZXRfdXYgPiBwcmV2X3V2KSkgewo+ICsJCXJldCA9IGdrMjBhX3Zv bHRfdmlkX3NldCh2b2x0LCB2b2x0LT52aWRbaWRdLnZpZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCXJl dCA9IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ ICtnazIwYV92b2x0X2N0b3Ioc3RydWN0IG5vdXZlYXVfb2JqZWN0ICpwYXJlbnQsIHN0cnVjdCBu b3V2ZWF1X29iamVjdCAqZW5naW5lLAo+ICsJICAgICAgIHN0cnVjdCBub3V2ZWF1X29jbGFzcyAq b2NsYXNzLCB2b2lkICpkYXRhLCB1MzIgc2l6ZSwKPiArCSAgICAgICBzdHJ1Y3Qgbm91dmVhdV9v YmplY3QgKipwb2JqZWN0KQo+ICt7Cj4gKwlzdHJ1Y3QgZ2syMGFfdm9sdF9wcml2ICpwcml2Owo+ ICsJc3RydWN0IG5vdXZlYXVfdm9sdCAqdm9sdDsKPiArCXN0cnVjdCBub3V2ZWF1X3BsYXRmb3Jt X2RldmljZSAqcGxhdDsKPiArCWludCBpLCByZXQsIHV2Owo+ICsKPiArCXJldCA9IG5vdXZlYXVf dm9sdF9jcmVhdGUocGFyZW50LCBlbmdpbmUsIG9jbGFzcywgJnByaXYpOwo+ICsJKnBvYmplY3Qg PSBudl9vYmplY3QocHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ dm9sdCA9ICZwcml2LT5iYXNlOwo+ICsKPiArCXBsYXQgPSBudl9kZXZpY2VfdG9fcGxhdGZvcm0o bnZfZGV2aWNlKHBhcmVudCkpOwo+ICsKPiArCXV2ID0gcmVndWxhdG9yX2dldF92b2x0YWdlKHBs YXQtPmdwdS0+dmRkKTsKPiArCW52X2luZm8ocHJpdiwgIlRoZSBkZWZhdWx0IHZvbHRhZ2UgaXMg JWR1VlxuIiwgdXYpOwo+ICsKPiArCXByaXYtPnZkZCA9IHBsYXQtPmdwdS0+dmRkOwo+ICsJcHJp di0+YmFzZS52aWRfZ2V0ID0gZ2syMGFfdm9sdF92aWRfZ2V0Owo+ICsJcHJpdi0+YmFzZS52aWRf c2V0ID0gZ2syMGFfdm9sdF92aWRfc2V0Owo+ICsJcHJpdi0+YmFzZS5zZXRfaWQgPSBnazIwYV92 b2x0X3NldF9pZDsKPiArCj4gKwl2b2x0LT52aWRfbnIgPSBBUlJBWV9TSVpFKGdrMjBhX2N2Yl9j b2VmKTsKPiArCW52X2RlYnVnKHByaXYsICIlcyAtIHZpZF9uciA9ICVkXG4iLCBfX2Z1bmNfXywg dm9sdC0+dmlkX25yKTsKPiArCWZvciAoaSA9IDA7IGkgPCB2b2x0LT52aWRfbnI7IGkrKykgewo+ ICsJCXZvbHQtPnZpZFtpXS52aWQgPSBpOwo+ICsJCXZvbHQtPnZpZFtpXS51diA9IGdrMjBhX3Zv bHRfY2FsY192b2x0YWdlKCZnazIwYV9jdmJfY29lZltpXSk7Cj4gKwkJbnZfZGVidWcocHJpdiwg IiUyZDogdmlkPSVkLCB1dj0lZFxuIiwgaSwgdm9sdC0+dmlkW2ldLnZpZCwKPiArCQkJCQl2b2x0 LT52aWRbaV0udXYpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdHJ1Y3Qg bm91dmVhdV9vY2xhc3MKPiArZ2syMGFfdm9sdF9vY2xhc3MgPSB7Cj4gKwkuaGFuZGxlID0gTlZf U1VCREVWKFZPTFQsIDB4ZWEpLAo+ICsJLm9mdW5jcyA9ICYoc3RydWN0IG5vdXZlYXVfb2Z1bmNz KSB7Cj4gKwkJLmN0b3IgPSBnazIwYV92b2x0X2N0b3IsCj4gKwkJLmR0b3IgPSBfbm91dmVhdV92 b2x0X2R0b3IsCj4gKwkJLmluaXQgPSBfbm91dmVhdV92b2x0X2luaXQsCj4gKwkJLmZpbmkgPSBf bm91dmVhdV92b2x0X2ZpbmksCj4gKwl9LAo+ICt9OwoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL25vdXZlYXUK