From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason McMullan Subject: [PATCH] MII bus API for PHY devices Rev 2.0 Date: Thu, 02 Dec 2004 13:29:22 -0500 Message-ID: <1102012163.6056.39.camel@jmcmullan> References: <069B6F33-341C-11D9-9652-000393DBC2E8@freescale.com> <9B0D9272-398A-11D9-96F6-000393C30512@freescale.com> <1100820391.25521.14.camel@gaston> <97DA0EF0-3A70-11D9-B023-000393C30512@freescale.com> <1100904184.3856.46.camel@gaston> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-UCEP7LL7eTaCc7pqknBv" Cc: Benjamin Herrenschmidt , Netdev Return-path: To: Andy Fleming In-Reply-To: Sender: netdev-bounce@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org --=-UCEP7LL7eTaCc7pqknBv Content-Type: text/plain Content-Transfer-Encoding: 7bit Ok, given previous input, I now release mii-bus 2.0 * CIS8201 interrupt support * The PHY device api is now similar to 'sungem' * Set up your PHY as autoneg or forced speeds. -- Jason McMullan --=-UCEP7LL7eTaCc7pqknBv Content-Disposition: attachment; filename=driver-mii-bus.patch Content-Type: text/x-patch; name=driver-mii-bus.patch; charset=ISO-8859-1 Content-Transfer-Encoding: base64 IyMjIyBBdXRvLWdlbmVyYXRlZCBwYXRjaCAjIyMjDQpTaWduZWQtb2ZmLWJ5OiBKYXNvbiBNY011 bGxhbiA8am1jbXVsbGFuQHRpbWVzeXMuY29tPg0KRGF0ZTogICAgICAgICAgVGh1LCAwMiBEZWMg MjAwNCAxMzoyMDo0OSAtMDUwMA0KRGVzY3JpcHRpb246ICAgTUlJIEJ1cyBpbnRlcmZhY2UNCkRl cGVuZHM6DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KSW5kZXggb2YgY2hh bmdlczoNCg0KIGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAgICAgICAgfCAgICA0IA0KIGxpbnV4 L2RyaXZlcnMvbmV0L21paV9iaXRiYW5nLmMgfCAgMTM0ICsrKysrKysrDQogbGludXgvZHJpdmVy cy9uZXQvbWlpX2JpdGJhbmcuaCB8ICAgNDAgKysNCiBsaW51eC9kcml2ZXJzL25ldC9taWlfYnVz LmMgICAgIHwgIDYzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQog bGludXgvZHJpdmVycy9uZXQvcGh5X2NpY2FkYS5jICB8ICAxNzcgKysrKysrKysrKysNCiBsaW51 eC9kcml2ZXJzL25ldC9waHlfZGF2aWNvbS5jIHwgIDE0MCArKysrKysrKw0KIGxpbnV4L2RyaXZl cnMvbmV0L3BoeV9seHQ5N3guYyAgfCAgMjEwICsrKysrKysrKysrKysNCiBsaW51eC9kcml2ZXJz L25ldC9waHlfbWFydmVsbC5jIHwgIDEyNSArKysrKysrDQogbGludXgvaW5jbHVkZS9saW51eC9t aWlfYnVzLmggICB8ICAxOTEgKysrKysrKysrKysNCiA5IGZpbGVzIGNoYW5nZWQsIDE2NTkgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KDQoNCi0tLSBsaW51eC1vcmlnL2RyaXZlcnMvbmV0 L01ha2VmaWxlDQorKysgbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUNCkBAIC02Miw3ICs2Miw5 IEBADQogIyBlbmQgbGluayBvcmRlciBzZWN0aW9uDQogIw0KIA0KLW9iai0kKENPTkZJR19NSUkp ICs9IG1paS5vDQorb2JqLSQoQ09ORklHX01JSSkgKz0gbWlpLm8gbWlpX2J1cy5vIG1paV9iaXRi YW5nLm8gXA0KKwkJICAgICBwaHlfZGF2aWNvbS5vIHBoeV9tYXJ2ZWxsLm8gcGh5X2NpY2FkYS5v IFwNCisJCSAgICAgcGh5X2x4dDk3eC5vDQogDQogb2JqLSQoQ09ORklHX1NVTkRBTkNFKSArPSBz dW5kYW5jZS5vDQogb2JqLSQoQ09ORklHX0hBTUFDSEkpICs9IGhhbWFjaGkubw0KLS0tIC9kZXYv bnVsbA0KKysrIGxpbnV4L2RyaXZlcnMvbmV0L21paV9iaXRiYW5nLmMNCkBAIC0wLDAgKzEsMTM0 IEBADQorLyogDQorICogZHJpdmVycy9uZXQvbWlpX2JpdGJhbmcuYw0KKyAqDQorICogQXV0aG9y OiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgQ29y cC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRo ZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAqIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNl LCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKi8N CisNCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4N CisNCisjaW5jbHVkZSAibWlpX2JpdGJhbmcuaCINCisNCisjdW5kZWYgUEhZX1JFQUQNCisjdW5k ZWYgUEhZX1dSSVRFDQorI2RlZmluZSBQSFlfUkVBRAkwDQorI2RlZmluZSBQSFlfV1JJVEUJMQ0K Kw0KKy8qIA0KKyAqIDFzdCBieXRlOiAwMTAxUFBQUCBvbiB3cml0ZXMsIHdoZXJlIFBQUFAgaXMg dGhlIE1TQiBvZiB0aGUgcGh5LWlkDQorICogICAgICAgICAgIDAxMTBQUFBQIG9uIHJlYWRzLCB3 aGVyZSAgUFBQUCBpcyB0aGUgTVNCIG9mIHRoZSBwaHktaWQNCisgKiAybmQgYnl0ZTogUFJSUlJS MTAsIFAgaXMgdGhlIExTQiBvZiB0aGUgcGh5LWlkLCBSIGlzIHRoZSByZWdpc3Rlcg0KKyAqIDNy ZCw0dGggYnl0ZXM6IGNvbnRyb2wgb24gd3JpdGVzLCB2YWx1ZXMgb24gcmVhZHMNCisgKi8NCisN CitzdGF0aWMgaW5saW5lIHZvaWQgbWlpX2JpdGJhbmdfbWFyayh2b2lkICpwcml2KQ0KK3sNCisJ c3RydWN0IG1paV9iaXRiYW5nICppbmZvID0gcHJpdjsNCisJaW50IGk7DQorDQorCS8qIFdyaXRl IHByZWFtYmxlICovDQorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQ0KKwkJaW5mby0+c2VuZChp bmZvLT5wcml2LCAxKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG1paV9iaXRiYW5nX3Bo eV9pZCh2b2lkICpwcml2LCBpbnQgcGh5X2lkLCBpbnQgcmVnLCBpbnQgaXNfd3JpdGUpDQorew0K KwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8gPSBwcml2Ow0KKwlpbnQgaTsNCisNCisJLyogUHJl YW1ibGUgKi8NCisJaW5mby0+c2VuZChpbmZvLT5wcml2LDApOw0KKwlpbmZvLT5zZW5kKGluZm8t PnByaXYsMSk7DQorCWlmIChpc193cml0ZSkgew0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDAp Ow0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDEpOw0KKwl9IGVsc2Ugew0KKwkJaW5mby0+c2Vu ZChpbmZvLT5wcml2LDEpOw0KKwkJaW5mby0+c2VuZChpbmZvLT5wcml2LDApOw0KKwl9DQorDQor CS8qIFdyaXRlIFBIWSBhZGRyICovDQorCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspDQorCQlpbmZv LT5zZW5kKGluZm8tPnByaXYsIChwaHlfaWQgPj4gKDQtaSkpICYgMSk7DQorDQorCS8qIFdyaXRl IHRoZSByZWdpc3RlciAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQ0KKwkJaW5mby0+c2Vu ZChpbmZvLT5wcml2LCAocmVnID4+ICg0LWkpKSAmIDEpOw0KKw0KKwlpbmZvLT5zZW5kKGluZm8t PnByaXYsMSk7DQorCWluZm8tPnNlbmQoaW5mby0+cHJpdiwwKTsNCit9DQorDQorc3RhdGljIGlu dCBtaWlfYml0YmFuZ19yZWFkKHZvaWQgKnByaXYsIGludCBwaHlfaWQsIGludCByZWcpDQorew0K KwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8gPSBwcml2Ow0KKwlpbnQgaTsNCisJaW50IHJldHZh bD0wOw0KKw0KKwltaWlfYml0YmFuZ19tYXJrKHByaXYpOw0KKwltaWlfYml0YmFuZ19waHlfaWQo cHJpdiwgcGh5X2lkLCByZWcsIFBIWV9SRUFEKTsNCisNCisJZm9yIChpID0gMDsgaSA8IDE2OyBp KyspDQorCQlyZXR2YWwgPSAocmV0dmFsIDw8IDEpIHwgKGluZm8tPnJlY3YoaW5mby0+cHJpdikg JiAxKTsNCisNCisJbWlpX2JpdGJhbmdfbWFyayhwcml2KTsNCisNCisJcmV0dXJuIHJldHZhbDsN Cit9DQorDQorc3RhdGljIGludCBtaWlfYml0YmFuZ193cml0ZSh2b2lkICpwcml2LCBpbnQgcGh5 X2lkLCBpbnQgcmVnLCB1aW50MTZfdCB2YWwpDQorew0KKwlzdHJ1Y3QgbWlpX2JpdGJhbmcgKmlu Zm8gPSBwcml2Ow0KKwlpbnQgaTsNCisNCisJbWlpX2JpdGJhbmdfbWFyayhwcml2KTsNCisJbWlp X2JpdGJhbmdfcGh5X2lkKHByaXYsIHBoeV9pZCwgcmVnLCBQSFlfV1JJVEUpOw0KKw0KKwlmb3Ig KGk9MDsgaSA8IDE2OyBpKyspDQorCQlpbmZvLT5zZW5kKGluZm8tPnByaXYsICh2YWwgPj4gKDE1 LWkpKSAmIDEpOw0KKw0KKwltaWlfYml0YmFuZ19tYXJrKHByaXYpOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIHZvaWQgbWlpX2JpdGJhbmdfcmVzZXQodm9pZCAqcHJpdikNCit7DQor CXN0cnVjdCBtaWlfYml0YmFuZyAqaW5mbyA9IHByaXY7DQorDQorCWluZm8tPnJlc2V0KGluZm8t PnByaXYpOw0KK30NCisNCisvKiBDcmVhdGVzIGEgYml0YmFuZyBNSUkgYnVzDQorICogUmV0dXJu cyA8IDAgb24gZXJyb3IsIG90aGVyd2lzZSBhIGJ1cyBJRA0KKyAqLw0KK2ludCBtaWlfYml0YmFu Z19yZWdpc3RlcihzdHJ1Y3QgbWlpX2JpdGJhbmcgKmluZm8pDQorew0KKwltZW1zZXQoJmluZm8t PmJ1cywgMCwgc2l6ZW9mKGluZm8tPmJ1cykpOw0KKw0KKwlpbmZvLT5idXMubmFtZSA9IGluZm8t Pm5hbWU7DQorCWluZm8tPmJ1cy5wcml2ID0gaW5mbzsNCisJaW5mby0+YnVzLnJlYWQgPSBtaWlf Yml0YmFuZ19yZWFkOw0KKwlpbmZvLT5idXMud3JpdGUgPSBtaWlfYml0YmFuZ193cml0ZTsNCisJ aW5mby0+YnVzLnJlc2V0ID0gbWlpX2JpdGJhbmdfcmVzZXQ7DQorDQorCXJldHVybiBtaWlfYnVz X3JlZ2lzdGVyKCZpbmZvLT5idXMpOw0KK30NCisNCisNCisvKiBVbnJlZ2lzdGVycyBhIGJpdGJh bmcgTUlJIGJ1cw0KKyAqLw0KK3ZvaWQgbWlpX2JpdGJhbmdfdW5yZWdpc3RlcihzdHJ1Y3QgbWlp X2JpdGJhbmcgKmluZm8pDQorew0KKwltaWlfYnVzX3VucmVnaXN0ZXIoJmluZm8tPmJ1cyk7DQor fQ0KKw0KKw0KDQotLS0gL2Rldi9udWxsDQorKysgbGludXgvZHJpdmVycy9uZXQvbWlpX2JpdGJh bmcuaA0KQEAgLTAsMCArMSw0MCBAQA0KKy8qIA0KKyAqIGRyaXZlcnMvbmV0L21paV9iaXRiYW5n LmgNCisgKg0KKyAqIEF1dGhvcjogSmFzb24gTWNNdWxsYW4NCisgKg0KKyAqIENvcHlyaWdodCAo YykgMjAwNCBUaW1lc3lzIENvcnAuDQorICoNCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRl ciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lv biAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXINCisgKiBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLg0KKyAqDQorICovDQorI2lmbmRlZiBfTkVUX01JSV9CSVRCQU5HX0gNCisjZGVmaW5l IF9ORVRfTUlJX0JJVEJBTkdfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9taWlfYnVzLmg+DQorDQor c3RydWN0IG1paV9iaXRiYW5nIHsNCisJY29uc3QgY2hhciAqbmFtZTsJLyogTmFtZSBvZiBkZXZp Y2UgKi8NCisJdm9pZCAqcHJpdjsJCS8qIFByaXZhdGUgZGF0YSAqLw0KKw0KKwl2b2lkICgqc2Vu ZCkodm9pZCAqcHJpdiwgaW50IGJpdCk7CS8qIFNlbmQgb25lIGJpdCAqLw0KKwlpbnQgKCpyZWN2 KSh2b2lkICpwcml2KTsJCS8qIFJlY3Ygb25lIGJpdCAqLw0KKwl2b2lkICgqcmVzZXQpKHZvaWQg KnByaXYpOw0KKw0KKwkvKiBBdXRvLWZpbGxlZC1pbiBpbmZvcm1hdGlvbiAqLw0KKwlzdHJ1Y3Qg bWlpX2J1cyBidXM7DQorfTsNCisNCisvKiBDcmVhdGVzIGEgYml0YmFuZyBNSUkgYnVzDQorICog UmV0dXJucyA8IDAgb24gZXJyb3IsIG90aGVyd2lzZSBhIGJ1cyBJRA0KKyAqLw0KK2V4dGVybiBp bnQgbWlpX2JpdGJhbmdfcmVnaXN0ZXIoc3RydWN0IG1paV9iaXRiYW5nICppbmZvKTsNCisNCisv KiBVbnJlZ2lzdGVycyBhIGJpdGJhbmcgTUlJIGJ1cw0KKyAqLw0KK2V4dGVybiB2b2lkIG1paV9i aXRiYW5nX3VucmVnaXN0ZXIoc3RydWN0IG1paV9iaXRiYW5nICppbmZvKTsNCisNCisjZW5kaWYg LyogX05FVF9NSUlfQklUQkFOR19IICovDQoNCi0tLSAvZGV2L251bGwNCisrKyBsaW51eC9kcml2 ZXJzL25ldC9taWlfYnVzLmMNCkBAIC0wLDAgKzEsNjM5IEBADQorLyogDQorICogZHJpdmVycy9u ZXQvbWlpX2J1cy5jDQorICoNCisgKiBBZGFwZXRlZCBmcm9tIGRyaXZlcnMvbmV0L2dpYW5mYXJf bWlpLmMsIGJ5IEFuZHkgRmxlbWluZw0KKyAqDQorICogQXV0aG9yOiBKYXNvbiBNY011bGxhbiAo amFzb24ubWNtdWxsYW5AdGltZXN5cy5jb20pIHRvIA0KKyAqIAkgICBiZSBhIGdlbmVyaWMgbWlp IGludGVyZmFjZQ0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgSW5jDQorICoN CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg IGl0IGFuZC9vciBtb2RpZnkgaXQNCisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdl bmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0 IHlvdXINCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICovDQorI2luY2x1 ZGUgPGxpbnV4L2NvbmZpZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVk ZSA8bGludXgvc3RyaW5nLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGlu dXgvbmV0ZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1 ZGUgPGxpbnV4L3NrYnVmZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNs dWRlIDxsaW51eC9tbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9taWlfYnVzLmg+DQorDQorI2luY2x1 ZGUgPGFzbS9pby5oPg0KKyNpbmNsdWRlIDxhc20vaXJxLmg+DQorI2luY2x1ZGUgPGFzbS91YWNj ZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKw0KKyN1bmRlZiBERUJVRw0KKw0K K3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1c1s4XTsNCisNCisjZGVmaW5lIE1JSV9CVVNf TUFYCShzaXplb2YobWlpX2J1cykvc2l6ZW9mKHN0cnVjdCBtaWlfYnVzICopKQ0KKw0KK3N0YXRp YyBpbmxpbmUgc3RydWN0IHBoeV9pbmZvICptaWlfcGh5X29mKHN0cnVjdCBtaWlfaWZfaW5mbyAq bWlpKQ0KK3sNCisJaWYgKG1paSAhPSBOVUxMKSB7DQorCQlpbnQgYnVzLGlkOw0KKwkJYnVzID0g TUlJX0JVUyhtaWktPnBoeV9pZCk7DQorCQlpZCAgPSBNSUlfSUQobWlpLT5waHlfaWQpOw0KKwkJ cmV0dXJuIG1paV9idXNbYnVzXS0+cGh5W2lkXTsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9 DQorDQorLyogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBmb3IgdGhpcyBkZXZpY2UgdG8gdGhlIHJl Z2lzdGVyIGF0IHJlZ251bSwNCisgKiB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcyBkb25lIGJl Zm9yZSBpdCByZXR1cm5zLiAgQWxsIFBIWSANCisgKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBk b25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLw0KK0VYUE9SVF9TWU1CT0wobWlpX2J1 c193cml0ZSk7DQoraW50IG1paV9idXNfd3JpdGUoaW50IGJ1cywgaW50IGlkLCBpbnQgcmVnbnVt LCB1aW50MTZfdCB2YWx1ZSkNCit7DQorCWlmIChtaWlfYnVzW2J1c10gPT0gTlVMTCkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKyNpZmRlZiBERUJVRw0KKwlwcmludGsoS0VSTl9JTkZPICJwaHkl ZC4lZDogV3JpdGUgMHglLjJ4IDwtIDB4JS40eFxuIiwgYnVzLCBpZCwgcmVnbnVtLCB2YWx1ZSk7 DQorI2VuZGlmDQorCW1paV9idXNbYnVzXS0+d3JpdGUobWlpX2J1c1tidXNdLT5wcml2LCBpZCwg cmVnbnVtLCB2YWx1ZSk7DQorCXJldHVybiAwOw0KK30NCisNCisvKiBSZWFkcyBmcm9tIHJlZ2lz dGVyIHJlZ251bSBpbiB0aGUgUEhZIGZvciBkZXZpY2UgZGV2LA0KKyAqIHJldHVybmluZyB0aGUg dmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkNCisgKiBjb25maWd1cmF0aW9u IGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLw0KK0VYUE9SVF9T WU1CT0wobWlpX2J1c19yZWFkKTsNCitpbnQgbWlpX2J1c19yZWFkKGludCBidXMsIGludCBpZCwg aW50IHJlZ251bSkNCit7DQorCWlmIChtaWlfYnVzW2J1c10gPT0gTlVMTCkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKyNpZmRlZiBERUJVRw0KKwl7DQorCQlpbnQgcnY7DQorCQlydiA9IG1paV9i dXNbYnVzXS0+cmVhZChtaWlfYnVzW2J1c10tPnByaXYsIGlkLCByZWdudW0pOw0KKwkJcHJpbnRr KEtFUk5fSU5GTyAicGh5JWQuJWQ6IFJlYWQgIDB4JS4yeCAtPiAweCUuNHhcbiIsIGJ1cywgaWQs IHJlZ251bSwgcnYpOw0KKwkJcmV0dXJuIHJ2Ow0KKwl9DQorI2Vsc2UNCisJcmV0dXJuIG1paV9i dXNbYnVzXS0+cmVhZChtaWlfYnVzW2J1c10tPnByaXYsIGlkLCByZWdudW0pOw0KKyNlbmRpZg0K K30NCisNCisvKiBIZWxwZXIgZnVuY3Rpb24gKi8NCitzdGF0aWMgaW50IHBoeV9zZXRfYXV0b25l ZyhzdHJ1Y3QgcGh5X2luZm8gKnBoeSwgdWludDMyX3QgYWR2ZXJ0aXNlKQ0KK3sNCisJaW50IGVy cjsNCisNCisJZXJyID0gcGh5LT5vcHMtPnNldF9hdXRvbmVnKHBoeSwgYWR2ZXJ0aXNlKTsNCisJ aWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlwaHktPm5lZ290aWF0ZS5hZHZlcnRp c2UgPSBhZHZlcnRpc2U7DQorCXBoeS0+bmVnb3RpYXRlLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJM RTsNCisJcGh5LT5uZWdvdGlhdGUudGltZW91dCA9IGppZmZpZXMgKyBNSUlfVElNRU9VVDsNCisJ cGh5LT5zdGF0ZS5hdXRvbmVnID0gMTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZpbmUg QlJJRUZfTUlJX0VSUk9SUw0KK0VYUE9SVF9TWU1CT0wocGh5X2dlbl9wb2xsKTsNCisvKiBXYWl0 IGZvciBhdXRvLW5lZ290aWF0aW9uIHRvIGNvbXBsZXRlICovDQoraW50IHBoeV9nZW5fcG9sbChz dHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXN0cnVjdCBwaHlfc3RhdGUgKnBzdGF0ZTsNCisJ dWludDE2X3QgdmFsOw0KKw0KKwlwc3RhdGUgPSAmcGh5LT5zdGF0ZTsNCisNCisJcGh5X3JlYWQo cGh5LCBNSUlfQk1TUik7CS8qIER1bW15IHJlYWQgKi8NCisJdmFsID0gcGh5X3JlYWQocGh5LCBN SUlfQk1TUik7DQorDQorCS8qIElmIHRoZSBsaW5rIGp1c3QgY2FtZSB1cCwgcmVzdGFydCB0aGUg YXV0by1uZWcgcHJvY2VkdXJlDQorCSAqLw0KKwlpZiAodmFsICYgQk1TUl9MU1RBVFVTKSB7DQor CQlpZiAocHN0YXRlLT5saW5rID09IDAgJiYgDQorCQkgICAgcHN0YXRlLT5hdXRvbmVnID09IDAg JiYgcGh5LT5uZWdvdGlhdGUuYXV0b25lZykgew0KKwkJCXBoeV9zZXRfYXV0b25lZyhwaHksIHBo eS0+bmVnb3RpYXRlLmFkdmVydGlzZSk7DQorCQkJcmV0dXJuIC1FQUdBSU47DQorCQl9DQorCQlw c3RhdGUtPmxpbmsgPSAxOw0KKwl9IGVsc2Ugew0KKwkJcHN0YXRlLT5saW5rID0gMDsNCisJfQ0K Kw0KKwkvKiBPbmx5IGF1dG8tbmVnb3RpYXRlIGlmIHRoZSBsaW5rIGhhcyBqdXN0IGdvbmUgdXAg Ki8NCisJaWYgKHBzdGF0ZS0+bGluayAmJiBwc3RhdGUtPmF1dG9uZWcgJiYgDQorCSAgICAodGlt ZV9hZnRlcihqaWZmaWVzLHBoeS0+bmVnb3RpYXRlLnRpbWVvdXQpIHx8IA0KKwkgICAgICh2YWwg JiBCTVNSX0FORUdDT01QTEVURSkpKSB7DQorI2lmZGVmIEJSSUVGX01JSV9FUlJPUlMNCisJCWlm ICh2YWwgJiBCTVNSX0FORUdDT01QTEVURSkgew0KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBB dXRvLW5lZ290aWF0aW9uIGRvbmVcbiIsDQorCQkJICAgICAgIHBoeS0+bmFtZSk7DQorCQl9IGVs c2Ugew0KKwkJCXByaW50ayhLRVJOX0lORk8NCisJCQkgICAgICAgIiVzOiBBdXRvLW5lZ290aWF0 aW9uIHRpbWVkIG91dFxuIiwNCisJCQkgICAgICAgcGh5LT5uYW1lKTsNCisJCX0NCisjZW5kaWYN CisNCisJCXBzdGF0ZS0+YXV0b25lZyA9IDA7DQorDQorCQlpZiAodmFsICYgQk1TUl9BTkVHQ09N UExFVEUpIHsNCisJCQl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9MUEEpOw0KKwkJCXZhbCAmPSBw aHlfcmVhZChwaHksIE1JSV9BRFZFUlRJU0UpOw0KKw0KKwkJCS8qIEFjY29yZGluZyB0byBJRUVF IDgwMi4zLCBMUEEgZGVjaXNpb25zDQorCQkJICogbXVzdCBiZSBkb25lIGluIHRoaXMgb3JkZXIN CisJCQkgKi8NCisJCQlpZiAodmFsICYgTFBBXzEwMEZVTEwpIHsNCisJCQkJcHN0YXRlLT5zcGVl ZCA9IFNQRUVEXzEwMDsNCisJCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCQl9 IGVsc2UgaWYgKHZhbCAmIExQQV8xMDBIQUxGKSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVF RF8xMDA7DQorCQkJCXBzdGF0ZS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7DQorCQkJfSBlbHNlIGlm ICh2YWwgJiBMUEFfMTBGVUxMKSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDsNCisJ CQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCQl9IGVsc2UgaWYgKHZhbCAmIExQ QV8xMEhBTEYpIHsNCisJCQkJcHN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwOw0KKwkJCQlwc3RhdGUt PmR1cGxleCA9IERVUExFWF9IQUxGOw0KKwkJCX0gZWxzZSB7DQorCQkJCXBzdGF0ZS0+c3BlZWQg PSBTUEVFRF8xMDsNCisJCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsNCisJCQl9DQor CQl9DQorCX0NCisNCisJcmV0dXJuIChwc3RhdGUtPmF1dG9uZWcgPyAtRUFHQUlOIDogMCk7DQor fQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X29wcyBnZW5fb3BzID0gew0KKwkuc2V0X2F1dG9uZWcg PSBwaHlfZ2VuX3NldF9hdXRvbmVnLA0KKwkucG9sbCA9IHBoeV9nZW5fcG9sbA0KK307DQorDQor c3RhdGljIHN0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb19nZW5lcmljID0gew0KKwkuaWQgPSAweDAs DQorCS5uYW1lID0gIkdlbmVyaWMgUEhZIiwNCisJLnNoaWZ0ID0gMzIsDQorCS5vcHMgPSAmZ2Vu X29wcw0KK307DQorDQorc3RhdGljIExJU1RfSEVBRChwaHlfbGlzdCk7DQorDQorLyogVXNlIHRo ZSBQSFkgSUQgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgUEhZIGlzIGF0dGFj aGVkDQorICogdG8gZGV2aWNlIGRldi4gIHJldHVybiBhIHN0cnVjdCBwaHlfaW5mbyBzdHJ1Y3R1 cmUgZGVzY3JpYmluZyB0aGF0IFBIWQ0KKyAqLw0KK3N0cnVjdCBwaHlfaW5mbyAqbWlpX3BoeV9n ZXRfaW5mbyhpbnQgYnVzLCBpbnQgaWQpDQorew0KKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsNCisJ dWludDE2X3QgcGh5X3JlZzsNCisJdWludDMyX3QgcGh5X2lkOw0KKwlzdHJ1Y3QgcGh5X2luZm8g KmluZm8gPSBOVUxMOw0KKw0KKwlpZiAobWlpX2J1c1tidXNdID09IE5VTEwpDQorCQlyZXR1cm4g TlVMTDsNCisNCisJLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMSwgYW5kIHB1dCB0aGVtIGlu IHRoZSB1cHBlciBoYWxmICovDQorCXBoeV9yZWcgPSBtaWlfYnVzX3JlYWQoYnVzLCBpZCwgTUlJ X1BIWVNJRDEpOw0KKwlwaHlfaWQgPSAocGh5X3JlZyAmIDB4ZmZmZikgPDwgMTY7DQorDQorCS8q IEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFs ZiAqLw0KKwlwaHlfcmVnID0gbWlpX2J1c19yZWFkKGJ1cywgaWQsIE1JSV9QSFlTSUQyKTsNCisJ cGh5X2lkIHw9IChwaHlfcmVnICYgMHhmZmZmKTsNCisNCisJLyogbG9vcCB0aHJvdWdoIGFsbCB0 aGUga25vd24gUEhZIHR5cGVzLCBhbmQgZmluZCBvbmUgdGhhdA0KKwkgKiBtYXRjaGVzIHRoZSBJ RCB3ZSByZWFkIGZyb20gdGhlIFBIWS4gKi8NCisJbGlzdF9mb3JfZWFjaChscCwgJnBoeV9saXN0 KSB7DQorCQlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IGxpc3RfZW50cnkobHAsIHN0cnVjdCBwaHlf aW5mbywgbGlzdCk7DQorCQlpZiAoKHBoeS0+aWQgPj4gcGh5LT5zaGlmdCkgPT0gKHBoeV9pZCA+ PiBwaHktPnNoaWZ0KSkgew0KKwkJCWluZm8gPSBwaHk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0N CisNCisJaWYgKGluZm8gPT0gTlVMTCkgew0KKwkJcHJpbnRrKEtFUk5fV0FSTklORw0KKwkJICAg ICAgICJwaHklZC4lZDogUEhZIGlkIDB4JXggaXMgbm90IHN1cHBvcnRlZCFcbiIsIGJ1cywgaWQs DQorCQkgICAgICAgcGh5X2lkKTsNCisJfSBlbHNlIHsNCisJCXByaW50ayhLRVJOX0lORk8gInBo eSVkLiVkOiBQSFkgaXMgJXMgKCV4KVxuIiwgYnVzLCBpZCwNCisJCSAgICAgICBpbmZvLT5uYW1l LCBwaHlfaWQpOw0KKwl9DQorDQorCXJldHVybiBpbmZvOw0KK30NCisNCitzdGF0aWMgaW50IG1k aW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKQ0KK3sN CisJcmV0dXJuIG1paV9idXNfcmVhZChNSUlfQlVTKHBoeV9pZCksIE1JSV9JRChwaHlfaWQpLCBy ZWcpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsIGludCBwaHlfaWQsIGludCByZWcsIGludCB2YWwpDQorew0KKwltaWlfYnVzX3dyaXRlKE1J SV9CVVMocGh5X2lkKSwgTUlJX0lEKHBoeV9pZCksIHJlZywgdmFsICYgMHhmZmZmKTsNCit9DQor DQorc3RhdGljIGlubGluZSB2b2lkIG1paV9waHlfaXJxX2FjayhzdHJ1Y3QgbWlpX2lmX2luZm8g Km1paSkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0K KwlwaHktPm9wcy0+aW50X2FjayhwaHkpOw0KK30NCisNCitzdGF0aWMgaXJxcmV0dXJuX3QgbWlp X3BoeV9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpDQorew0K KwlzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSA9ICh2b2lkICopZGF0YTsNCisJc3RydWN0IHBoeV9p bmZvICpwaHkgPSBtaWlfcGh5X29mKG1paSk7DQorDQorCW1paV9waHlfaXJxX2FjayhtaWkpOw0K Kw0KKwkvKiBTY2hlZHVsZSB0aGUgYm90dG9tIGhhbGYgKi8NCisJc2NoZWR1bGVfd29yaygmcGh5 LT5kZWx0YS50cSk7DQorDQorCXJldHVybiBJUlFfSEFORExFRDsNCit9DQorDQorRVhQT1JUX1NZ TUJPTChtaWlfcGh5X2lycV9lbmFibGUpOw0KK2ludCBtaWlfcGh5X2lycV9lbmFibGUoc3RydWN0 IG1paV9pZl9pbmZvICptaWksIGludCBpcnEsIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwNCisJCSAg ICAgICB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5X29m KG1paSk7DQorCWludCBlcnI7DQorDQorCWlmIChwaHkgPT0gTlVMTCkNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlpZiAocGh5LT5kZWx0YS5kYXRhICE9IE5VTEwpDQorCQlyZXR1cm4gLUVCVVNZ Ow0KKw0KKwlpZiAocGh5LT5vcHMtPmludF9hY2sgPT0gTlVMTCB8fA0KKwkgICAgcGh5LT5vcHMt PmludF9lbmFibGUgPT0gTlVMTCB8fA0KKwkgICAgcGh5LT5vcHMtPmludF9kaXNhYmxlID09IE5V TEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJcGh5LT5kZWx0YS5pcnEgPSBpcnE7DQorCXBo eS0+ZGVsdGEuZnVuYyA9IGZ1bmM7DQorCXBoeS0+ZGVsdGEuZGF0YSA9IGRhdGE7DQorDQorCWVy ciA9IHJlcXVlc3RfaXJxKGlycSwgbWlpX3BoeV9pcnEsIFNBX1NISVJRLCBwaHktPm5hbWUsIG1p aSk7DQorCWlmIChlcnIgPCAwKSB7DQorCQlwaHktPmRlbHRhLmlycSA9IC0xOw0KKwkJcGh5LT5k ZWx0YS5mdW5jID0gTlVMTDsNCisJCXBoeS0+ZGVsdGEuZGF0YSA9IE5VTEw7DQorCQlyZXR1cm4g ZXJyOw0KKwl9DQorDQorCXBoeS0+b3BzLT5pbnRfZW5hYmxlKHBoeSk7DQorCXJldHVybiAwOw0K K30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfaXJxX2Rpc2FibGUpOw0KK3ZvaWQgbWlpX3Bo eV9pcnFfZGlzYWJsZShzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdm9pZCAqZGF0YSkNCit7DQor CXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0KKwlpZiAocGh5ID09 IE5VTEwgfHwgcGh5LT5kZWx0YS5kYXRhICE9IGRhdGEpDQorCQlyZXR1cm47DQorDQorCXBoeS0+ b3BzLT5pbnRfZGlzYWJsZShwaHkpOw0KKw0KKwlmcmVlX2lycShwaHktPmRlbHRhLmlycSwgbWlp KTsNCisJcGh5LT5kZWx0YS5pcnEgPSAtMTsNCisJcGh5LT5kZWx0YS5mdW5jID0gTlVMTDsNCisJ cGh5LT5kZWx0YS5kYXRhID0gTlVMTDsNCit9DQorDQorLyogU2NoZWR1bGVkIGJ5IHRoZSB0YXNr IHF1ZXVlICovDQorc3RhdGljIHZvaWQgbWlpX3BoeV9kZWx0YSh2b2lkICpkYXRhKQ0KK3sNCisJ c3RydWN0IG1paV9pZl9pbmZvICptaWkgPSAodm9pZCAqKWRhdGE7DQorCXN0cnVjdCBwaHlfaW5m byAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKwlzdHJ1Y3QgcGh5X3N0YXRlIG9sZDsNCisNCisJ b2xkPXBoeS0+c3RhdGU7DQorDQorCXBoeS0+b3BzLT5wb2xsKHBoeSk7DQorDQorCWlmIChtZW1j bXAoJm9sZCwmcGh5LT5zdGF0ZSxzaXplb2Yob2xkKSkgIT0gMCAmJiBwaHktPmRlbHRhLmZ1bmMp DQorCQlwaHktPmRlbHRhLmZ1bmMocGh5LT5kZWx0YS5kYXRhKTsNCit9DQorDQorc3RhdGljIHZv aWQgbWlpX3BoeV9wb2xsKHVuc2lnbmVkIGxvbmcgZGF0YSkNCit7DQorCXN0cnVjdCBtaWlfaWZf aW5mbyAqbWlpID0gKHZvaWQgKilkYXRhOw0KKwlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IG1paV9w aHlfb2YobWlpKTsNCisNCisJc2NoZWR1bGVfd29yaygmcGh5LT5kZWx0YS50cSk7DQorDQorCW1v ZF90aW1lcigmcGh5LT5kZWx0YS50aW1lciwgamlmZmllcyArIEhaICogcGh5LT5kZWx0YS5tc2Vj cyAvIDEwMDApOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfcG9sbF9lbmFibGUpOw0K K2ludCBtaWlfcGh5X3BvbGxfZW5hYmxlKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCB1bnNpZ25l ZCBsb25nIG1zZWNzLA0KKwkJCXZvaWQgKCpmdW5jKSAodm9pZCAqKSwgdm9pZCAqZGF0YSkNCit7 DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKw0KKwlpZiAocGh5 ID09IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKEhaICogbXNlY3MgLyAxMDAw IDw9IDAgfHwgZnVuYyA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChwaHkt PmRlbHRhLmRhdGEgIT0gTlVMTCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpbml0X3RpbWVy KCZwaHktPmRlbHRhLnRpbWVyKTsNCisJcGh5LT5kZWx0YS50aW1lci5mdW5jdGlvbiA9IG1paV9w aHlfcG9sbDsNCisJcGh5LT5kZWx0YS50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpbWlpOw0K KwlwaHktPmRlbHRhLmRhdGEgPSBkYXRhOw0KKwlwaHktPmRlbHRhLmZ1bmMgPSBmdW5jOw0KKwlw aHktPmRlbHRhLm1zZWNzID0gbXNlY3M7DQorCW1vZF90aW1lcigmcGh5LT5kZWx0YS50aW1lciwg amlmZmllcyArIEhaICogbXNlY3MgLyAxMDAwKTsNCisJc2NoZWR1bGVfd29yaygmcGh5LT5kZWx0 YS50cSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfcG9s bF9kaXNhYmxlKTsNCit2b2lkIG1paV9waHlfcG9sbF9kaXNhYmxlKHN0cnVjdCBtaWlfaWZfaW5m byAqbWlpLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5 X29mKG1paSk7DQorDQorCWlmIChwaHkgPT0gTlVMTCB8fCBwaHktPmRlbHRhLmRhdGEgPT0gTlVM TCkNCisJCXJldHVybjsNCisNCisJZGVsX3RpbWVyX3N5bmMoJnBoeS0+ZGVsdGEudGltZXIpOw0K KwlwaHktPmRlbHRhLmZ1bmMgPSBOVUxMOw0KKwlwaHktPmRlbHRhLmRhdGEgPSBOVUxMOw0KK30N CisNCitFWFBPUlRfU1lNQk9MKHBoeV9nZW5fc2V0X2F1dG9uZWcpOw0KK2ludCBwaHlfZ2VuX3Nl dF9hdXRvbmVnKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCB1aW50MzJfdCBhZHZlcnRpc2UpDQorew0K Kwl1aW50MTZfdCBhZHYsIGN0bDsNCisNCisJYWR2ID0gcGh5X3JlYWQocGh5LCBNSUlfQURWRVJU SVNFKTsNCisJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7DQor CWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikNCisJCWFkdiB8PSBBRFZF UlRJU0VfMTBIQUxGOw0KKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwp DQorCQlhZHYgfD0gQURWRVJUSVNFXzEwRlVMTDsNCisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElT RURfMTAwYmFzZVRfSGFsZikNCisJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsNCisJaWYgKGFk dmVydGlzZSAmIEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkNCisJCWFkdiB8PSBBRFZFUlRJU0Vf MTAwRlVMTDsNCisNCisJLyogQ29uZmlndXJlIHNvbWUgYmFzaWMgc3R1ZmYgKi8NCisJcGh5X3dy aXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgYWR2KTsNCisNCisJLyogU3RhcnQgYXV0byBuZWdvdGlh dGlvbiAqLw0KKwljdGwgPSBwaHlfcmVhZChwaHksIE1JSV9CTUNSKTsNCisJY3RsIHw9IChCTUNS X0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOw0KKwlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwg Y3RsKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKw0KK0VYUE9SVF9TWU1CT0wobWlpX3BoeV9h dHRhY2gpOw0KK2ludCBtaWlfcGh5X2F0dGFjaChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJ1cywNCisJCSAgIGludCBpZCkNCit7DQorCXN0cnVj dCBwaHlfaW5mbyAqcGh5LCAqaW5mbzsNCisNCisJaWYgKG1paV9idXNbYnVzXSA9PSBOVUxMKSB7 DQorCQlwcmludGsoS0VSTl9FUlINCisJCSAgICAgICAibWlpX3BoeV9hdHRhY2g6IENhbid0IGF0 dGFjaCAlcywgbm8gTUlJIGJ1cyAlZCBwcmVzZW50XG4iLA0KKwkJICAgICAgIGRldi0+bmFtZSwg YnVzKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCWlmIChtaWlfYnVzW2J1c10tPnBo eVtpZF0gIT0gTlVMTCkgew0KKwkJcHJpbnRrKEtFUk5fRVJSDQorCQkgICAgICAgIm1paV9waHlf YXR0YWNoOiBwaHklZC4lZCBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvICVzXG4iLA0KKwkJICAgICAg IGJ1cywgaWQsIGRldi0+bmFtZSk7DQorCQlyZXR1cm4gLUVCVVNZOw0KKwl9DQorDQorCWluZm8g PSBtaWlfcGh5X2dldF9pbmZvKGJ1cywgaWQpOw0KKwlpZiAoaW5mbyA9PSBOVUxMKQ0KKwkJcmV0 dXJuIC1FTk9ERVY7DQorDQorCXBoeSA9IGttYWxsb2Moc2l6ZW9mKCpwaHkpLCBHRlBfS0VSTkVM KTsNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCW1lbWNweShw aHksIGluZm8sIHNpemVvZigqcGh5KSk7DQorDQorCUlOSVRfV09SSygmcGh5LT5kZWx0YS50cSwg bWlpX3BoeV9kZWx0YSwgbWlpKTsNCisJc25wcmludGYoJnBoeS0+bmFtZVswXSxzaXplb2YocGh5 LT5uYW1lKSwicGh5JWQuJWQiLGJ1cyxpZCk7DQorCXBoeS0+cGh5X2lkID0gTUlJX1BIWV9JRChi dXMsIGlkKTsNCisJcGh5LT5kZWx0YS5mdW5jID0gTlVMTDsNCisJcGh5LT5kZWx0YS5kYXRhID0g TlVMTDsNCisJcGh5LT5kZWx0YS5pcnEgPSAtMTsNCisJcGh5LT5zdGF0ZS5saW5rID0gMDsNCisJ cGh5LT5zdGF0ZS5kdXBsZXggPSBEVVBMRVhfSEFMRjsNCisJcGh5LT5zdGF0ZS5zcGVlZCA9IFNQ RUVEXzEwOw0KKwlwaHktPm5lZ290aWF0ZS5hdXRvbmVnID0gMDsNCisJcGh5LT5uZWdvdGlhdGUu YWR2ZXJ0aXNlID0gMDsNCisNCisJbWVtc2V0KG1paSwgMCwgc2l6ZW9mKCptaWkpKTsNCisJbWlp LT5waHlfaWQgPSAoYnVzIDw8IDUpIHwgaWQ7DQorCW1paS0+cGh5X2lkX21hc2sgPSAweGZmOw0K KwltaWktPnJlZ19udW1fbWFzayA9IDB4MWY7DQorCW1paS0+ZGV2ID0gZGV2Ow0KKwltaWktPm1k aW9fcmVhZCA9IG1kaW9fcmVhZDsNCisJbWlpLT5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsNCisN CisJbWlpX2J1c1tidXNdLT5waHlbaWRdID0gcGh5Ow0KKw0KKwlpZiAocGh5LT5vcHMtPmluaXQg IT0gTlVMTCkNCisJCXBoeS0+b3BzLT5pbml0KHBoeSk7DQorCXJldHVybiAwOw0KK30NCisNCitF WFBPUlRfU1lNQk9MKG1paV9waHlfZGV0YWNoKTsNCit2b2lkIG1paV9waHlfZGV0YWNoKHN0cnVj dCBtaWlfaWZfaW5mbyAqbWlpKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5 X29mKG1paSk7DQorCXN0cnVjdCBtaWlfYnVzICpwYnVzOw0KKw0KKwlpZiAocGh5ID09IE5VTEwp DQorCQlyZXR1cm47DQorDQorCXBidXMgPSBtaWlfYnVzW01JSV9CVVMocGh5LT5waHlfaWQpXTsN CisNCisJaWYgKHBoeS0+ZGVsdGEuZGF0YSAhPSBOVUxMKSB7DQorCQlpZiAocGh5LT5kZWx0YS5p cnEgPCAwKQ0KKwkJCW1paV9waHlfcG9sbF9kaXNhYmxlKG1paSwgcGh5LT5kZWx0YS5kYXRhKTsN CisJCWVsc2UNCisJCQltaWlfcGh5X2lycV9kaXNhYmxlKG1paSwgcGh5LT5kZWx0YS5kYXRhKTsN CisJfQ0KKw0KKwlwYnVzLT5waHlbTUlJX0lEKHBoeS0+cGh5X2lkKV0gPSBOVUxMOw0KKwlrZnJl ZShwaHkpOw0KK30NCisNCitFWFBPUlRfU1lNQk9MKG1paV9waHlfc3RhdGUpOw0KK2ludCBtaWlf cGh5X3N0YXRlKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpLCBzdHJ1Y3QgcGh5X3N0YXRlICpzdGF0 ZSkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9vZihtaWkpOw0KKwlpbnQg ZXJyID0gMDsNCisNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQor CWlmIChwaHktPmRlbHRhLmZ1bmMgPT0gTlVMTCkNCisJCWVyciA9IHBoeS0+b3BzLT5wb2xsKHBo eSk7DQorDQorCW1lbWNweShzdGF0ZSwgJnBoeS0+c3RhdGUsIHNpemVvZigqc3RhdGUpKTsNCisN CisJcmV0dXJuIGVycjsNCit9DQorDQorRVhQT1JUX1NZTUJPTChtaWlfcGh5X3NldF9hdXRvbmVn KTsNCitpbnQgbWlpX3BoeV9zZXRfYXV0b25lZyhzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWlu dDMyX3QgYWR2ZXJ0aXNlKQ0KK3sNCisJc3RydWN0IHBoeV9pbmZvICpwaHkgPSBtaWlfcGh5X29m KG1paSk7DQorDQorCWlmIChwaHkgPT0gTlVMTCB8fCBwaHktPm9wcy0+c2V0X2F1dG9uZWcgPT0g TlVMTCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlyZXR1cm4gcGh5X3NldF9hdXRvbmVnKHBo eSwgYWR2ZXJ0aXNlKTsNCit9DQorDQorRVhQT1JUX1NZTUJPTChtaWlfcGh5X3NldF9mb3JjZWQp Ow0KK2ludCBtaWlfcGh5X3NldF9mb3JjZWQoc3RydWN0IG1paV9pZl9pbmZvICptaWksIGludCBz cGVlZCwgaW50IGR1cGxleCkNCit7DQorCXN0cnVjdCBwaHlfaW5mbyAqcGh5ID0gbWlpX3BoeV9v ZihtaWkpOw0KKwlpbnQgZXJyID0gMDsNCisNCisJaWYgKHBoeSA9PSBOVUxMKQ0KKwkJcmV0dXJu IC1FSU5WQUw7DQorDQorCWlmIChwaHktPm9wcy0+c2V0X2ZvcmNlZCkNCisJCWVyciA9IHBoeS0+ b3BzLT5zZXRfZm9yY2VkKHBoeSwgc3BlZWQsIGR1cGxleCk7DQorDQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGVycjsNCisNCisJcGh5LT5uZWdvdGlhdGUuYXV0b25lZyA9IEFVVE9ORUdfRElT QUJMRTsNCisJcGh5LT5zdGF0ZS5zcGVlZCA9IHNwZWVkOw0KKwlwaHktPnN0YXRlLmR1cGxleCA9 IGR1cGxleDsNCisJcGh5LT5zdGF0ZS5hdXRvbmVnID0gMDsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBERUNMQVJFX01VVEVYKG1paV9idXNfbG9jayk7DQorDQorRVhQT1JUX1NZTUJP TChtaWlfYnVzX3JlZ2lzdGVyKTsNCitpbnQgbWlpX2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1 cyAqYnVzKQ0KK3sNCisJaW50IGJ1c19pZDsNCisNCisJaWYgKGJ1cyA9PSBOVUxMIHx8IGJ1cy0+ bmFtZSA9PSBOVUxMIHx8IGJ1cy0+cmVhZCA9PSBOVUxMIHx8DQorCSAgICBidXMtPndyaXRlID09 IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJZG93bigmbWlpX2J1c19sb2NrKTsNCisN CisJZm9yIChidXNfaWQgPSAwOyBidXNfaWQgPCBNSUlfQlVTX01BWDsgYnVzX2lkKyspIHsNCisJ CWlmIChtaWlfYnVzW2J1c19pZF0gPT0gTlVMTCkNCisJCQlicmVhazsNCisJfQ0KKw0KKwlpZiAo YnVzX2lkID49IE1JSV9CVVNfTUFYKSB7DQorCQlidXNfaWQgPSAtRU5PTUVNOw0KKwkJZ290byBl bmQ7DQorCX0NCisNCisJbWlpX2J1c1tidXNfaWRdID0gYnVzOw0KKw0KKwlpZiAoYnVzLT5yZXNl dCkNCisJCWJ1cy0+cmVzZXQoYnVzLT5wcml2KTsNCisNCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6 IHJlZ2lzdGVyZWQgYXMgUEhZIGJ1cyAlZFxuIiwgYnVzLT5uYW1lLCBidXNfaWQpOw0KKw0KKyAg ICAgIGVuZDoNCisJdXAoJm1paV9idXNfbG9jayk7DQorDQorCXJldHVybiBidXNfaWQ7DQorfQ0K Kw0KK0VYUE9SVF9TWU1CT0wobWlpX2J1c191bnJlZ2lzdGVyKTsNCit2b2lkIG1paV9idXNfdW5y ZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQ0KK3sNCisJaW50IGk7DQorDQorCWRvd24oJm1p aV9idXNfbG9jayk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBNSUlfQlVTX01BWDsgaSsrKSB7DQor CQlpZiAobWlpX2J1c1tpXSA9PSBidXMpIHsNCisJCQltaWlfYnVzW2ldID0gTlVMTDsNCisJCQli cmVhazsNCisJCX0NCisJfQ0KKw0KKwl1cCgmbWlpX2J1c19sb2NrKTsNCit9DQorDQorLyogSW5z ZXJ0IGludG8gJ3BoeV9saXN0JyBzb3J0ZWQgYnkNCisgKiBzaGlmdCAoc21hbGxlc3QgdG8gbGFy Z2VzdCkNCisgKi8NCitFWFBPUlRfU1lNQk9MKHBoeV9yZWdpc3Rlcik7DQoraW50IHBoeV9yZWdp c3RlcihzdHJ1Y3QgcGh5X2luZm8gKmluZm8pDQorew0KKwlzdHJ1Y3QgbGlzdF9oZWFkICpscDsN CisNCisJaWYgKGluZm89PU5VTEwgfHwgaW5mby0+b3BzID09IE5VTEwgfHwgaW5mby0+b3BzLT5w b2xsID09IE5VTEwpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJbGlzdF9mb3JfZWFjaChscCwg JnBoeV9saXN0KSB7DQorCQlzdHJ1Y3QgcGh5X2luZm8gKnBoeSA9IGxpc3RfZW50cnkobHAsIHN0 cnVjdCBwaHlfaW5mbywgbGlzdCk7DQorCQlpZiAocGh5LT5zaGlmdCA+IGluZm8tPnNoaWZ0KQ0K KwkJCWJyZWFrOw0KKw0KKwkJLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8NCisJCWlmICgocGh5 LT5zaGlmdD09aW5mby0+c2hpZnQpICYmIChpbmZvLT5pZCA9PSBwaHktPmlkKSkNCisJCQlyZXR1 cm4gLUVCVVNZOw0KKwl9DQorDQorCS8qIFRoaXMgZG9lcyB0aGUgJ3JpZ2h0IHRoaW5nJyBldmVu IGlmIGxwID09ICZwaHlfbGlzdA0KKwkgKi8NCisJbGlzdF9hZGRfdGFpbCgmaW5mby0+bGlzdCwg bHApOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorRVhQT1JUX1NZTUJPTChwaHlfdW5yZWdpc3Rl cik7DQordm9pZCBwaHlfdW5yZWdpc3RlcihzdHJ1Y3QgcGh5X2luZm8gKmluZm8pDQorew0KKwls aXN0X2RlbF9pbml0KCZpbmZvLT5saXN0KTsNCit9DQorDQorc3RhdGljIGludCBtaWlfYnVzX2lu aXQodm9pZCkNCit7DQorCXJldHVybiBwaHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2dlbmVyaWMpOw0K K30NCisNCitzdGF0aWMgdm9pZCBtaWlfYnVzX2V4aXQodm9pZCkNCit7DQorCXBoeV91bnJlZ2lz dGVyKCZwaHlfaW5mb19nZW5lcmljKTsNCit9DQorDQorbW9kdWxlX2luaXQobWlpX2J1c19pbml0 KTsNCittb2R1bGVfZXhpdChtaWlfYnVzX2V4aXQpOw0KDQotLS0gL2Rldi9udWxsDQorKysgbGlu dXgvZHJpdmVycy9uZXQvcGh5X2NpY2FkYS5jDQpAQCAtMCwwICsxLDE3NyBAQA0KKy8qIA0KKyAq IGRyaXZlcnMvbmV0L3BoeV9jaWNhZGEuYw0KKyAqDQorICogQXV0aG9yOiBKYXNvbiBNY011bGxh bg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVzeXMgQ29ycC4NCisgKg0KKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5k L29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKyAqIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cg0K KyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKi8NCisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgv bWlpX2J1cy5oPg0KKw0KKy8qIENpY2FkYSBBdXhpbGlhcnkgQ29udHJvbC9TdGF0dXMgUmVnaXN0 ZXIgKi8NCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9BVVhfQ09OU1RBVCAgICAgICAgMHgxYw0KKyNk ZWZpbmUgTUlJTV9DSVM4MjAxX0FVWENPTlNUQVRfSU5JVCAgICAweDAwMDQNCisjZGVmaW5lIE1J SU1fQ0lTODIwMV9BVVhDT05TVEFUX0RVUExFWCAgMHgwMDIwDQorI2RlZmluZSBNSUlNX0NJUzgy MDFfQVVYQ09OU1RBVF9TUEVFRCAgIDB4MDAxOA0KKyNkZWZpbmUgTUlJTV9DSVM4MjAxX0FVWENP TlNUQVRfR0JJVCAgICAweDAwMTANCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9BVVhDT05TVEFUXzEw MCAgICAgMHgwMDA4DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKiBDaWNhZGEgRXh0ZW5k ZWQgQ29udHJvbCBSZWdpc3RlciAxICovDQorI2RlZmluZSBNSUlNX0NJUzgyMDFfRVhUX0NPTjEg ICAgICAgICAgIDB4MTcNCisjZGVmaW5lIE1JSU1fQ0lTODIwMV9FWFRDT04xX0lOSVQgICAgICAg MHgwMDAwDQorDQorLyogQ0lTODIwMSAqLw0KKyNkZWZpbmUgTUlJX0NJUzgyMDFfRVBDUiAgICAg ICAgMHgxNw0KKyNkZWZpbmUgRVBDUl9NT0RFX01BU0sgICAgICAgICAgMHgzMDAwDQorI2RlZmlu ZSBFUENSX0dNSUlfTU9ERSAgICAgICAgICAweDAwMDANCisjZGVmaW5lIEVQQ1JfUkdNSUlfTU9E RSAgICAgICAgIDB4MTAwMA0KKyNkZWZpbmUgRVBDUl9UQklfTU9ERSAgICAgICAgICAgMHgyMDAw DQorI2RlZmluZSBFUENSX1JUQklfTU9ERSAgICAgICAgICAweDMwMDANCisNCitzdGF0aWMgaW50 IGNpczgyMDFfaW5pdChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXVpbnQxNl90IGVwY3I7 DQorCWNvbnN0IGNoYXIgKm1vZGUgPSAiVW5rbm93biI7DQorDQorCWVwY3IgPSBwaHlfcmVhZChw aHksIE1JSV9DSVM4MjAxX0VQQ1IpOw0KKw0KKwlzd2l0Y2ggKGVwY3IgJiBFUENSX01PREVfTUFT Sykgew0KKwkJY2FzZSBFUENSX0dNSUlfTU9ERTogbW9kZSA9ICJHTUlJIjsgYnJlYWs7DQorCQlj YXNlIEVQQ1JfUkdNSUlfTU9ERTogbW9kZSA9ICJSR01JSSI7IGJyZWFrOw0KKwkJY2FzZSBFUENS X1RCSV9NT0RFOiBtb2RlID0gIlRCSSI7IGJyZWFrOw0KKwkJY2FzZSBFUENSX1JUQklfTU9ERTog bW9kZSA9ICJSVEJJIjsgYnJlYWs7DQorCX0NCisNCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVz IG1vZGVcbiIscGh5LT5uYW1lLCBtb2RlKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKyNkZWZp bmUgTUlJX0NJUzgyMDFfSU5UUl9DVFJMCTB4MTkNCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJf U1RBVAkweDFhDQorDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0VOQUJMRQkweDgwMDANCisj ZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJfU1BFRUQJMHg0MDAwDQorI2RlZmluZSBNSUlfQ0lTODIw MV9JTlRSX0xJTksJMHgyMDAwDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0RVUExFWAkweDEw MDANCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lOVFJfQU5fRVJSCTB4MDgwMA0KKyNkZWZpbmUgTUlJ X0NJUzgyMDFfSU5UUl9BTl9ET04JMHgwNDAwDQorI2RlZmluZSBNSUlfQ0lTODIwMV9JTlRSX0FM TAkweDdjMDANCisNCitzdGF0aWMgaW50IGNpczgyMDFfaW50X2VuYWJsZShzdHJ1Y3QgcGh5X2lu Zm8gKnBoeSkNCit7DQorCXBoeV93cml0ZShwaHksIE1JSV9DSVM4MjAxX0lOVFJfQ1RSTCwgTUlJ X0NJUzgyMDFfSU5UUl9FTkFCTEUgfCBNSUlfQ0lTODIwMV9JTlRSX0FMTCk7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IGNpczgyMDFfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfQ0lTODIwMV9JTlRSX0NUUkwsIDAp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBjaXM4MjAxX2ludF9hY2soc3Ry dWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwlwaHlfcmVhZChwaHksIE1JSV9DSVM4MjAxX0lOVFJf U1RBVCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCisjZGVmaW5lCU1JSV9DSVM4MjAxX0FDU1IJ MHgxYw0KKyNkZWZpbmUgIEFDU1JfRU5BQkxFXzEwMDBCQVNFVAkweDAwMDQNCisjZGVmaW5lICBB Q1NSX0RVUExFWF9TVEFUVVMJMHgwMDIwDQorI2RlZmluZSAgQUNTUl9TUEVFRF8xMDAwQkFTRVQJ MHgwMDEwDQorI2RlZmluZSAgQUNTUl9TUEVFRF8xMDBCQVNFVAkweDAwMDgNCisNCitzdGF0aWMg aW50IGNpczgyMDFfcG9sbChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQorCXVpbnQxNl90IGFj c3I7DQorCXN0cnVjdCBwaHlfc3RhdGUgKnBzdGF0ZSA9ICZwaHktPnN0YXRlOw0KKwlpbnQgYXV0 b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsNCisJaW50IGVycjsNCisNCisJZXJyID0gcGh5X2dl bl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBz dGF0ZS0+bGluayA9PSAwKQ0KKwkJcmV0dXJuIDA7DQorDQorCS8qIFdlIHVzZSB0aGUgb2xkIGNv cHkgb2YgJ3BoeS0+c3RhdGUuYXV0b25lZycNCisJICogYXMgcGh5X2dlbl9wb2xsIHdpbGwgaGF2 ZSBzZXQgaXQgdG8gMA0KKwkgKi8NCisJaWYgKGF1dG9uZWcpIHsNCisJCWFjc3IgPSBwaHlfcmVh ZChwaHksIE1JSV9DSVM4MjAxX0FDU1IpOw0KKw0KKwkJaWYgKGFjc3IgJiBBQ1NSX0RVUExFWF9T VEFUVVMpDQorCQkJcHN0YXRlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsNCisJCWVsc2UNCisJCQlw c3RhdGUtPmR1cGxleCA9IERVUExFWF9IQUxGOw0KKwkJaWYgKGFjc3IgJiBBQ1NSX1NQRUVEXzEw MDBCQVNFVCkgew0KKwkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDAwOw0KKwkJfSBlbHNlIGlm IChhY3NyICYgQUNTUl9TUEVFRF8xMDBCQVNFVCkNCisJCQlwc3RhdGUtPnNwZWVkID0gU1BFRURf MTAwOw0KKwkJZWxzZQ0KKwkJCXBzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDsNCisJfQ0KKw0KKwkv KiBPbiBub24tYW5lZywgd2UgYXNzdW1lIHdoYXQgd2UgcHV0IGluIEJNQ1IgaXMgdGhlIHNwZWVk LA0KKwkgKiB0aG91Z2ggbWFnaWMtYW5lZyBzaG91bGRuJ3QgcHJldmVudCB0aGlzIGNhc2UgZnJv bSBvY2N1cnJpbmcNCisJICovDQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGNp czgyMDFfc2V0X2F1dG9uZWcoc3RydWN0IHBoeV9pbmZvICpwaHksIHVpbnQzMl90IGFkdmVydGlz ZSkNCit7DQorCXVpbnQxNl90IHZhbDsNCisNCisJLyogRG8gdGhlIDEwMDBCVCBzZXR1cCBoZXJl LiAqLw0KKwl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9DSVM4MjAxX0FDU1IpOw0KKwlpZiAoYWR2 ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkNCisJCXBoeV93cml0ZShwaHksIE1J SV9DSVM4MjAxX0FDU1IsIHZhbCB8IEFDU1JfRU5BQkxFXzEwMDBCQVNFVCk7DQorCWVsc2UNCisJ CXBoeV93cml0ZShwaHksIE1JSV9DSVM4MjAxX0FDU1IsIHZhbCAmIH5BQ1NSX0VOQUJMRV8xMDAw QkFTRVQpOw0KKw0KKwlyZXR1cm4gcGh5X2dlbl9zZXRfYXV0b25lZyhwaHksIGFkdmVydGlzZSk7 DQorfQ0KKw0KKw0KK3N0cnVjdCBwaHlfb3BzIHBoeV9vcHNfY2lzODIwMSA9IHsNCisJLmluaXQg CQk9IGNpczgyMDFfaW5pdCwNCisJLnNldF9hdXRvbmVnIAk9IGNpczgyMDFfc2V0X2F1dG9uZWcs DQorCS5wb2xsCQk9IGNpczgyMDFfcG9sbCwNCisJLmludF9lbmFibGUJPSBjaXM4MjAxX2ludF9l bmFibGUsDQorCS5pbnRfZGlzYWJsZQk9IGNpczgyMDFfaW50X2Rpc2FibGUsDQorCS5pbnRfYWNr CT0gY2lzODIwMV9pbnRfYWNrDQorfTsNCisNCisvKiBDaWNhZGEgODIwMSAqLw0KK3N0YXRpYyBz dHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fY2lzODIwMSA9IHsNCisJLmlkID0gMHgwMDBmYzQ0MCwN CisJLm5hbWUgPSAiQ0lTODIwMSIsDQorCS5zaGlmdCA9IDQsDQorCS5vcHMgPSAmcGh5X29wc19j aXM4MjAxDQorfTsNCisNCitzdGF0aWMgaW50IHBoeV9jaWNhZGFfaW5pdCh2b2lkKQ0KK3sNCisJ cmV0dXJuIHBoeV9yZWdpc3RlcigmcGh5X2luZm9fY2lzODIwMSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIHBoeV9jaWNhZGFfZXhpdCh2b2lkKQ0KK3sNCisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZv X2NpczgyMDEpOw0KK30NCisNCittb2R1bGVfaW5pdChwaHlfY2ljYWRhX2luaXQpOw0KK21vZHVs ZV9leGl0KHBoeV9jaWNhZGFfZXhpdCk7DQoNCi0tLSAvZGV2L251bGwNCisrKyBsaW51eC9kcml2 ZXJzL25ldC9waHlfZGF2aWNvbS5jDQpAQCAtMCwwICsxLDE0MCBAQA0KKy8qIA0KKyAqIGRyaXZl cnMvbmV0L3BoeV9kYXZpY29tLmMNCisgKg0KKyAqIEF1dGhvcjogSmFzb24gTWNNdWxsYW4NCisg Kg0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaW1lc3lzIENvcnAuDQorICoNCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBt b2RpZnkgaXQNCisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXINCisgKiBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICovDQorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21paV9idXMuaD4NCisNCisvKiBETTkxNjEgQ29udHJvbCBy ZWdpc3RlciB2YWx1ZXMgKi8NCisjZGVmaW5lIE1JSU1fRE05MTYxX0NSX1NUT1AJMHgwNDAwDQor I2RlZmluZSBNSUlNX0RNOTE2MV9DUl9SU1RBTgkweDEyMDANCisNCisjZGVmaW5lIE1JSU1fRE05 MTYxX1NDUgkJMHgxMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NSX0lOSVQJMHgwNjEwDQorDQor LyogRE05MTYxIFNwZWNpZmllZCBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8N CisjZGVmaW5lIE1JSU1fRE05MTYxX1NDU1IJMHgxMQ0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NT Ul8xMDBGCTB4ODAwMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfU0NTUl8xMDBICTB4NDAwMA0KKyNk ZWZpbmUgTUlJTV9ETTkxNjFfU0NTUl8xMEYJMHgyMDAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9T Q1NSXzEwSAkweDEwMDANCisNCisvKiBETTkxNjEgSW50ZXJydXB0IFJlZ2lzdGVyICovDQorI2Rl ZmluZSBNSUlNX0RNOTE2MV9JTlRSCTB4MTUNCisjZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfUEVO RAkJMHg4MDAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9JTlRSX0RQTFhfTUFTSwkweDA4MDANCisj ZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfU1BEX01BU0sJMHgwNDAwDQorI2RlZmluZSBNSUlNX0RN OTE2MV9JTlRSX0xJTktfTUFTSwkweDAyMDANCisjZGVmaW5lIE1JSU1fRE05MTYxX0lOVFJfTUFT SwkJMHgwMTAwDQorI2RlZmluZSBNSUlNX0RNOTE2MV9JTlRSX0RQTFhfQ0hBTkdFCTB4MDAxMA0K KyNkZWZpbmUgTUlJTV9ETTkxNjFfSU5UUl9TUERfQ0hBTkdFCTB4MDAwOA0KKyNkZWZpbmUgTUlJ TV9ETTkxNjFfSU5UUl9MSU5LX0NIQU5HRQkweDAwMDQNCisjZGVmaW5lIE1JSU1fRE05MTYxX0lO VFJfSU5JVCAJCTB4MDAwMA0KKyNkZWZpbmUgTUlJTV9ETTkxNjFfSU5UUl9TVE9QCVwNCisoTUlJ TV9ETTkxNjFfSU5UUl9EUExYX01BU0sgfCBNSUlNX0RNOTE2MV9JTlRSX1NQRF9NQVNLIFwNCisg fCBNSUlNX0RNOTE2MV9JTlRSX0xJTktfTUFTSyB8IE1JSU1fRE05MTYxX0lOVFJfTUFTSykNCisN CisvKiBETTkxNjEgMTBCVCBDb25maWd1cmF0aW9uL1N0YXR1cyAqLw0KKyNkZWZpbmUgTUlJTV9E TTkxNjFfMTBCVENTUgkweDEyDQorI2RlZmluZSBNSUlNX0RNOTE2MV8xMEJUQ1NSX0lOSVQJMHg3 ODAwDQorDQorc3RhdGljIGludCBkbTkxNjFfaW5pdChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7 DQorCW1kZWxheSgyMDAwKTsNCisNCisJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIE1JSU1fRE05 MTYxX0NSX1NUT1ApOw0KKwlwaHlfd3JpdGUocGh5LCBNSUlNX0RNOTE2MV9TQ1IsIE1JSU1fRE05 MTYxX1NDUl9JTklUKTsNCisJcGh5X3dyaXRlKHBoeSwgTUlJTV9ETTkxNjFfMTBCVENTUiwgTUlJ TV9ETTkxNjFfMTBCVENTUl9JTklUKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgZG05MTYxX2ludF9lbmFibGUoc3RydWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwkvKiBDbGVh ciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovDQorCXBoeV9yZWFkKHBoeSwgTUlJTV9ETTkxNjFf SU5UUik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGRtOTE2MV9pbnRfYWNr KHN0cnVjdCBwaHlfaW5mbyAqcGh5KQ0KK3sNCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJy dXB0cyAqLw0KKwlwaHlfcmVhZChwaHksIE1JSU1fRE05MTYxX0lOVFIpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGludCBkbTkxNjFfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9pbmZv ICpwaHkpDQorew0KKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovDQorCXBoeV9y ZWFkKHBoeSwgTUlJTV9ETTkxNjFfSU5UUik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IGRtOTE2MV9wb2xsKHN0cnVjdCBwaHlfaW5mbyAqcGh5KQ0KK3sNCisJaW50IGF1dG9u ZWcgPSBwaHktPnN0YXRlLmF1dG9uZWc7DQorCWludCBlcnI7DQorCXVpbnQxNl90IHZhbDsNCisN CisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVy cjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7DQorCQl2YWwgPSBwaHlf cmVhZChwaHksIE1JSU1fRE05MTYxX1NDU1IpOw0KKw0KKwkJaWYgKHZhbCAmIChNSUlNX0RNOTE2 MV9TQ1NSXzEwMEYgfCBNSUlNX0RNOTE2MV9TQ1NSXzEwMEgpKQ0KKwkJCXBoeS0+c3RhdGUuc3Bl ZWQgPSAxMDA7DQorCQllbHNlDQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKw0KKwkJaWYg KHZhbCAmIChNSUlNX0RNOTE2MV9TQ1NSXzEwMEYgfCBNSUlNX0RNOTE2MV9TQ1NSXzEwRikpDQor CQkJcGh5LT5zdGF0ZS5kdXBsZXggPSAxOw0KKwkJZWxzZQ0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4 ID0gMDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBwaHlfb3Bz IHBoeV9vcHNfZG05MTYxID0gew0KKwkuaW5pdCA9IGRtOTE2MV9pbml0LA0KKwkucG9sbCA9IGRt OTE2MV9wb2xsLA0KKwkuaW50X2VuYWJsZSA9IGRtOTE2MV9pbnRfZW5hYmxlLA0KKwkuaW50X2Fj ayA9IGRtOTE2MV9pbnRfYWNrLA0KKwkuaW50X2Rpc2FibGUgPSBkbTkxNjFfaW50X2Rpc2FibGUs DQorfTsNCisNCitzdGF0aWMgc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX2RtOTE2MSA9IHsNCisJ LmlkID0gMHgwMTgxYjg4MCwNCisJLm5hbWUgPSAiRGF2aWNvbSBETTkxNjFFIiwNCisJLnNoaWZ0 ID0gNCwNCisJLm9wcyA9ICZwaHlfb3BzX2RtOTE2MSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgcGh5 X2Rhdmljb21faW5pdCh2b2lkKQ0KK3sNCisJcmV0dXJuIHBoeV9yZWdpc3RlcigmcGh5X2luZm9f ZG05MTYxKTsNCit9DQorDQorc3RhdGljIHZvaWQgcGh5X2Rhdmljb21fZXhpdCh2b2lkKQ0KK3sN CisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2RtOTE2MSk7DQorfQ0KKw0KK21vZHVsZV9pbml0 KHBoeV9kYXZpY29tX2luaXQpOw0KK21vZHVsZV9leGl0KHBoeV9kYXZpY29tX2V4aXQpOw0KDQot LS0gL2Rldi9udWxsDQorKysgbGludXgvZHJpdmVycy9uZXQvcGh5X2x4dDk3eC5jDQpAQCAtMCww ICsxLDIxMCBAQA0KKy8qIA0KKyAqIGRyaXZlcnMvbmV0L3BoeV9seHQ5N3guYw0KKyAqDQorICog QXV0aG9yOiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRpbWVz eXMgQ29ycC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVybXMg b2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0K KyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBM aWNlbnNlLCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoN CisgKi8NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4NCisjaW5jbHVkZSA8bGludXgvbWlpX2J1cy5oPg0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g Ki8NCisvKiBUaGUgTGV2ZWwgb25lIExYVDk3MCBpcyB1c2VkIGJ5IG1hbnkgYm9hcmRzCQkJCSAg ICAgKi8NCisNCisjZGVmaW5lIE1JSV9MWFQ5NzBfTUlSUk9SICAgIDE2ICAvKiBNaXJyb3IgcmVn aXN0ZXIgICAgICAgICAgICovDQorI2RlZmluZSBNSUlfTFhUOTcwX0lFUiAgICAgICAxNyAgLyog SW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJX0xYVDk3MF9JU1IgICAg ICAgMTggIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIE1JSV9MWFQ5 NzBfQ09ORklHICAgIDE5ICAvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICAgICovDQorI2RlZmlu ZSBNSUlfTFhUOTcwX0NTUiAgICAgICAyMCAgLyogQ2hpcCBTdGF0dXMgUmVnaXN0ZXIgICAgICAq Lw0KKw0KK3N0YXRpYyBpbnQgbHh0OTcwX2ludF9lbmFibGUoc3RydWN0IHBoeV9pbmZvICpwaHkp DQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfTFhUOTcwX0lFUiwgMHgwMDAyKTsNCisNCisJcmV0 dXJuIDA7DQorfTsNCisNCitzdGF0aWMgaW50IGx4dDk3MF9pbnRfYWNrKHN0cnVjdCBwaHlfaW5m byAqcGh5KQ0KK3sNCisJcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcwX0lTUik7DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IGx4dDk3MF9pbnRfZGlzYWJsZShzdHJ1Y3QgcGh5X2lu Zm8gKnBoeSkNCit7DQorCXBoeV93cml0ZShwaHksIE1JSV9MWFQ5NzBfSUVSLCAweDAwMDApOw0K Kw0KKwlyZXR1cm4gMDsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbHh0OTcwX3BvbGwoc3RydWN0IHBo eV9pbmZvICpwaHkpDQorew0KKwlpbnQgYXV0b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsNCisJ aW50IGVycjsNCisNCisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAwKQ0K KwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7DQor CQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBzdGF0ZSAqLw0KKwkJdWludDE2X3QgdmFsOw0KKw0K KwkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcwX0NTUik7DQorCQlpZiAodmFsICYgMHgx MDAwKQ0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4ID0gMTsNCisJCWVsc2UNCisJCQlwaHktPnN0YXRl LmR1cGxleCA9IDA7DQorDQorCQlpZiAodmFsICYgMHgwODAwKSB7DQorCQkJcGh5LT5zdGF0ZS5z cGVlZCA9IDEwMDsNCisJCX0gZWxzZSB7DQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKwkJ fQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisNCitzdGF0aWMgc3RydWN0IHBoeV9vcHMg cGh5X29wc19seHQ5NzAgPSB7DQorCS5wb2xsIAkJPSBseHQ5NzBfcG9sbCwNCisJLmludF9lbmFi bGUJPSBseHQ5NzBfaW50X2VuYWJsZSwNCisJLmludF9hY2sJPSBseHQ5NzBfaW50X2FjaywNCisJ LmludF9kaXNhYmxlCT0gbHh0OTcwX2ludF9kaXNhYmxlDQorfTsNCisNCitzdGF0aWMgc3RydWN0 IHBoeV9pbmZvIHBoeV9pbmZvX2x4dDk3MCA9IHsNCisJLmlkID0gMHgwNzgxMDAwMCwNCisJLnNo aWZ0ID0gNCwNCisJLm5hbWUgPSAiTFhUOTcwIiwNCisJLm9wcyA9ICZwaHlfb3BzX2x4dDk3MCwN Cit9Ow0KKw0KKy8qIFNhbWUgYXMgdGhlIExYVDk3MCwgYnV0IGRpZmZlcmVudCBJRA0KKyAqLw0K K3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fbHh0OTcwYSA9IHsNCisJLmlkID0gMHgw MDgxMDAwMCwNCisJLnNoaWZ0ID0gNCwNCisJLm5hbWUgPSAiTFhUOTcwQSIsDQorCS5vcHMgPSAm cGh5X29wc19seHQ5NzAsDQorfTsNCisNCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgdGhl IDk3MSAqLw0KKw0KKyNkZWZpbmUgTUlJX0xYVDk3MV9QQ1IgICAgICAgMTYgIC8qIFBvcnQgQ29u dHJvbCBSZWdpc3RlciAgICAgKi8NCisjZGVmaW5lIE1JSV9MWFQ5NzFfU1IyICAgICAgIDE3ICAv KiBTdGF0dXMgUmVnaXN0ZXIgMiAgICAgICAgICovDQorI2RlZmluZSBNSUlfTFhUOTcxX0lFUiAg ICAgICAxOCAgLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJX0xY VDk3MV9JU1IgICAgICAgMTkgIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8NCisjZGVm aW5lIE1JSV9MWFQ5NzFfTENSICAgICAgIDIwICAvKiBMRUQgQ29udHJvbCBSZWdpc3RlciAgICAg ICovDQorI2RlZmluZSBNSUlfTFhUOTcxX1RDUiAgICAgICAzMCAgLyogVHJhbnNtaXQgQ29udHJv bCBSZWdpc3RlciAqLw0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9lbmFibGUoc3RydWN0IHBo eV9pbmZvICpwaHkpDQorew0KKwlwaHlfd3JpdGUocGh5LCBNSUlfTFhUOTcxX0lFUiwgMHgwMGYy KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX3BvbGwoc3RydWN0 IHBoeV9pbmZvICpwaHkpDQorew0KKwlpbnQgYXV0b25lZyA9IHBoeS0+c3RhdGUuYXV0b25lZzsN CisJaW50IGVycjsNCisNCisJZXJyID0gcGh5X2dlbl9wb2xsKHBoeSk7DQorCWlmIChlcnIgPCAw KQ0KKwkJcmV0dXJuIGVycjsNCisNCisJaWYgKHBoeS0+c3RhdGUubGluayAmJiBhdXRvbmVnKSB7 DQorCQkvKiBmaW5kIG91dCB0aGUgY3VycmVudCBzdGF0ZSAqLw0KKwkJdWludDE2X3QgdmFsOw0K Kw0KKwkJdmFsID0gcGh5X3JlYWQocGh5LCBNSUlfTFhUOTcxX1NSMik7DQorDQorCQlpZiAodmFs ICYgMHg0MDAwKSB7DQorCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwMDsNCisJCX0gZWxzZSB7DQor CQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwOw0KKwkJfQ0KKw0KKwkJaWYgKHZhbCAmIDB4MDIwMCkg ew0KKwkJCXBoeS0+c3RhdGUuZHVwbGV4ID0gMTsNCisJCX0gZWxzZSB7DQorCQkJcGh5LT5zdGF0 ZS5kdXBsZXggPSAwOw0KKwkJfQ0KKw0KKwkJaWYgKHZhbCAmIDB4MDAwOCkNCisJCQlwcmludGso S0VSTl9ERUJVRyAiJXM6IEZhdWx0IGRldGVjdGVkXG4iLHBoeS0+bmFtZSk7DQorCX0NCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9hY2soc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwlwaHlfcmVhZChwaHksIE1JSV9MWFQ5NzFfSVNSKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbHh0OTcxX2ludF9kaXNhYmxlKHN0cnVjdCBwaHlf aW5mbyAqcGh5KQ0KK3sNCisJcGh5X3dyaXRlKHBoeSwgTUlJX0xYVDk3MV9JRVIsIDB4MDAwMCk7 DQorDQorCXJldHVybiAwOw0KK307DQorDQorc3RhdGljIHN0cnVjdCBwaHlfb3BzIHBoeV9vcHNf bHh0OTcxID0gew0KKwkucG9sbCAJCT0gbHh0OTcxX3BvbGwsDQorCS5pbnRfZW5hYmxlCT0gbHh0 OTcxX2ludF9lbmFibGUsDQorCS5pbnRfYWNrCT0gbHh0OTcxX2ludF9hY2ssDQorCS5pbnRfZGlz YWJsZQk9IGx4dDk3MV9pbnRfZGlzYWJsZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X2lu Zm8gcGh5X2luZm9fbHh0OTcxID0gew0KKwkuaWQgPSAweDAwMTM3OGUwLA0KKwkuc2hpZnQgPSA0 LA0KKwkubmFtZSA9ICJMWFQ5NzEiLA0KKwkub3BzID0gJnBoeV9vcHNfbHh0OTcxLA0KK307DQor DQorc3RhdGljIGludCBwaHlfbHh0OTd4X2luaXQodm9pZCkNCit7DQorCWludCBlcnI7DQorDQor CWVycj1waHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorCWlmIChlcnIpDQorCQlyZXR1 cm4gZXJyOw0KKw0KKwllcnI9cGh5X3JlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzBhKTsNCisJaWYg KGVycikgew0KKwkJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorCQlyZXR1cm4g ZXJyOw0KKwl9DQorDQorCWVycj1waHlfcmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MSk7DQorCWlm IChlcnIpIHsNCisJCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzApOw0KKwkJcGh5X3Vu cmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MGEpOw0KKwl9DQorDQorCXJldHVybiBlcnI7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIHBoeV9seHQ5N3hfZXhpdCh2b2lkKQ0KK3sNCisJcGh5X3VucmVnaXN0 ZXIoJnBoeV9pbmZvX2x4dDk3MSk7DQorCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19seHQ5NzBh KTsNCisJcGh5X3VucmVnaXN0ZXIoJnBoeV9pbmZvX2x4dDk3MCk7DQorfQ0KKw0KK21vZHVsZV9p bml0KHBoeV9seHQ5N3hfaW5pdCk7DQorbW9kdWxlX2V4aXQocGh5X2x4dDk3eF9leGl0KTsNCg0K LS0tIC9kZXYvbnVsbA0KKysrIGxpbnV4L2RyaXZlcnMvbmV0L3BoeV9tYXJ2ZWxsLmMNCkBAIC0w LDAgKzEsMTI1IEBADQorLyogDQorICogZHJpdmVycy9uZXQvcGh5X21hcnZlbGwuYw0KKyAqDQor ICogQXV0aG9yOiBKYXNvbiBNY011bGxhbg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRp bWVzeXMgQ29ycC4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdA0KKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQ0KKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl ICBMaWNlbnNlLCBvciAoYXQgeW91cg0KKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQor ICoNCisgKi8NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4NCisjaW5jbHVkZSA8bGludXgvbWlpX2J1cy5oPg0KKw0KKy8qIDg4RTEwMTEgUEhZIFN0 YXR1cyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgTUlJTV84OEUxMDExX1BIWV9TVEFUVVMgICAgICAg ICAweDExDQorI2RlZmluZSBNSUlNXzg4RTEwMTFfUEhZU1RBVF9TUEVFRCAgICAgIDB4YzAwMA0K KyNkZWZpbmUgTUlJTV84OEUxMDExX1BIWVNUQVRfR0JJVCAgICAgICAweDgwMDANCisjZGVmaW5l IE1JSU1fODhFMTAxMV9QSFlTVEFUXzEwMCAgICAgICAgMHg0MDAwDQorI2RlZmluZSBNSUlNXzg4 RTEwMTFfUEhZU1RBVF9EVVBMRVggICAgIDB4MjAwMA0KKyNkZWZpbmUgTUlJTV84OEUxMDExX1BI WVNUQVRfTElOSwkweDA0MDANCisNCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JRVZFTlQJCTB4MTMN CisjZGVmaW5lIE1JSU1fODhFMTAxMV9JRVZFTlRfQ0xFQVIJMHgwMDAwDQorDQorI2RlZmluZSBN SUlNXzg4RTEwMTFfSU1BU0sJCTB4MTINCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JTUFTS19JTklU CQkweDY0MDANCisjZGVmaW5lIE1JSU1fODhFMTAxMV9JTUFTS19DTEVBUgkweDAwMDANCisNCitz dGF0aWMgaW50IG1hcnZlbGxfaW50X2VuYWJsZShzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7DQor CS8qIENsZWFyIHRoZSBJRVZFTlQgcmVnaXN0ZXIgKi8NCisJcGh5X3JlYWQocGh5LCBNSUlNXzg4 RTEwMTFfSUVWRU5UKTsNCisNCisJLyogU2V0IHVwIHRoZSBtYXNrICovDQorCXBoeV93cml0ZShw aHksIE1JSU1fODhFMTAxMV9JTUFTSywgTUlJTV84OEUxMDExX0lNQVNLX0lOSVQpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtYXJ2ZWxsX2ludF9hY2soc3RydWN0IHBoeV9p bmZvICpwaHkpDQorew0KKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovDQorCXBoeV9yZWFkKHBo eSwgTUlJTV84OEUxMDExX0lFVkVOVCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IG1hcnZlbGxfaW50X2Rpc2FibGUoc3RydWN0IHBoeV9pbmZvICpwaHkpDQorew0KKwkvKiBD bGVhciB0aGUgaW50ZXJydXB0ICovDQorCXBoeV9yZWFkKHBoeSwgTUlJTV84OEUxMDExX0lFVkVO VCk7DQorCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLw0KKwlwaHlfd3JpdGUocGh5LCBNSUlNXzg4 RTEwMTFfSU1BU0ssIE1JSU1fODhFMTAxMV9JTUFTS19DTEVBUik7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IG1hcnZlbGxfcG9sbChzdHJ1Y3QgcGh5X2luZm8gKnBoeSkNCit7 DQorCWludCBhdXRvbmVnID0gcGh5LT5zdGF0ZS5hdXRvbmVnOw0KKwlpbnQgZXJyOw0KKw0KKwll cnIgPSBwaHlfZ2VuX3BvbGwocGh5KTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0K Kw0KKwlpZiAocGh5LT5zdGF0ZS5saW5rICYmIGF1dG9uZWcpIHsNCisJCXVpbnQxNl90IHZhbDsN CisJCXVuc2lnbmVkIGludCBzcGVlZDsNCisNCisJCXZhbCA9IHBoeV9yZWFkKHBoeSwgTUlJTV84 OEUxMDExX1BIWV9TVEFUVVMpOw0KKw0KKwkJaWYgKHZhbCAmIE1JSU1fODhFMTAxMV9QSFlTVEFU X0RVUExFWCkNCisJCQlwaHktPnN0YXRlLmR1cGxleCA9IDE7DQorCQllbHNlDQorCQkJcGh5LT5z dGF0ZS5kdXBsZXggPSAwOw0KKw0KKwkJc3BlZWQgPSAodmFsICYgTUlJTV84OEUxMDExX1BIWVNU QVRfU1BFRUQpOw0KKw0KKwkJc3dpdGNoIChzcGVlZCkgew0KKwkJCWNhc2UgTUlJTV84OEUxMDEx X1BIWVNUQVRfR0JJVDoNCisJCQkJcGh5LT5zdGF0ZS5zcGVlZCA9IDEwMDA7DQorCQkJCWJyZWFr Ow0KKwkJCWNhc2UgTUlJTV84OEUxMDExX1BIWVNUQVRfMTAwOg0KKwkJCQlwaHktPnN0YXRlLnNw ZWVkID0gMTAwOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJCQlwaHktPnN0YXRlLnNw ZWVkID0gMTA7DQorCQkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgc3RydWN0IHBoeV9vcHMgcGh5X29wc19tYXJ2ZWxsID0gew0KKwkucG9sbAkJPSBt YXJ2ZWxsX3BvbGwsDQorCS5pbnRfZW5hYmxlCT0gbWFydmVsbF9pbnRfZW5hYmxlLA0KKwkuaW50 X2Fjawk9IG1hcnZlbGxfaW50X2FjaywNCisJLmludF9kaXNhYmxlCT0gbWFydmVsbF9pbnRfZGlz YWJsZSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fTTg4RTEwMTFT ID0gew0KKwkuaWQgPSAweDAxNDEwYzYwLA0KKwkubmFtZSA9ICJNYXJ2ZWxsIDg4RTEwMTFTIiwN CisJLnNoaWZ0ID0gNCwNCisJLm9wcyA9ICZwaHlfb3BzX21hcnZlbGwsDQorfTsNCisNCitzdGF0 aWMgaW50IHBoeV9tYXJ2ZWxsX2luaXQodm9pZCkNCit7DQorCXJldHVybiBwaHlfcmVnaXN0ZXIo JnBoeV9pbmZvX004OEUxMDExUyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHBoeV9tYXJ2ZWxsX2V4 aXQodm9pZCkNCit7DQorCXBoeV91bnJlZ2lzdGVyKCZwaHlfaW5mb19NODhFMTAxMVMpOw0KK30N CisNCittb2R1bGVfaW5pdChwaHlfbWFydmVsbF9pbml0KTsNCittb2R1bGVfZXhpdChwaHlfbWFy dmVsbF9leGl0KTsNCg0KLS0tIC9kZXYvbnVsbA0KKysrIGxpbnV4L2luY2x1ZGUvbGludXgvbWlp X2J1cy5oDQpAQCAtMCwwICsxLDE5MSBAQA0KKy8qIA0KKyAqIGluY2x1ZGUvbGludXgvbWlpX2J1 cy5oDQorICoNCisgKiBBdXRob3I6IEphc29uIE1jTXVsbGFuDQorICoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMDQgVGltZXN5cyBDb3JwLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0DQorICogdW5k ZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlDQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNp b24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyDQorICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4NCisgKg0KKyAqLw0KKyNpZm5kZWYgX19NSUlfQlVTX0gNCisjZGVmaW5lIF9fTUlJ X0JVU19IDQorDQorI2lmZGVmIF9fS0VSTkVMX18NCisNCisjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4NCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4NCisj aW5jbHVkZSA8bGludXgvZXRodG9vbC5oPg0KKw0KKyNkZWZpbmUgTUlJX1RJTUVPVVQgCSgyKkha KQ0KKw0KKyNkZWZpbmUgbWlpbV9lbmQgKC0yKQ0KKyNkZWZpbmUgbWlpbV9yZWFkICgtMSkNCisN CisvKiBNYWNyb3MgZm9yICdwaHlfaWQncyB1c2VkIGVsc2V3aGVyZS4NCisgKiBBIFBIWSBJRCBp cyAzIGJpdHMgb2YgYnVzLCBmb2xsb3dlZCBieSA1IGJpdHMgb2YgaWQNCisgKi8NCisjZGVmaW5l IE1JSV9CVVMocGh5X2lkKQkJKCgocGh5X2lkKSA+PiA1KSAmIDB4NykNCisjZGVmaW5lIE1JSV9J RChwaHlfaWQpCQkoKHBoeV9pZCkgJiAweDFmKQ0KKyNkZWZpbmUgTUlJX1BIWV9JRChidXMsIGlk KQkoKCgoYnVzKSAmIDB4NykgPDwgNSkgfCAoKGlkKSAmIDB4MWYpKQ0KKw0KKy8qDQorICogQ3Vy cmVudCBQSFkgc3RhdGUNCisgKi8NCitzdHJ1Y3QgcGh5X3N0YXRlIHsNCisJdW5zaWduZWQgaW50 IGxpbms6MTsNCisJdW5zaWduZWQgaW50IGR1cGxleDoxOw0KKwl1bnNpZ25lZCBpbnQgYXV0b25l ZzoxOw0KKwl1bnNpZ25lZCBpbnQgbG9vcGJhY2s6MTsNCisJdW5zaWduZWQgaW50IHNwZWVkOjI4 Ow0KK307DQorDQorLyogUEhZIG9wZXJhdGlvbnMgLSBib3Jyb3dlZCBmcm9tIHN1bmdlbV9waHku aA0KKyAqDQorICogd29sX29wdGlvbnM6CVNlZSBXQUtFXyogaW4gaW5jbHVkZS9saW51eC9ldGh0 b29sLmgNCisgKiBhZHZlcnRpc2UgIDogU2VlIEFEVkVSVElTRURfKiBpbiBpbmNsdWRlL2xpbnV4 L2V0aHRvb2wuaA0KKyAqLw0KK3N0cnVjdCBwaHlfaW5mbzsNCisNCitzdHJ1Y3QgcGh5X29wcyB7 DQorCWludAkoKmluaXQpKHN0cnVjdCBwaHlfaW5mbyAqcGh5KTsNCisJaW50CSgqc3VzcGVuZCko c3RydWN0IHBoeV9pbmZvICpwaHksIHVpbnQzMl90IHdvbF9vcHRpb25zKTsNCisJaW50CSgqc2V0 X2F1dG9uZWcpKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCB1aW50MzJfdCBhZHZlcnRpc2UpOw0KKwlp bnQJKCpzZXRfZm9yY2VkKShzdHJ1Y3QgcGh5X2luZm8gKnBoeSwgaW50IHNwZWVkLCBpbnQgZHVw bGV4KTsNCisNCisJLyogUG9sbGluZyAqLw0KKwlpbnQJKCpwb2xsKShzdHJ1Y3QgcGh5X2luZm8g KnBoeSk7DQorDQorCS8qIEludGVycnVwdC1iYXNlZCAqLw0KKwlpbnQJKCppbnRfZW5hYmxlKShz dHJ1Y3QgcGh5X2luZm8gKnBoeSk7DQorCWludAkoKmludF9hY2spKHN0cnVjdCBwaHlfaW5mbyAq cGh5KTsNCisJaW50CSgqaW50X2Rpc2FibGUpKHN0cnVjdCBwaHlfaW5mbyAqcGh5KTsNCit9Ow0K Kw0KKy8qIHN0cnVjdCBwaHlfaW5mbzogYSBzdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyBhdHRyaWJ1 dGVzIGZvciBhIFBIWQ0KKyAqDQorICogaWQgd2lsbCBjb250YWluIGEgbnVtYmVyIHdoaWNoIHJl cHJlc2VudHMgdGhlIFBIWS4gIER1cmluZw0KKyAqIHN0YXJ0dXAsIHRoZSBkcml2ZXIgd2lsbCBw b2xsIHRoZSBQSFkgdG8gZmluZCBvdXQgd2hhdCBpdHMNCisgKiBVSUQtLWFzIGRlZmluZWQgYnkg cmVnaXN0ZXJzIDIgYW5kIDMtLWlzLiAgVGhlIDMyLWJpdCByZXN1bHQNCisgKiBnb3R0ZW4gZnJv bSB0aGUgUEhZIHdpbGwgYmUgc2hpZnRlZCByaWdodCBieSAic2hpZnQiIGJpdHMgdG8NCisgKiBk aXNjYXJkIGFueSBiaXRzIHdoaWNoIG1heSBjaGFuZ2UgYmFzZWQgb24gcmV2aXNpb24gbnVtYmVy cw0KKyAqIHVuaW1wb3J0YW50IHRvIGZ1bmN0aW9uYWxpdHkNCisgKg0KKyAqIFRoZSBzdHJ1Y3Qg cGh5X2NtZCBlbnRyaWVzIHJlcHJlc2VudCBwb2ludGVycyB0byBhbiBhcnJheXMgb2YNCisgKiBj b21tYW5kcyB3aGljaCB0ZWxsIHRoZSBkcml2ZXIgd2hhdCB0byBkbyB0byB0aGUgUEhZLg0KKyAq Lw0KK3N0cnVjdCBwaHlfaW5mbyB7DQorCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCisNCisJdWlu dDMyX3QgaWQ7DQorCWNoYXIgbmFtZVszMl07DQorCXVuc2lnbmVkIGludCBzaGlmdDsNCisNCisJ c3RydWN0IHBoeV9vcHMgKm9wczsNCisNCisJLyogUGVyLVBIWSBkcml2ZXIgZGF0YSBnb2VzIGhl cmUgKi8NCisJdm9pZCAqcHJpdjsNCisNCisJLyogWW91ciBwb2xsKCkgcm91dGluZSBzaG91bGQg bW9kaWZ5IHRoaXMuDQorCSAqLw0KKwlzdHJ1Y3QgcGh5X3N0YXRlIHN0YXRlOw0KKw0KKwkvKiBF dmVyeXRoaW5nIGZyb20gaGVyZSBvbiBkb3duIHdpbGwNCisJICogYmUgZmlsbGVkIGluIGR1cmlu ZyByZWdpc3RyYXRpb24NCisJICovDQorCWludCBwaHlfaWQ7DQorDQorCXN0cnVjdCB7DQorCQlp bnQgaXJxOw0KKwkJdW5zaWduZWQgbG9uZyBtc2VjczsNCisJCXZvaWQgKCpmdW5jKSAodm9pZCAq ZGF0YSk7DQorCQl2b2lkICpkYXRhOw0KKwkJc3RydWN0IHdvcmtfc3RydWN0IHRxOw0KKwkJc3Ry dWN0IHRpbWVyX2xpc3QgdGltZXI7DQorCX0gZGVsdGE7DQorDQorCXN0cnVjdCB7DQorCQlpbnQg YXV0b25lZzsJCS8qIDE9YXV0bywgMD1mb3JjZWQgKi8NCisJCXVpbnQzMl90IGFkdmVydGlzZTsJ LyogbWFzayB0byBhbGxvdyAqLw0KKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwkvKiBqaWZmaWUg c3RhbXAgKi8NCisJfSBuZWdvdGlhdGU7DQorDQorfTsNCisNCitzdHJ1Y3QgbWlpX2J1cyB7DQor CWNvbnN0IGNoYXIgKm5hbWU7DQorCXZvaWQgKnByaXY7DQorCWludCAoKnJlYWQpICh2b2lkICpw cml2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOw0KKwlpbnQgKCp3cml0ZSkgKHZvaWQgKnBy aXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgdWludDE2X3QgdmFsKTsNCisJdm9pZCAoKnJl c2V0KSAodm9pZCAqcHJpdik7DQorDQorCS8qIEF1dG8tZmlsbGVkIGluIHZhbHVlcyAqLw0KKwlz dHJ1Y3QgcGh5X2luZm8gKnBoeVszMl07DQorfTsNCisNCisvKiBNSUkgYnVzIHJlZ2lzdHJhdGlv bg0KKyAqLw0KK2V4dGVybiBpbnQgbWlpX2J1c19yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVz KTsNCitleHRlcm4gdm9pZCBtaWlfYnVzX3VucmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cyk7 DQorDQorLyogUmF3IHJlYWQvd3JpdGUgcm91dGluZXMNCisgKiBSZXR1cm5zIGEgMTYtYml0IHJl Z2lzdGVyIHZhbHVlLCBvciA8IDAgZXJyb3IgY29kZQ0KKyAqLw0KK2V4dGVybiBpbnQgbWlpX2J1 c19yZWFkKGludCBidXNfaWQsIGludCBwaHlfaWQsIGludCByZWcpOw0KK2V4dGVybiBpbnQgbWlp X2J1c193cml0ZShpbnQgYnVzX2lkLCBpbnQgcGh5X2lkLCBpbnQgcmVnLCB1aW50MTZfdCB2YWwp Ow0KKw0KKy8qIFJvdXRpbmVzIHVzZWQgYnkgbmV0d29yayBkZXZpY2VzIHRoYXQgdXNlIHRoZSBN SUkgYnVzDQorICovDQorZXh0ZXJuIGludCBtaWlfcGh5X2F0dGFjaChzdHJ1Y3QgbWlpX2lmX2lu Zm8gKm1paSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCisJCQkgIGludCBwaHlfYnVzLCBpbnQg cGh5X2lkKTsNCitleHRlcm4gdm9pZCBtaWlfcGh5X2RldGFjaChzdHJ1Y3QgbWlpX2lmX2luZm8g Km1paSk7DQorDQorLyogUmVhZCBjdXJyZW50IHBoeSBzdGF0ZQ0KKyAqLw0KK2V4dGVybiBpbnQg bWlpX3BoeV9zdGF0ZShzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgc3RydWN0IHBoeV9zdGF0ZSAq c3RhdGUpOw0KKw0KKy8qIFJlc2V0IE1JSSwgcmVuZWdvdGlhdGUgbGluaw0KKyAqLw0KK2V4dGVy biBpbnQgbWlpX3BoeV9zZXRfYXV0b25lZyhzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWludDMy X3QgYWR2ZXJ0aXNlKTsNCitleHRlcm4gaW50IG1paV9waHlfc2V0X2ZvcmNlZChzdHJ1Y3QgbWlp X2lmX2luZm8gKm1paSwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KTsNCitleHRlcm4gaW50IG1paV9w aHlfc3VzcGVuZChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSwgdWludDMyX3Qgd29sX29wdGlvbnMp Ow0KKw0KKy8qIFVzZSBhbiBJUlEgdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIFBIWSBjaGFuZ2VzDQor ICovDQorZXh0ZXJuIGludCBtaWlfcGh5X2lycV9lbmFibGUoc3RydWN0IG1paV9pZl9pbmZvICpt aWksIGludCBpcnEsDQorCQkJICAgICAgdm9pZCAoKmZ1bmMpICh2b2lkICopLCB2b2lkICpkYXRh KTsNCitleHRlcm4gdm9pZCBtaWlfcGh5X2lycV9kaXNhYmxlKHN0cnVjdCBtaWlfaWZfaW5mbyAq bWlpLCB2b2lkICpkYXRhKTsNCisNCisvKiBQb2xsIHRoZSBQSFkNCisgKi8NCitleHRlcm4gaW50 IG1paV9waHlfcG9sbF9lbmFibGUoc3RydWN0IG1paV9pZl9pbmZvICptaWksIHVuc2lnbmVkIGxv bmcgbXNlY3MsDQorCQkJICAgICAgIHZvaWQgKCpmdW5jKSAodm9pZCAqKSwgdm9pZCAqZGF0YSk7 DQorZXh0ZXJuIHZvaWQgbWlpX3BoeV9wb2xsX2Rpc2FibGUoc3RydWN0IG1paV9pZl9pbmZvICpt aWksIHZvaWQgKmRhdGEpOw0KKw0KKy8qDQorICogUEhZIGRldmljZSByZWdpc3RyYXRpb24NCisg Ki8NCitleHRlcm4gaW50IHBoeV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2luZm8gKnBoeSk7DQorZXh0 ZXJuIHZvaWQgcGh5X3VucmVnaXN0ZXIoc3RydWN0IHBoeV9pbmZvICpwaHkpOw0KKw0KK3N0YXRp YyBpbmxpbmUgaW50IHBoeV9yZWFkKHN0cnVjdCBwaHlfaW5mbyAqcGh5LCBpbnQgcmVnbnVtKQ0K K3sNCisJcmV0dXJuIG1paV9idXNfcmVhZChNSUlfQlVTKHBoeS0+cGh5X2lkKSwgTUlJX0lEKHBo eS0+cGh5X2lkKSwgcmVnbnVtKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgcGh5X3dyaXRl KHN0cnVjdCBwaHlfaW5mbyAqcGh5LCBpbnQgcmVnLCB1aW50MTZfdCB2YWwpDQorew0KKwlyZXR1 cm4gbWlpX2J1c193cml0ZShNSUlfQlVTKHBoeS0+cGh5X2lkKSwgTUlJX0lEKHBoeS0+cGh5X2lk KSwgcmVnLCB2YWwpOwkNCit9DQorDQorLyogR2VuZXJpYyAnc3RydWN0IHBoeV9vcHMnIGRldmlj ZSByb3V0aW5lcyAqLw0KK2V4dGVybiBpbnQgcGh5X2dlbl9zZXRfYXV0b25lZyhzdHJ1Y3QgcGh5 X2luZm8gKnBoeSwgdTMyIGFkdmVydGlzZSk7DQorZXh0ZXJuIGludCBwaHlfZ2VuX3BvbGwoc3Ry dWN0IHBoeV9pbmZvICpwaHkpOw0KKw0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovDQorDQorI2Vu ZGlmIC8qIF9fTUlJX0JVU19IICovDQoNCm== --=-UCEP7LL7eTaCc7pqknBv--