Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753240AbXL0B1A (ORCPT ); Wed, 26 Dec 2007 20:27:00 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751780AbXL0B0v (ORCPT ); Wed, 26 Dec 2007 20:26:51 -0500 Received: from py-out-1112.google.com ([64.233.166.176]:32910 "EHLO py-out-1112.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751895AbXL0B0t (ORCPT ); Wed, 26 Dec 2007 20:26:49 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:mime-version:content-type; b=UPKgzq6dDlmKJ9KS+VCuyiUR7wDW9HJhFLYu5yDcWr440ANdw75qEWgZniTN9u8h8246fsRF1EpVZe6lEp4FluARZj3pCdmTzJKjvjoFUCuE9vR3qWFt2bPiEnO/wpuu5NRd0+HIQx1pmW48Hp+5uyGMLx2Omm7WO/lzKAIMIi4= Message-ID: <8b67d60712261726l28960f69u2eb2756a6f5176e1@mail.gmail.com> Date: Thu, 27 Dec 2007 01:26:47 +0000 From: "Adrian McMenamin" To: "Paul Mundt" , "Jens Axboe" Subject: [PATCH] SH/Dreamcast - add support for GD-Rom device Cc: linux-kernel@vger.kernel.org, linux-sh@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_12121_24673912.1198718807632" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 33833 Lines: 458 ------=_Part_12121_24673912.1198718807632 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline This patch adds support for the CD-Rom drive on the SEGA Dreamcast. The SEGA Dreamcast has a built in CD-Rom drive, electrically similar to an ATA-3 drive, but implementing a proprietary packet interface - the so-called Sega Packet Interface (SPI)- and also supporting a proprietary format of disk - the Giga Disk Rom, with a 1GB capacity. The drive is know as the "GD-Rom drive". This patch partially implements the SPI and also supports reading GD Rom disks. Unlike previous GD Rom drivers (which were never in the mainline), this driver implements DMA and not PIO for reads. It is a new driver, not a modified version of previous drivers. This is the fourth iteration of this patch - which should work with both 2.6-24-rc5 and Paul Mundt's 2.6.25 queue. Signed-off by: Adrian McMenamin ---- ------=_Part_12121_24673912.1198718807632 Content-Type: text/x-patch; name=gdrom.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_faom6db3 Content-Disposition: attachment; filename=gdrom.patch ZGlmZiAtcnVwTiBsaW51eC0yLjYtb3JpZy9kcml2ZXJzL2Jsb2NrL0tjb25maWcgbGludXgtMi42 L2RyaXZlcnMvYmxvY2svS2NvbmZpZwotLS0gbGludXgtMi42LW9yaWcvZHJpdmVycy9ibG9jay9L Y29uZmlnCTIwMDctMTItMjYgMTc6Mjc6MTQuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0yLjYv ZHJpdmVycy9ibG9jay9LY29uZmlnCTIwMDctMTItMjcgMDA6MDg6MzkuMDAwMDAwMDAwICswMDAw CkBAIC0xMDUsNiArMTA1LDE4IEBAIGNvbmZpZyBQQVJJREUKIAkgICJNaWNyb1NvbHV0aW9ucyBi YWNrcGFjayBwcm90b2NvbCIsICJEYXRhU3RvciBDb21tdXRlciBwcm90b2NvbCIKIAkgIGV0Yy4p LgogCitjb25maWcJR0RST00KKwl0cmlzdGF0ZSAiU0VHQSBEcmVhbWNhc3QgR0QtUk9NIGRyaXZl IgorCWRlcGVuZHMgb24gU0hfRFJFQU1DQVNUCisJaGVscAorCSAgQSBzdGFuZGFyZCBTRUdBIERy ZWFtY2FzdCBjb21lcyB3aXRoIGEgbW9kaWZpZWQgQ0QgUk9NIGRyaXZlIGNhbGxlZCBhCisJICAi R0QtUk9NIiBieSBTRUdBIHRvIHNpZ25pZnkgaXQgaXMgY2FwYWJsZSBvZiByZWFkaW5nIHNwZWNp YWwgZGlza3MKKwkgIHdpdGggdXAgdG8gMSBHQiBvZiBkYXRhLiBUaGlzIGRyaXZlIHdpbGwgYWxz byByZWFkIHN0YW5kYXJkIENEIFJPTQorCSAgZGlza3MuIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBh Y2Nlc3MgYW55IGRpc2tzIGluIHlvdXIgR0QgUk9NIGRyaXZlLgorCSAgTW9zdCB1c2VycyB3aWxs IHdhbnQgdG8gc2F5ICJZIiBoZXJlLgorCSAgWW91IGNhbiBhbHNvIGJ1aWxkIHRoaXMgYXMgYSBt b2R1bGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZ2Ryb20ua28KKworCiBzb3VyY2UgImRyaXZlcnMv YmxvY2svcGFyaWRlL0tjb25maWciCiAKIGNvbmZpZyBCTEtfQ1BRX0RBCmRpZmYgLXJ1cE4gbGlu dXgtMi42LW9yaWcvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGxpbnV4LTIuNi9kcml2ZXJzL2Nkcm9t L2dkcm9tLmMKLS0tIGxpbnV4LTIuNi1vcmlnL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwkxOTcwLTAx LTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42L2RyaXZlcnMvY2Ryb20v Z2Ryb20uYwkyMDA3LTEyLTI3IDAwOjU3OjAxLjAwMDAwMDAwMCArMDAwMApAQCAtMCwwICsxLDc3 NiBAQAorLyogR0QgUk9NIGRyaXZlciBmb3IgdGhlIFNFR0EgRHJlYW1jYXN0CisgKiBjb3B5cmln aHQgQWRyaWFuIE1jTWVuYW1pbiwgMjAwNworICogV2l0aCB0aGFua3MgdG8gTWFyY3VzIENvbXN0 ZWR0IGFuZCBOYXRoYW4gS2V5bmVzCisgKiBmb3Igd29yayBpbiByZXZlcnNpbmcgUElPIGFuZCBE TUEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoK KyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxs aW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CisjaW5jbHVkZSA8 bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9i bGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1 ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c2Nz aS9zY3NpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2lu Y2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgorI2luY2x1ZGUg PGFzbS9tYWNoL3N5c2FzaWMuaD4KKworI2RlZmluZSBHRFJPTV9ERVZfTkFNRSAiZ2Ryb20iCisj ZGVmaW5lIEdEX1NFU1NJT05fT0ZGU0VUIDE1MAorCisvKiBHRCBSb20gY29tbWFuZHMgKi8KKyNk ZWZpbmUgR0RST01fQ09NX1NPRlRSRVNFVCAweDA4CisjZGVmaW5lIEdEUk9NX0NPTV9FWEVDRElB RyAweDkwCisjZGVmaW5lIEdEUk9NX0NPTV9QQUNLRVQgMHhBMAorI2RlZmluZSBHRFJPTV9DT01f SURERVYgMHhBMQorCisvKiBHRCBSb20gcmVnaXN0ZXJzICovCisjZGVmaW5lIEdEUk9NX0JBU0Vf UkVHIAkJCTB4QTA1RjcwMDAKKyNkZWZpbmUgR0RST01fQUxUU1RBVFVTX1JFRyAJCShHRFJPTV9C QVNFX1JFRyArIDB4MTgpCisjZGVmaW5lIEdEUk9NX0RBVEFfUkVHIAkJCShHRFJPTV9CQVNFX1JF RyArIDB4ODApCisjZGVmaW5lIEdEUk9NX0VSUk9SX1JFRyAJCShHRFJPTV9CQVNFX1JFRyArIDB4 ODQpCisjZGVmaW5lIEdEUk9NX0lOVFNFQ19SRUcgCQkoR0RST01fQkFTRV9SRUcgKyAweDg4KQor I2RlZmluZSBHRFJPTV9TRUNOVU1fUkVHIAkJKEdEUk9NX0JBU0VfUkVHICsgMHg4QykKKyNkZWZp bmUgR0RST01fQkNMX1JFRyAgCQkJKEdEUk9NX0JBU0VfUkVHICsgMHg5MCkKKyNkZWZpbmUgR0RS T01fQkNIX1JFRyAJCQkoR0RST01fQkFTRV9SRUcgKyAweDk0KQorI2RlZmluZSBHRFJPTV9EU0VM X1JFRyAJCQkoR0RST01fQkFTRV9SRUcgKyAweDk4KQorI2RlZmluZSBHRFJPTV9TVEFUVVNDT01N QU5EX1JFRyAJKEdEUk9NX0JBU0VfUkVHICsgMHg5QykKKyNkZWZpbmUgR0RST01fUkVTRVRfUkVH IAkJKEdEUk9NX0JBU0VfUkVHICsgMHg0RTQpCisKKyNkZWZpbmUgR0RST01fRE1BX1NUQVJUQURE Ul9SRUcgCShHRFJPTV9CQVNFX1JFRyArIDB4NDA0KQorI2RlZmluZSBHRFJPTV9ETUFfTEVOR1RI X1JFRyAJCShHRFJPTV9CQVNFX1JFRyArIDB4NDA4KQorI2RlZmluZSBHRFJPTV9ETUFfRElSRUNU SU9OX1JFRyAJKEdEUk9NX0JBU0VfUkVHICsgMHg0MEMpCisjZGVmaW5lIEdEUk9NX0RNQV9FTkFC TEVfUkVHIAkJKEdEUk9NX0JBU0VfUkVHICsgMHg0MTQpCisjZGVmaW5lIEdEUk9NX0RNQV9TVEFU VVNfUkVHIAkJKEdEUk9NX0JBU0VfUkVHICsgMHg0MTgpCisjZGVmaW5lIEdEUk9NX0RNQV9XQUlU X1JFRyAJCShHRFJPTV9CQVNFX1JFRyArIDB4NEEwKQorI2RlZmluZSBHRFJPTV9ETUFfQUNDRVNT X0NUUkxfUkVHIAkoR0RST01fQkFTRV9SRUcgKyAweDRCOCkKKworI2RlZmluZSBHRFJPTV9IQVJE X1NFQ1RPUiAJMjA0OAorI2RlZmluZSBCTE9DS19MQVlFUl9TRUNUT1IgCTUxMgorI2RlZmluZSBH RF9UT19CTEsgCQk0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludCBzZW5zZV9rZXk7CisJ Y29uc3QgY2hhciAqIGNvbnN0IHRleHQ7Cit9IHNlbnNlX3RleHRzW10gPSB7CisJe05PX1NFTlNF LCAiR0RST006IE9LIn0sCisJe1JFQ09WRVJFRF9FUlJPUiwgIkdEUk9NOiBSZWNvdmVyZWQgZnJv bSBlcnJvciJ9LAorCXtOT1RfUkVBRFksICJHRFJPTTogRGV2aWNlIG5vdCByZWFkeSJ9LAorCXtN RURJVU1fRVJST1IsICJHRFJPTTogRGlzayBub3QgcmVhZHkifSwKKwl7SEFSRFdBUkVfRVJST1Is ICJHRFJPTTogSGFyZHdhcmUgZXJyb3IifSwKKwl7SUxMRUdBTF9SRVFVRVNULCAiR0RST006IENv bW1hbmQgaGFzIGZhaWxlZCJ9LAorCXtVTklUX0FUVEVOVElPTiwgIkdEUk9NOiBEZXZpY2UgbmVl ZHMgYXR0ZW50aW9uIC0gZGlzayBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQifSwKKwl7REFUQV9QUk9U RUNULCAiR0RST006IERhdGEgcHJvdGVjdGlvbiBlcnJvciJ9LAorCXtBQk9SVEVEX0NPTU1BTkQs ICJHRFJPTTogQ29tbWFuZCBhYm9ydGVkIn0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGQ7CitzdGF0aWMgaW50IGdkcm9tX21ham9yOworc3RhdGljIHdhaXRfcXVldWVf aGVhZF90IGNvbW1hbmRfcXVldWU7CitzdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgcmVxdWVzdF9x dWV1ZTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhnZHJvbV9sb2NrKTsKK3N0YXRpYyB2b2lk IGdkcm9tX3JlYWRkaXNrX2RtYShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIERF Q0xBUkVfV09SSyh3b3JrLCBnZHJvbV9yZWFkZGlza19kbWEpOworc3RhdGljIExJU1RfSEVBRChn ZHJvbV9kZWZlcnJlZCk7CisKK3N0cnVjdCBnZHJvbXRvYyB7CisJdW5zaWduZWQgaW50IGVudHJ5 Wzk5XTsKKwl1bnNpZ25lZCBpbnQgZmlyc3QsIGxhc3Q7CisJdW5zaWduZWQgaW50IGxlYWRvdXQ7 Cit9OworCitzdGF0aWMgc3RydWN0IGdkcm9tX3VuaXQgeworCXN0cnVjdCBnZW5kaXNrICpkaXNr OworCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RfaW5mbzsKKwlpbnQgc3RhdHVzOworCWlu dCBwZW5kaW5nOworCWludCB0cmFuc2ZlcjsKKwljaGFyIGRpc2tfdHlwZTsKKwlzdHJ1Y3QgZ2Ry b210b2MgKnRvYzsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqZ2Ryb21fcnE7Cit9IGdkOworCitz dHJ1Y3QgZ2Ryb21faWQgeworCWNoYXIgbWlkOworCWNoYXIgbW9kaWQ7CisJY2hhciB2ZXJpZDsK KwljaGFyIHBhZEFbMTNdOworCWNoYXIgbW5hbWVbMTZdOworCWNoYXIgbW9kbmFtZVsxNl07CisJ Y2hhciBmaXJtdmVyWzE2XTsKKwljaGFyIHBhZEJbMTZdOworfTsKKworc3RhdGljIGludCBnZHJv bV9nZXRzZW5zZShzaG9ydCAqYnVmc3RyaW5nKTsKK3N0YXRpYyBpbnQgZ2Ryb21fcGFja2V0Y29t bWFuZChzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkX2luZm8sIHN0cnVjdCBwYWNrZXRfY29t bWFuZCAqY29tbWFuZCk7CitzdGF0aWMgaW50IGdkcm9tX2hhcmRyZXNldChzdHJ1Y3QgY2Ryb21f ZGV2aWNlX2luZm8gKmNkX2luZm8pOworCitzdGF0aWMgdm9pZCBnZHJvbV93YWl0X2NscmJ1c3ko dm9pZCkKK3sKKwkvKiBsb25nIHRpbWVvdXRzIC0gdHlwaWNhbCBmb3IgYSBDRCBSb20gKi8KKwl1 bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFogKiA2MDsKKwl3aGlsZSAoKGN0cmxf aW5iKEdEUk9NX0FMVFNUQVRVU19SRUcpICYgMHg4MCkgJiYgKHRpbWVfYmVmb3JlKGppZmZpZXMs IHRpbWVvdXQpKSkKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyB2b2lkIGdkcm9tX3dhaXRf YnVzeV9zbGVlcHModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJLyogV2FpdCB0 byBnZXQgYnVzeSBmaXJzdCAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFogKiA2MDsKKwl3aGls ZSAoKChjdHJsX2luYihHRFJPTV9BTFRTVEFUVVNfUkVHKSAmIDB4ODApID09IDApICYmICh0aW1l X2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkpCisJCWNwdV9yZWxheCgpOworCS8qIE5vdyB3YWl0 IGZvciBidXN5IHRvIGNsZWFyICovCisJZ2Ryb21fd2FpdF9jbHJidXN5KCk7Cit9CisKK3N0YXRp YyB2b2lkIGdkcm9tX2lkZW50aWZ5ZGV2aWNlKHZvaWQgKmJ1ZikKK3sKKwlpbnQgYzsKKwlzaG9y dCAqZGF0YSA9IGJ1ZjsKKwlnZHJvbV93YWl0X2NscmJ1c3koKTsKKwljdHJsX291dGIoR0RST01f Q09NX0lEREVWLCBHRFJPTV9TVEFUVVNDT01NQU5EX1JFRyk7CisJZ2Ryb21fd2FpdF9idXN5X3Ns ZWVwcygpOworCS8qIG5vdyByZWFkIGluIHRoZSBkYXRhICovCisJZm9yIChjID0gMDsgYyA8IDQw OyBjKyspCisJCWRhdGFbY10gPSBjdHJsX2ludyhHRFJPTV9EQVRBX1JFRyk7Cit9CisKK3N0YXRp YyB2b2lkIGdkcm9tX3NwaWNvbW1hbmQodm9pZCAqc3BpX3N0cmluZywgaW50IGJ1ZmxlbikKK3sK KwlzaG9ydCAqY21kID0gc3BpX3N0cmluZzsKKwkvKiBlbnN1cmUgSVJRX1dBSVQgaXMgc2V0ICov CisJY3RybF9vdXRiKDB4MDgsIEdEUk9NX0FMVFNUQVRVU19SRUcpOworCS8qIHNwZWNpZnkgaG93 IG1hbnkgYnl0ZXMgd2UgZXhwZWN0IGJhY2sgKi8KKwljdHJsX291dGIoYnVmbGVuICYgMHhGRiwg R0RST01fQkNMX1JFRyk7CisJY3RybF9vdXRiKChidWZsZW4gPj4gOCkgJiAweEZGLCBHRFJPTV9C Q0hfUkVHKTsKKwkvKiBvdGhlciBwYXJhbWV0ZXJzICovCisJY3RybF9vdXRiKDAsIEdEUk9NX0lO VFNFQ19SRUcpOworCWN0cmxfb3V0YigwLCBHRFJPTV9TRUNOVU1fUkVHKTsKKwljdHJsX291dGIo MCwgR0RST01fRVJST1JfUkVHKTsKKwkvKiBXYWl0IHVudGlsIHdlIGNhbiBnbyAqLworCWdkcm9t X3dhaXRfY2xyYnVzeSgpOworCWN0cmxfb3V0YihHRFJPTV9DT01fUEFDS0VULCBHRFJPTV9TVEFU VVNDT01NQU5EX1JFRyk7CisJd2hpbGUgKChjdHJsX2luYihHRFJPTV9BTFRTVEFUVVNfUkVHKSAm IDB4ODgpICE9IDgpCisJCWNwdV9yZWxheCgpOyAvKiB3YWl0IGZvciBEUlEgdG8gYmUgc2V0IHRv IDEgKi8KKwlvdXRzdyhQSFlTQUREUihHRFJPTV9EQVRBX1JFRyksIGNtZCwgNik7Cit9CisKKy8q IGdkcm9tX2NvbW1hbmRfZXhlY3V0ZWRpYWdub3N0aWM6CisgKiBVc2VkIHRvIHByb2JlIGZvciBw cmVzZW5jZSBvZiB3b3JraW5nIEdEUk9NCisgKiBSZXN0YXJ0cyBHRFJPTSBkZXZpY2UgYW5kIHRo ZW4gYXBwbGllcyBzdGFuZGFyZCBBVEEgMworICogRXhlY3V0ZSBEaWFnbm9zdGljIENvbW1hbmQ6 IGEgcmV0dXJuIG9mICcxJyBpbmRpY2F0ZXMgZGV2aWNlIDAKKyAqIHByZXNlbnQgYW5kIGRldmlj ZSAxIGFic2VudAorICovCitzdGF0aWMgY2hhciBnZHJvbV9leGVjdXRlX2RpYWdub3N0aWModm9p ZCkKK3sKKwlnZHJvbV9oYXJkcmVzZXQoZ2QuY2RfaW5mbyk7CisJZ2Ryb21fd2FpdF9jbHJidXN5 KCk7CisJY3RybF9vdXRiKEdEUk9NX0NPTV9FWEVDRElBRywgR0RST01fU1RBVFVTQ09NTUFORF9S RUcpOworCWdkcm9tX3dhaXRfYnVzeV9zbGVlcHMoKTsKKwlyZXR1cm4gY3RybF9pbmIoR0RST01f RVJST1JfUkVHKTsKK30KKworLyoKKyAqIFByZXBhcmUgZGlzayBjb21tYW5kCisgKiBieXRlIDAg PSAweDcwCisgKiBieXRlIDEgPSAweDFmCisgKi8KK3N0YXRpYyBpbnQgZ2Ryb21fcHJlcGFyZWRp c2tfY21kKHZvaWQpCit7CisJc3RydWN0IHBhY2tldF9jb21tYW5kICpzcGluX2NvbW1hbmQ7CisJ c3Bpbl9jb21tYW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tldF9jb21tYW5kKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFzcGluX2NvbW1hbmQpCisJCXJldHVybiAtRU5PTUVNOworCXNwaW5f Y29tbWFuZC0+Y21kWzBdID0gMHg3MDsKKwlzcGluX2NvbW1hbmQtPmNtZFsyXSA9IDB4MWY7CisJ c3Bpbl9jb21tYW5kLT5idWZsZW4gPSAwOworCWdkLnBlbmRpbmcgPSAxOworCWdkcm9tX3BhY2tl dGNvbW1hbmQoZ2QuY2RfaW5mbywgc3Bpbl9jb21tYW5kKTsKKwkvKiA2MCBzZWNvbmQgdGltZW91 dCAqLworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGNvbW1hbmRfcXVldWUsIGdk LnBlbmRpbmcgPT0gMCwgSFogKiA2MCk7CisJZ2QucGVuZGluZyA9IDA7CisJa2ZyZWUoc3Bpbl9j b21tYW5kKTsKKwlpZiAoZ2Quc3RhdHVzICYgMHgwMSkgeworCQkvKiBsb2cgYW4gZXJyb3IgKi8K KwkJZ2Ryb21fZ2V0c2Vuc2UoTlVMTCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsK K30KKworLyoKKyAqIFJlYWQgVE9DIGNvbW1hbmQKKyAqIGJ5dGUgMCA9IDB4MTQKKyAqIGJ5dGUg MSA9IHNlc3Npb24KKyAqIGJ5dGUgMyA9IHNpemVvZiBUT0MgPj4gOCAgaWUgdXBwZXIgYnl0ZQor ICogYnl0ZSA0ID0gc2l6ZW9mIFRPQyAmIDB4ZmYgaWUgbG93ZXIgYnl0ZQorICovCitzdGF0aWMg aW50IGdkcm9tX3JlYWR0b2NfY21kKHN0cnVjdCBnZHJvbXRvYyAqdG9jLCBpbnQgc2Vzc2lvbikK K3sKKwlpbnQgdG9jc2l6ZTsKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKnRvY19jb21tYW5kOwor CXRvY19jb21tYW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tldF9jb21tYW5kKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF0b2NfY29tbWFuZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdG9jc2l6 ZSA9IHNpemVvZihzdHJ1Y3QgZ2Ryb210b2MpOworCXRvY19jb21tYW5kLT5jbWRbMF0gPSAweDE0 OworCXRvY19jb21tYW5kLT5jbWRbMV0gPSBzZXNzaW9uOworCXRvY19jb21tYW5kLT5jbWRbM10g PSB0b2NzaXplID4+IDg7CisJdG9jX2NvbW1hbmQtPmNtZFs0XSA9IHRvY3NpemUgJiAweGZmOwor CXRvY19jb21tYW5kLT5idWZsZW4gPSB0b2NzaXplOworCWdkLnBlbmRpbmcgPSAxOworCWdkcm9t X3BhY2tldGNvbW1hbmQoZ2QuY2RfaW5mbywgdG9jX2NvbW1hbmQpOworCXdhaXRfZXZlbnRfaW50 ZXJydXB0aWJsZV90aW1lb3V0KGNvbW1hbmRfcXVldWUsIGdkLnBlbmRpbmcgPT0gMCwgSFogKiA2 MCk7CisJZ2QucGVuZGluZyA9IDA7CisJaW5zdyhQSFlTQUREUihHRFJPTV9EQVRBX1JFRyksIHRv YywgdG9jc2l6ZS8yKTsKKwlrZnJlZSh0b2NfY29tbWFuZCk7CisJaWYgKGdkLnN0YXR1cyAmIDB4 MDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCisvKiBUT0MgaGVscGVycyAq Lworc3RhdGljIGludCBnZXRfZW50cnlfbGJhKGludCB0cmFjaykKK3sKKwlyZXR1cm4gKGNwdV90 b19iZTMyKHRyYWNrICYgMHhmZmZmZmYwMCkgLSBHRF9TRVNTSU9OX09GRlNFVCk7Cit9CisKK3N0 YXRpYyBpbnQgZ2V0X2VudHJ5X3FfY3RybChpbnQgdHJhY2spCit7CisJcmV0dXJuICh0cmFjayAm IDB4MDAwMDAwZjApID4+IDQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2VudHJ5X3RyYWNrKGludCB0 cmFjaykKK3sKKwlyZXR1cm4gKHRyYWNrICYgMHgwMDAwZmYwMCkgPj4gODsKK30KKworc3RhdGlj IGludCBnZHJvbV9nZXRfbGFzdF9zZXNzaW9uKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2Rf aW5mbywgc3RydWN0IGNkcm9tX211bHRpc2Vzc2lvbiAqbXNfaW5mbykKK3sKKwlpbnQgZmVudHJ5 LCBsZW50cnksIHRyYWNrLCBkYXRhLCB0b2N1c2UsIGVycjsKKwlrZnJlZShnZC50b2MpOworCWdk LnRvYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZHJvbXRvYyksIEdGUF9LRVJORUwpOworCWlm ICghZ2QudG9jKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0b2N1c2UgPSAxOworCS8qIENoZWNrIGlm IEdELVJPTSAqLworCWVyciA9IGdkcm9tX3JlYWR0b2NfY21kKGdkLnRvYywgMSk7CisJLyogTm90 IGEgR0QtUk9NIHNvIGNoZWNrIGlmIHN0YW5kYXJkIENELVJPTSAqLworCWlmIChlcnIpIHsKKwkJ dG9jdXNlID0gMDsKKwkJZXJyID0gZ2Ryb21fcmVhZHRvY19jbWQoZ2QudG9jLCAwKTsKKwkJaWYg KGVycikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IGdldCBDRCB0YWJsZSBvZiBj b250ZW50c1xuIik7CisJCQlyZXR1cm4gLUVOWElPOworCQl9CisJfQorCisJZmVudHJ5ID0gZ2V0 X2VudHJ5X3RyYWNrKGdkLnRvYy0+Zmlyc3QpOworCWxlbnRyeSA9IGdldF9lbnRyeV90cmFjayhn ZC50b2MtPmxhc3QpOworCS8qIEZpbmQgdGhlIGZpcnN0IGRhdGEgdHJhY2sgKi8KKwl0cmFjayA9 IGdldF9lbnRyeV90cmFjayhnZC50b2MtPmxhc3QpOworCWRvIHsKKwkJZGF0YSA9IGdkLnRvYy0+ ZW50cnlbdHJhY2sgLSAxXTsKKwkJaWYgKGdldF9lbnRyeV9xX2N0cmwoZGF0YSkpCisJCQlicmVh azsJLyogaWUgYSByZWFsIGRhdGEgdHJhY2sgKi8KKwkJdHJhY2stLTsKKwl9IHdoaWxlICh0cmFj ayA+PSBmZW50cnkpOworCisJaWYgKCh0cmFjayA+IDEwMCkgfHwgKHRyYWNrIDwgZ2V0X2VudHJ5 X3RyYWNrKGdkLnRvYy0+Zmlyc3QpKSkgeworCQlnZHJvbV9nZXRzZW5zZShOVUxMKTsKKwkJcHJp bnRrKEtFUk5fSU5GTyAiR0RST006IE5vIGRhdGEgb24gdGhlIGxhc3Qgc2Vzc2lvbiBvZiB0aGUg Q0RcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCW1zX2luZm8tPmFkZHJfZm9ybWF0ID0g Q0RST01fTEJBOworCW1zX2luZm8tPmFkZHIubGJhID0gZ2V0X2VudHJ5X2xiYShkYXRhKTsKKwlt c19pbmZvLT54YV9mbGFnID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZHJvbV9v cGVuKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RfaW5mbywgaW50IHB1cnBvc2UpCit7CisJ Lyogc3BpbiB1cCB0aGUgZGlzayAqLworCXJldHVybiBnZHJvbV9wcmVwYXJlZGlza19jbWQoKTsK K30KKworLyogdGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBldmVuIGlmIGVtcHR5ICovCitzdGF0 aWMgdm9pZCBnZHJvbV9yZWxlYXNlKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RfaW5mbykK K3sKK30KKworc3RhdGljIGludCBnZHJvbV9kcml2ZXN0YXR1cyhzdHJ1Y3QgY2Ryb21fZGV2aWNl X2luZm8gKmNkX2luZm8sIGludCBpZ25vcmUpCit7CisJLyogcmVhZCB0aGUgc2Vuc2Uga2V5ICov CisJY2hhciBzZW5zZSA9IGN0cmxfaW5iKEdEUk9NX0VSUk9SX1JFRyk7CisJc2Vuc2UgJj0gMHhG MDsKKwlpZiAoc2Vuc2UgPT0gMCkKKwkJcmV0dXJuIENEU19ESVNDX09LOworCWlmIChzZW5zZSA9 PSAweDIwKQorCQlyZXR1cm4gQ0RTX0RSSVZFX05PVF9SRUFEWTsKKwkvKiBkZWZhdWx0ICovCisJ cmV0dXJuIENEU19OT19JTkZPOworfQorCitzdGF0aWMgaW50IGdkcm9tX21lZGlhY2hhbmdlZChz dHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkX2luZm8sIGludCBpZ25vcmUpCit7CisJLyogY2hl Y2sgdGhlIHNlbnNlIGtleSAqLworCXJldHVybiAoKGN0cmxfaW5iKEdEUk9NX0VSUk9SX1JFRykg JiAweEYwKSA9PSAweDYwKTsKK30KKworLyogcmVzZXQgdGhlIEcxIGJ1cyAqLworc3RhdGljIGlu dCBnZHJvbV9oYXJkcmVzZXQoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZF9pbmZvKQorewor CWludCBjb3VudDsKKwljdHJsX291dGwoMHgxZmZmZmYsIEdEUk9NX1JFU0VUX1JFRyk7CisJZm9y IChjb3VudCA9IDB4YTAwMDAwMDA7IGNvdW50IDwgMHhhMDIwMDAwMDsgY291bnQgKz0gNCkKKwkJ Y3RybF9pbmwoY291bnQpOworCXJldHVybiAwOworfQorCisvKiBrZWVwIHRoZSBmdW5jdGlvbiBs b2lva2luZyBsaWtlIHRoZSB1bml2ZXJzYWwgQ0QgUm9tIHNwZWNpZmljYXRpb24gLSByZXR1cm5p bmcgaW50Ki8KK3N0YXRpYyBpbnQgZ2Ryb21fcGFja2V0Y29tbWFuZChzdHJ1Y3QgY2Ryb21fZGV2 aWNlX2luZm8gKmNkX2luZm8sIHN0cnVjdCBwYWNrZXRfY29tbWFuZCAqY29tbWFuZCkKK3sKKwln ZHJvbV9zcGljb21tYW5kKCZjb21tYW5kLT5jbWQsIGNvbW1hbmQtPmJ1Zmxlbik7CisJcmV0dXJu IDA7Cit9CisKKy8qIEdldCBTZW5zZSBTUEkgY29tbWFuZAorICogRnJvbSBNYXJjdXMgQ29tc3Rl ZHQKKyAqIGNtZCA9IDB4MTMKKyAqIGNtZCArIDQgPSBsZW5ndGggb2YgcmV0dXJuZWQgYnVmZmVy CisgKiBSZXR1cm5zIDUgMTYgYml0IHdvcmRzCisgKi8KK3N0YXRpYyBpbnQgZ2Ryb21fZ2V0c2Vu c2Uoc2hvcnQgKmJ1ZnN0cmluZykKK3sKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKnNlbnNlX2Nv bW1hbmQ7CisJc2hvcnQgc2Vuc2VbNV07CisJaW50IHNlbnNlX2tleTsKKwlpZiAoZ2QucGVuZGlu ZykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBhbGxvY2F0ZSBjb21tYW5kIGFuZCBidWZmZXIgKi8K KwlzZW5zZV9jb21tYW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tldF9jb21tYW5kKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzZW5zZV9jb21tYW5kKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXNlbnNlX2NvbW1hbmQtPmNtZFswXSA9IDB4MTM7CisJc2Vuc2VfY29tbWFuZC0+Y21kWzRdID0g MTA7CisJc2Vuc2VfY29tbWFuZC0+YnVmbGVuID0gMTA7CisKKwlnZC5wZW5kaW5nID0gMTsKKwln ZHJvbV9wYWNrZXRjb21tYW5kKGdkLmNkX2luZm8sIHNlbnNlX2NvbW1hbmQpOworCS8qIDYwIHNl Y29uZCB0aW1lb3V0ICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoY29tbWFu ZF9xdWV1ZSwgZ2QucGVuZGluZyA9PSAwLCBIWiAqIDYwKTsKKwlnZC5wZW5kaW5nID0gMDsKKwlr ZnJlZShzZW5zZV9jb21tYW5kKTsKKwlpbnN3KFBIWVNBRERSKEdEUk9NX0RBVEFfUkVHKSwgJnNl bnNlLCA1KTsKKwlpZiAoc2Vuc2VbMV0gJiA0MCkgeworCQlwcmludGsoS0VSTl9JTkZPICJHRFJP TTogRHJpdmUgbm90IHJlYWR5IC0gY29tbWFuZCBhYm9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87 CisJfQorCXNlbnNlX2tleSA9IHNlbnNlWzFdICYgMHgwRjsKKwlwcmludGsoS0VSTl9JTkZPICIl c1xuIiwgc2Vuc2VfdGV4dHNbc2Vuc2Vfa2V5XS50ZXh0KTsKKworCWlmIChidWZzdHJpbmcpCisJ CW1lbWNweShidWZzdHJpbmcsICZzZW5zZVs0XSwgMik7IC8qIHJldHVybiBhZGRpdGlvbmFsIHNl bnNlIGRhdGEgKi8KKworCWlmIChzZW5zZV9rZXkgPCAyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4g LUVJTzsKK30KKworc3RhdGljIHN0cnVjdCBjZHJvbV9kZXZpY2Vfb3BzIGdkcm9tX29wcyA9IHsK Kwkub3BlbgkJCT0gZ2Ryb21fb3BlbiwKKwkucmVsZWFzZQkJPSBnZHJvbV9yZWxlYXNlLAorCS5k cml2ZV9zdGF0dXMJCT0gZ2Ryb21fZHJpdmVzdGF0dXMsCisJLm1lZGlhX2NoYW5nZWQJCT0gZ2Ry b21fbWVkaWFjaGFuZ2VkLAorCS5nZXRfbGFzdF9zZXNzaW9uCT0gZ2Ryb21fZ2V0X2xhc3Rfc2Vz c2lvbiwKKwkucmVzZXQJCQk9IGdkcm9tX2hhcmRyZXNldCwKKwkuY2FwYWJpbGl0eQkJPSBDRENf TVVMVElfU0VTU0lPTiB8IENEQ19NRURJQV9DSEFOR0VEIHwKKwkJCQkgIENEQ19SRVNFVCB8IENE Q19EUklWRV9TVEFUVVMgfCBDRENfQ0RfUiwKKwkubl9taW5vcnMJCT0gMSwKK307CisKK3N0YXRp YyBpbnQgZ2Ryb21fYmRvcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlsZSkKK3sKKwlyZXR1cm4gY2Ryb21fb3BlbihnZC5jZF9pbmZvLCBpbm9kZSwgZmlsZSk7Cit9 CisKK3N0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gY2Ryb21fcmVsZWFzZShnZC5jZF9pbmZvLCBm aWxlKTsKK30KKworc3RhdGljIGludCBnZHJvbV9iZG9wc19tZWRpYWNoYW5nZWQoc3RydWN0IGdl bmRpc2sgKmRpc2spCit7CisJcmV0dXJuIGNkcm9tX21lZGlhX2NoYW5nZWQoZ2QuY2RfaW5mbyk7 Cit9CisKK3N0YXRpYyBpbnQgZ2Ryb21fYmRvcHNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwg c3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJ cmV0dXJuIGNkcm9tX2lvY3RsKGZpbGUsIGdkLmNkX2luZm8sIGlub2RlLCBjbWQsIGFyZyk7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZ2Ryb21fYmRvcHMgPSB7 CisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJCT0gZ2Ryb21fYmRvcHNfb3BlbiwK KwkucmVsZWFzZQkJPSBnZHJvbV9iZG9wc19yZWxlYXNlLAorCS5tZWRpYV9jaGFuZ2VkCQk9IGdk cm9tX2Jkb3BzX21lZGlhY2hhbmdlZCwKKwkuaW9jdGwJCQk9IGdkcm9tX2Jkb3BzX2lvY3RsLAor fTsKKworc3RhdGljIGlycXJldHVybl90IGdkcm9tX2NvbW1hbmRfaW50ZXJydXB0KGludCBpcnEs IHZvaWQgKmRldl9pZCkKK3sKKwlnZC5zdGF0dXMgPSBjdHJsX2luYihHRFJPTV9TVEFUVVNDT01N QU5EX1JFRyk7CisJaWYgKGdkLnBlbmRpbmcgIT0gMSkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwor CWdkLnBlbmRpbmcgPSAwOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY29tbWFuZF9xdWV1ZSk7 CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZ2Ryb21fZG1h X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJZ2Quc3RhdHVzID0gY3RybF9p bmIoR0RST01fU1RBVFVTQ09NTUFORF9SRUcpOworCWlmIChnZC50cmFuc2ZlciAhPSAxKQorCQly ZXR1cm4gSVJRX0hBTkRMRUQ7CisJZ2QudHJhbnNmZXIgPSAwOworCXdha2VfdXBfaW50ZXJydXB0 aWJsZSgmcmVxdWVzdF9xdWV1ZSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg aW50IGdkcm9tX3NldF9jb21tYW5kX2ludGVycnVwdF9oYW5kbGVyKHZvaWQpCit7CisJLyogbmVl ZCBhIHF1ZXVlIHRvIHdhaXQgaW4gKi8KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb21tYW5kX3F1 ZXVlKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfR0RST01fQ01ELCBnZHJvbV9jb21t YW5kX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgImdkcm9tX2NvbW1hbmQiLCAmZ2QpOworfQor CitzdGF0aWMgaW50IGdkcm9tX3NldF9kbWFfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKK3sKKwlp bml0X3dhaXRxdWV1ZV9oZWFkKCZyZXF1ZXN0X3F1ZXVlKTsKKwlyZXR1cm4gcmVxdWVzdF9pcnEo SFdfRVZFTlRfR0RST01fRE1BLCBnZHJvbV9kbWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAi Z2Ryb21fZG1hIiwgJmdkKTsKK30KKworLyogSW1wbGVtZW50IERNQSByZWFkIHVzaW5nIFNQSSBj b21tYW5kCisgKiAwIC0+IDB4MzAKKyAqIDEgLT4gbW9kZQorICogMiAtPiBibG9jayA+PiAxNgor ICogMyAtPiBibG9jayA+PiA4CisgKiA0IC0+IGJsb2NrCisgKiA4IC0+IHNlY3RvcnMgPj4gMTYK KyAqIDkgLT4gc2VjdG9ycyA+PiA4CisgKiAxMCAtPiBzZWN0b3JzCisgKi8KK3N0YXRpYyB2b2lk IGdkcm9tX3JlYWRkaXNrX2RtYShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IGVy ciwgYmxvY2ssIGJsb2NrX2NudDsKKwlzdHJ1Y3QgcGFja2V0X2NvbW1hbmQgKnJlYWRfY29tbWFu ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtLCAqbmV4dDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVx OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpZiAobGlzdF9lbXB0eSgmZ2Ryb21fZGVmZXJy ZWQpKQorCQlyZXR1cm47CisJcmVhZF9jb21tYW5kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBh Y2tldF9jb21tYW5kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWFkX2NvbW1hbmQpCisJCXJldHVy bjsgLyogZ2V0IG1vcmUgbWVtb3J5IGxhdGVyPyAqLworCXJlYWRfY29tbWFuZC0+Y21kWzBdID0g MHgzMDsKKwlyZWFkX2NvbW1hbmQtPmNtZFsxXSA9IDB4MjA7CisJc3Bpbl9sb2NrKCZnZHJvbV9s b2NrKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZWxlbSwgbmV4dCwgJmdkcm9tX2RlZmVycmVkKSB7 CisJCXJlcSA9IGxpc3RfZW50cnkoZWxlbSwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCk7CisJ CXNwaW5fdW5sb2NrKCZnZHJvbV9sb2NrKTsKKwkJYmxvY2sgPSByZXEtPnNlY3Rvci9HRF9UT19C TEsgKyBHRF9TRVNTSU9OX09GRlNFVDsKKwkJYmxvY2tfY250ID0gcmVxLT5ucl9zZWN0b3JzL0dE X1RPX0JMSzsKKwkJY3RybF9vdXRsKFBIWVNBRERSKHJlcS0+YnVmZmVyKSwgR0RST01fRE1BX1NU QVJUQUREUl9SRUcpOworCQljdHJsX291dGwoYmxvY2tfY250ICogR0RST01fSEFSRF9TRUNUT1Is IEdEUk9NX0RNQV9MRU5HVEhfUkVHKTsKKwkJY3RybF9vdXRsKDEsIEdEUk9NX0RNQV9ESVJFQ1RJ T05fUkVHKTsKKwkJY3RybF9vdXRsKDEsIEdEUk9NX0RNQV9FTkFCTEVfUkVHKTsKKwkJcmVhZF9j b21tYW5kLT5jbWRbMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjsKKwkJcmVhZF9jb21tYW5kLT5j bWRbM10gPSAoYmxvY2sgPj4gOCkgJiAweEZGOworCQlyZWFkX2NvbW1hbmQtPmNtZFs0XSA9IGJs b2NrICYgMHhGRjsKKwkJcmVhZF9jb21tYW5kLT5jbWRbOF0gPSAoYmxvY2tfY250ID4+IDE2KSAm IDB4RkY7CisJCXJlYWRfY29tbWFuZC0+Y21kWzldID0gKGJsb2NrX2NudCA+PiA4KSAmIDB4RkY7 CisJCXJlYWRfY29tbWFuZC0+Y21kWzEwXSA9IGJsb2NrX2NudCAmIDB4RkY7CisJCS8qIHNldCBm b3IgRE1BICovCisJCWN0cmxfb3V0YigxLCBHRFJPTV9FUlJPUl9SRUcpOworCQkvKiBvdGhlciBy ZWdpc3RlcnMgKi8KKwkJY3RybF9vdXRiKDAsIEdEUk9NX1NFQ05VTV9SRUcpOworCQljdHJsX291 dGIoMCwgR0RST01fQkNMX1JFRyk7CisJCWN0cmxfb3V0YigwLCBHRFJPTV9CQ0hfUkVHKTsKKwkJ Y3RybF9vdXRiKDAsIEdEUk9NX0RTRUxfUkVHKTsKKwkJY3RybF9vdXRiKDAsIEdEUk9NX0lOVFNF Q19SRUcpOworCQkvKiBJbiBtdWx0aXBsZSBETUEgdHJhbnNmZXJzIG5lZWQgdG8gd2FpdCAqLwor CQl0aW1lb3V0ID0gamlmZmllcyArIEhaIC8gMjsKKwkJd2hpbGUgKChjdHJsX2luYihHRFJPTV9B TFRTVEFUVVNfUkVHKSAmIDB4ODApICYmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkp CisJCQljcHVfcmVsYXgoKTsKKwkJY3RybF9vdXRiKEdEUk9NX0NPTV9QQUNLRVQsIEdEUk9NX1NU QVRVU0NPTU1BTkRfUkVHKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBIWiAvIDI7CisJCXdoaWxl ICgoKGN0cmxfaW5iKEdEUk9NX0FMVFNUQVRVU19SRUcpICYgMHg4OCkgIT0gOCkgJiYgKHRpbWVf YmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSkKKwkJCWNwdV9yZWxheCgpOyAvKiB3YWl0IGZvciBE UlEgdG8gYmUgc2V0IHRvIDEgKi8KKwkJZ2QucGVuZGluZyA9IDE7CisJCWdkLnRyYW5zZmVyID0g MTsKKwkJb3V0c3coUEhZU0FERFIoR0RST01fREFUQV9SRUcpLCAmcmVhZF9jb21tYW5kLT5jbWQs IDYpOworCQl0aW1lb3V0ID0gamlmZmllcyArIEhaIC8gMjsKKwkJd2hpbGUgKChjdHJsX2luYihH RFJPTV9ETUFfU1RBVFVTX1JFRykpICYmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkp CisJCQljcHVfcmVsYXgoKTsKKwkJY3RybF9vdXRiKDEsIEdEUk9NX0RNQV9TVEFUVVNfUkVHKTsK KwkJLyogNSBzZWNvbmQgZXJyb3IgbWFyZ2luIGhlcmUgc2VlbXMgbW9yZSByZWFzb25hYmxlICov CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHJlcXVlc3RfcXVldWUsIGdkLnRy YW5zZmVyID09IDAsIEhaICogNSk7CisJCWVyciA9IGN0cmxfaW5iKEdEUk9NX0RNQV9TVEFUVVNf UkVHKTsgCisJCWVyciA9IGdkLnRyYW5zZmVyOworCQlnZC50cmFuc2ZlciA9IDA7CisJCWdkLnBl bmRpbmcgPSAwOworCQkvKiBub3cgc2VlayB0byB0YWtlIHRoZSByZXF1ZXN0IHNwaW5sb2NrCisg CQkgKiBiZWZvcmUgaGFuZGxpbmcgZW5kaW5nIHRoZSByZXF1ZXN0ICovCisJCXNwaW5fbG9jaygm Z2Ryb21fbG9jayk7CisJCWxpc3RfZGVsX2luaXQoJnJlcS0+cXVldWVsaXN0KTsKKwkJYmxrX3Jl cXVldWVfcmVxdWVzdChnZC5nZHJvbV9ycSwgcmVxKTsKKwkJaWYgKGVycikKKwkJCWVuZF9yZXF1 ZXN0KHJlcSwgMCk7CisJCWVsc2UKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJfQorCXNwaW5f dW5sb2NrKCZnZHJvbV9sb2NrKTsKKwlrZnJlZShyZWFkX2NvbW1hbmQpOworfQkKKworc3RhdGlj IHZvaWQgZ2Ryb21fcmVxdWVzdF9oYW5kbGVyX2RtYShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQorewor CS8qIGRlcXVldWUsIGFkZCB0byBsaXN0IG9mIGRlZmVycmVkIHdvcmsKKyAJICogYW5kIHRoZW4g c2NoZWR1bGUgd29ya3F1ZXVlICovCisJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOworCWxp c3RfYWRkX3RhaWwoJnJlcS0+cXVldWVsaXN0LCAmZ2Ryb21fZGVmZXJyZWQpOworCXNjaGVkdWxl X3dvcmsoJndvcmspOworfQorCitzdGF0aWMgdm9pZCBnZHJvbV9yZXF1ZXN0KHN0cnVjdCByZXF1 ZXN0X3F1ZXVlICpycSkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXdoaWxlICgocmVxID0g ZWx2X25leHRfcmVxdWVzdChycSkpICE9IE5VTEwpIHsKKwkJaWYgKCFibGtfZnNfcmVxdWVzdChy ZXEpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiR0RST006IE5vbi1mcyByZXF1ZXN0IGlnbm9y ZWRcbiIpOworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJfQorCQlpZiAocnFfZGF0YV9kaXIo cmVxKSAhPSBSRUFEKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkdEUk9NOiBSZWFkIG9ubHkg ZGV2aWNlIC0gd3JpdGUgcmVxdWVzdCBpZ25vcmVkXG4iKTsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwg MCk7CisJCX0KKwkJaWYgKHJlcS0+bnJfc2VjdG9ycykKKwkJCWdkcm9tX3JlcXVlc3RfaGFuZGxl cl9kbWEocmVxKTsKKwkJZWxzZQorCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwl9Cit9CisKKy8q IFByaW50IHN0cmluZyBpZGVudGlmeWluZyBHRCBST00gZGV2aWNlICovCitzdGF0aWMgaW50IF9f ZGV2aW5pdCBnZHJvbV9vdXRwdXR2ZXJzaW9uKHZvaWQpCit7CisJc3RydWN0IGdkcm9tX2lkICpp ZDsKKwljaGFyICptb2RlbF9uYW1lLCAqbWFudWZfbmFtZSwgKmZpcm13X3ZlcjsKKwlpbnQgZXJy ID0gLUVOT01FTTsKKwkvKiBxdWVyeSBkZXZpY2UgSUQgKi8KKwlpZCA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBnZHJvbV9pZCksIEdGUF9LRVJORUwpOworCWlmICghaWQpCisJCXJldHVybiBlcnI7 CisJZ2Ryb21faWRlbnRpZnlkZXZpY2UoaWQpOworCW1vZGVsX25hbWUgPSBrc3RybmR1cChpZC0+ bW9kbmFtZSwgMTYsIEdGUF9LRVJORUwpOworCWlmICghbW9kZWxfbmFtZSkKKwkJZ290byBmcmVl X2lkOworCW1hbnVmX25hbWUgPSBrc3RybmR1cChpZC0+bW5hbWUsIDE2LCBHRlBfS0VSTkVMKTsK KwlpZiAoIW1hbnVmX25hbWUpCisJCWdvdG8gZnJlZV9tb2RlbF9uYW1lOworCWZpcm13X3ZlciA9 IGtzdHJuZHVwKGlkLT5maXJtdmVyLCAxNiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaXJtd192ZXIp CisJCWdvdG8gZnJlZV9tYW51Zl9uYW1lOworCXByaW50ayhLRVJOX0lORk8gIkdEUk9NOiAlcyBm cm9tICVzIHdpdGggZmlybXdhcmUgJXNcbiIsIG1vZGVsX25hbWUsIG1hbnVmX25hbWUsIGZpcm13 X3Zlcik7CisJZXJyID0gMDsKKwlrZnJlZShmaXJtd192ZXIpOworZnJlZV9tYW51Zl9uYW1lOgor CWtmcmVlKG1hbnVmX25hbWUpOworZnJlZV9tb2RlbF9uYW1lOgorCWtmcmVlKG1vZGVsX25hbWUp OworZnJlZV9pZDoKKwlrZnJlZShpZCk7CisJcmV0dXJuIGVycjsKK30KKworLyogc2V0IHRoZSBk ZWZhdWx0IG1vZGUgZm9yIERNQSB0cmFuc2ZlciAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGdk cm9tX2luaXRfZG1hX21vZGUodm9pZCkKK3sKKwljdHJsX291dGIoMHgxMywgR0RST01fRVJST1Jf UkVHKTsKKwljdHJsX291dGIoMHgyMiwgR0RST01fSU5UU0VDX1JFRyk7CisJZ2Ryb21fd2FpdF9j bHJidXN5KCk7CisJY3RybF9vdXRiKDB4RUYsIEdEUk9NX1NUQVRVU0NPTU1BTkRfUkVHKTsKKwln ZHJvbV93YWl0X2J1c3lfc2xlZXBzKCk7CisJY3RybF9vdXRsKDB4ODg0MzQwN0YsIEdEUk9NX0RN QV9BQ0NFU1NfQ1RSTF9SRUcpOyAvKiBtZW1vcnkgc2V0dGluZyAqLworCWN0cmxfb3V0bCg5LCBH RFJPTV9ETUFfV0FJVF9SRUcpOyAvKiBETUEgd29yZCBzZXR0aW5nICovCit9CisKK3N0YXRpYyB2 b2lkIF9fZGV2aW5pdCBwcm9iZV9nZHJvbV9zZXR1cGNkKHZvaWQpCit7CisJZ2QuY2RfaW5mby0+ b3BzID0gJmdkcm9tX29wczsKKwlnZC5jZF9pbmZvLT5jYXBhY2l0eSA9IDE7CisJc3RyY3B5KGdk LmNkX2luZm8tPm5hbWUsIEdEUk9NX0RFVl9OQU1FKTsKKwlnZC5jZF9pbmZvLT5tYXNrID0gQ0RD X0NMT1NFX1RSQVl8Q0RDX09QRU5fVFJBWXxDRENfTE9DS3xDRENfU0VMRUNUX0RJU0M7Cit9CisK K3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwcm9iZV9nZHJvbV9zZXR1cGRpc2sodm9pZCkKK3sKKwln ZC5kaXNrLT5tYWpvciA9IGdkcm9tX21ham9yOworCWdkLmRpc2stPmZpcnN0X21pbm9yID0gMTsK KwlnZC5kaXNrLT5taW5vcnMgPSAxOworCXN0cmNweShnZC5kaXNrLT5kaXNrX25hbWUsIEdEUk9N X0RFVl9OQU1FKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHByb2JlX2dkcm9tX3NldHVw cXVldWUodm9pZCkKK3sKKwlibGtfcXVldWVfaGFyZHNlY3Rfc2l6ZShnZC5nZHJvbV9ycSwgR0RS T01fSEFSRF9TRUNUT1IpOworCS8qIHVzaW5nIERNQSBzbyBtZW1vcnkgd2lsbCBuZWVkIHRvIGJl IGNvbnRpZ3VvdXMgKi8KKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGdkLmdkcm9tX3JxLCAx KTsKKwkvKiBzZXQgYSBsYXJnZSBtYXggc2l6ZSB0byBnZXQgbW9zdCBmcm9tIERNQSAqLworCWJs a19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGdkLmdkcm9tX3JxLCAweDQwMDAwKTsKKwlnZC5kaXNr LT5xdWV1ZSA9IGdkLmdkcm9tX3JxOworCWdkcm9tX2luaXRfZG1hX21vZGUoKTsKK30KKworLyoK KyAqIHJlZ2lzdGVyIHRoaXMgYXMgYSBibG9jayBkZXZpY2UgYW5kIGFzIGNvbXBsaWFudCB3aXRo IHRoZQorICogdW5pdmVyc2FsIENEIFJvbSBkcml2ZXIgaW50ZXJmYWNlCisgKi8KK3N0YXRpYyBp bnQgX19kZXZpbml0IHByb2JlX2dkcm9tKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikK K3sKKwlpbnQgZXJyOworCWlmIChnZHJvbV9leGVjdXRlX2RpYWdub3N0aWMoKSAhPSAxKSB7CisJ CXByaW50ayhLRVJOX1dBUk5JTkcgIkdEUk9NOiBBVEEgUHJvYmUgZm9yIEdEUk9NIGZhaWxlZC5c biIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKGdkcm9tX291dHB1dHZlcnNpb24oKSkK KwkJcmV0dXJuIC1FTk9NRU07CisJZ2Ryb21fbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgR0RS T01fREVWX05BTUUpOworCWlmIChnZHJvbV9tYWpvciA8PSAwKQorCQlyZXR1cm4gZ2Ryb21fbWFq b3I7CisJcHJpbnRrKEtFUk5fSU5GTyAiR0RST006IEJsb2NrIGRldmljZSBpcyByZWdpc3RlcmVk IHdpdGggbWFqb3IgbnVtYmVyICVkXG4iLCBnZHJvbV9tYWpvcik7CisJZ2QuY2RfaW5mbyA9IGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCWlm ICghZ2QuY2RfaW5mbykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHByb2JlX2ZhaWxfbm9f bWVtOworCX0KKwlwcm9iZV9nZHJvbV9zZXR1cGNkKCk7CisJZ2QuZGlzayA9IGFsbG9jX2Rpc2so MSk7CisJaWYgKCFnZC5kaXNrKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gcHJvYmVfZmFp bF9ub19kaXNrOworCX0KKwlwcm9iZV9nZHJvbV9zZXR1cGRpc2soKTsKKwlpZiAocmVnaXN0ZXJf Y2Ryb20oZ2QuY2RfaW5mbykpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBwcm9iZV9mYWls X2Nkcm9tX3JlZ2lzdGVyOworCX0KKwlnZC5kaXNrLT5mb3BzID0gJmdkcm9tX2Jkb3BzOworCS8q IGxhdGNoIG9uIHRvIHRoZSBpbnRlcnJ1cHQgKi8KKwllcnIgPSBnZHJvbV9zZXRfY29tbWFuZF9p bnRlcnJ1cHRfaGFuZGxlcigpOworCWlmIChlcnIpCisJCWdvdG8gcHJvYmVfZmFpbF9jbWRpcnFf cmVnaXN0ZXI7CisJZXJyID0gZ2Ryb21fc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcigpOworCWlm IChlcnIpCisJCWdvdG8gcHJvYmVfZmFpbF9kbWFpcnFfcmVnaXN0ZXI7CisJZ2QuZ2Ryb21fcnEg PSBibGtfaW5pdF9xdWV1ZShnZHJvbV9yZXF1ZXN0LCAmZ2Ryb21fbG9jayk7CisJaWYgKCFnZC5n ZHJvbV9ycSkKKwkJZ290byBwcm9iZV9mYWlsX3JlcXVlc3RxOworCXByb2JlX2dkcm9tX3NldHVw cXVldWUoKTsKKwlhZGRfZGlzayhnZC5kaXNrKTsKKwlyZXR1cm4gMDsKKworcHJvYmVfZmFpbF9y ZXF1ZXN0cToKKwlmcmVlX2lycShIV19FVkVOVF9HRFJPTV9ETUEsICZnZCk7Citwcm9iZV9mYWls X2RtYWlycV9yZWdpc3RlcjoKKwlmcmVlX2lycShIV19FVkVOVF9HRFJPTV9DTUQsICZnZCk7Citw cm9iZV9mYWlsX2NtZGlycV9yZWdpc3RlcjoKK3Byb2JlX2ZhaWxfY2Ryb21fcmVnaXN0ZXI6CisJ ZGVsX2dlbmRpc2soZ2QuZGlzayk7Citwcm9iZV9mYWlsX25vX2Rpc2s6CisJa2ZyZWUoZ2QuY2Rf aW5mbyk7CisJdW5yZWdpc3Rlcl9ibGtkZXYoZ2Ryb21fbWFqb3IsIEdEUk9NX0RFVl9OQU1FKTsK KwlnZHJvbV9tYWpvciA9IDA7Citwcm9iZV9mYWlsX25vX21lbToKKwlwcmludGsoS0VSTl9XQVJO SU5HICJHRFJPTTogQ291bGQgbm90IHByb2JlIGZvciBkZXZpY2UgLSBlcnJvciBpcyAweCVYXG4i LCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2dkcm9tKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKK3sKKwlibGtfY2xlYW51cF9xdWV1ZShnZC5nZHJv bV9ycSk7CisJZnJlZV9pcnEoSFdfRVZFTlRfR0RST01fQ01ELCAmZ2QpOworCWZyZWVfaXJxKEhX X0VWRU5UX0dEUk9NX0RNQSwgJmdkKTsKKwlkZWxfZ2VuZGlzayhnZC5kaXNrKTsKKwlpZiAoZ2Ry b21fbWFqb3IpCisJCXVucmVnaXN0ZXJfYmxrZGV2KGdkcm9tX21ham9yLCBHRFJPTV9ERVZfTkFN RSk7CisJcmV0dXJuIHVucmVnaXN0ZXJfY2Ryb20oZ2QuY2RfaW5mbyk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdkcm9tX2RyaXZlciA9IHsKKwkucHJvYmUgPSBwcm9iZV9n ZHJvbSwKKwkucmVtb3ZlID0gcmVtb3ZlX2dkcm9tLAorCS5kcml2ZXIgPSB7CisJCQkubmFtZSA9 IEdEUk9NX0RFVl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2dkcm9t KHZvaWQpCit7CisJaW50IHJjOworCWdkLnRvYyA9IE5VTEw7CisJcmMgPSBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIoJmdkcm9tX2RyaXZlcik7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcGQg PSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEdEUk9NX0RFVl9OQU1FLCAtMSwgTlVM TCwgMCk7CisJaWYgKElTX0VSUihwZCkpIHsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo Jmdkcm9tX2RyaXZlcik7CisJCXJldHVybiBQVFJfRVJSKHBkKTsKKwl9CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2dkcm9tKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2 aWNlX3VucmVnaXN0ZXIocGQpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZHJvbV9k cml2ZXIpOworCWtmcmVlKGdkLnRvYyk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfZ2Ryb20pOwor bW9kdWxlX2V4aXQoZXhpdF9nZHJvbSk7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWlu IDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWs+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNFR0Eg RHJlYW1jYXN0IEdELVJPTSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAt cnVwTiBsaW51eC0yLjYtb3JpZy9kcml2ZXJzL2Nkcm9tL01ha2VmaWxlIGxpbnV4LTIuNi9kcml2 ZXJzL2Nkcm9tL01ha2VmaWxlCi0tLSBsaW51eC0yLjYtb3JpZy9kcml2ZXJzL2Nkcm9tL01ha2Vm aWxlCTIwMDctMTItMjYgMTc6Mjc6MTUuMDAwMDAwMDAwICswMDAwCisrKyBsaW51eC0yLjYvZHJp dmVycy9jZHJvbS9NYWtlZmlsZQkyMDA3LTEyLTI3IDAwOjA4OjM5LjAwMDAwMDAwMCArMDAwMApA QCAtMTEsMyArMTEsNCBAQCBvYmotJChDT05GSUdfUEFSSURFX1BDRCkJKz0JCWNkcm9tLm8KIG9i ai0kKENPTkZJR19DRFJPTV9QS1RDRFZEKQkrPQkJY2Ryb20ubwogCiBvYmotJChDT05GSUdfVklP Q0QpCQkrPSB2aW9jZC5vICAgICAgY2Ryb20ubworb2JqLSQoQ09ORklHX0dEUk9NKQkJKz0gZ2Ry b20ubyAgICAgIGNkcm9tLm8K ------=_Part_12121_24673912.1198718807632-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/