From mboxrd@z Thu Jan 1 00:00:00 1970 From: InKi Dae Subject: [PATCH] added S6E63M0 AMOLED LCD Panel driver. Date: Fri, 26 Mar 2010 12:24:24 +0900 Message-ID: <90b950fc1003252024i5ba8989bg95f0a81e8e5e708e@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001485f8137436f5610482abb3f6 Return-path: Sender: linux-kernel-owner@vger.kernel.org List-ID: To: Andrew Morton , Pavel Machek , linux-fbdev-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Cc: kyungmin.park@samsung.com --001485f8137436f5610482abb3f6 Content-Type: text/plain; charset=ISO-8859-1 Hello, all. this is S6E63M0 AMOLED LCD Panel(480x800) driver using 3-wired SPI interface also almost features for lcd panel driver has been implemented in here. and I added new structure common for all the lcd panel drivers to include/linux/lcd.h file. the contents are as following. - LCD Panel driver needs interfaces for controlling device power such as power on/off and reset. these interfaces are device specific so it should be implemented to machine code at this time, we should create new structure for registering these functions as callbacks and also a header file for that structure and finally registered callback functions would be called by lcd panel driver. such header file(including new structure for lcd panel) would be added for all the lcd panel drivers. If anyone provides common structure for registering such callback functions then we could reduce unnecessary header files for lcd panel. I thought that suitable anyone could be include/linux/lcd.h I added new structure to lcd.h like following, struct lcd_platform_data { /* reset lcd panel device. */ int (*reset)(struct lcd_device *ld); /* on or off to lcd panel. if 'enable' is 0 then lcd power off and 1, lcd power on. */ int (*power_on)(struct lcd_device *ld, int enable); /* it indicates whether lcd panel was enabled from bootloader or not. */ int lcd_enabled; /* it means delay for stable time when it becomes low to high or high to low that is dependent on whether reset gpio is low active or high active. */ unsigned int reset_delay; /* stable time needing to become lcd power on. */ unsigned int power_on_delay; /* stable time needing to become lcd power off. */ unsigned int power_off_delay; /* it could be used for any purpose. */ void *pdata; }; Please review this patch and lcd panel driver. Signed-off-by: InKi Dae Reviewed-by: KyungMin Park Best Regards, InKi Dae. --001485f8137436f5610482abb3f6 Content-Type: application/octet-stream; name="s6e63m0.patch" Content-Disposition: attachment; filename="s6e63m0.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g78fd3f41 ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3Zp ZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IGMwMjVjODQuLjRkMjgwYWEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNr bGlnaHQvS2NvbmZpZwpAQCAtMTA3LDYgKzEwNywxMiBAQCBjb25maWcgTENEX0hQNzAwCiAJICBJ ZiB5b3UgaGF2ZSBhbiBIUCBKb3JuYWRhIDcwMCBzZXJpZXMgaGFuZGhlbGQgKDcxMC83MjAvNzI4 KQogCSAgc2F5IFkgdG8gZW5hYmxlIExDRCBjb250cm9sIGRyaXZlci4KIAorY29uZmlnIExDRF9T NkU2M00wCisJdHJpc3RhdGUgIlM2RTYzTTAgQU1PTEVEIExDRCBEcml2ZXIiCisJZGVwZW5kcyBv biBMQ0RfQ0xBU1NfREVWSUNFICYmIFNQSQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIElmIHlvdSBo YXZlIGFuIFM2RTYzTTAgTENEIFBhbmVsIHNheSBZIHRvIGVuYWJsZSBMQ0QgY29udHJvbCBkcml2 ZXIKICMKICMgQmFja2xpZ2h0CiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdo dC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IDA5ZDFm MTQuLmExZjc3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxl CisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBA IG9iai0kKENPTkZJR19MQ0RfUExBVEZPUk0pCSAgICs9IHBsYXRmb3JtX2xjZC5vCiBvYmotJChD T05GSUdfTENEX1ZHRzI0MzJBNCkJICAgKz0gdmdnMjQzMmE0Lm8KIG9iai0kKENPTkZJR19MQ0Rf VERPMjRNKQkgICArPSB0ZG8yNG0ubwogb2JqLSQoQ09ORklHX0xDRF9UT1NBKQkJICAgKz0gdG9z YV9sY2Qubworb2JqLSQoQ09ORklHX0xDRF9TNkU2M00wKQkrPSBzNmU2M20wLm8KIAogb2JqLSQo Q09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UpICs9IGJhY2tsaWdodC5vCiBvYmotJChDT05G SUdfQkFDS0xJR0hUX0FUTUVMX1BXTSkgICAgKz0gYXRtZWwtcHdtLWJsLm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTAuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xp Z2h0L3M2ZTYzbTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDc5M2Rm Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvczZlNjNtMC5jCkBA IC0wLDAgKzEsODg0IEBACisvKgorICogUzZFNjNNMCBBTU9MRUQgTENEIHBhbmVsIGRyaXZlci4K KyAqCisgKiBBdXRob3I6IEluS2kgRGFlICA8aW5raS5kYWVAc2Ftc3VuZy5jb20+CisgKgorICog RGVyaXZlZCBmcm9tIGRyaXZlcnMvdmlkZW8vb21hcC9sY2QtYXBvbGxvbi5jCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlIC0gU3Vp dGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4K KyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KKyNpbmNsdWRl IDxsaW51eC9iYWNrbGlnaHQuaD4KKworI2luY2x1ZGUgInM2ZTYzbTBfZ2FtbWEuaCIKKworI2Rl ZmluZSBTTEVFUE1TRUMJCTB4MTAwMAorI2RlZmluZSBFTkRERUYJCQkweDIwMDAKKyNkZWZpbmUJ REVGTUFTSwkJCTB4RkYwMAorI2RlZmluZSBDT01NQU5EX09OTFkJCTB4RkUKKyNkZWZpbmUgREFU QV9PTkxZCQkweEZGCisKKyNkZWZpbmUgTUlOX0JSSUdIVE5FU1MJCTAKKyNkZWZpbmUgTUFYX0JS SUdIVE5FU1MJCTEwCisKKyNkZWZpbmUgUE9XRVJfSVNfT04ocHdyKQkoKHB3cikgPD0gRkJfQkxB TktfTk9STUFMKQorCitzdHJ1Y3QgczZlNjNtMCB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJ c3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJdW5zaWduZWQgaW50CQkJcG93ZXI7CisJdW5zaWdu ZWQgaW50CQkJY3VycmVudF9icmlnaHRuZXNzOworCXVuc2lnbmVkIGludAkJCWdhbW1hX21vZGU7 CisJdW5zaWduZWQgaW50CQkJZ2FtbWFfdGFibGVfY291bnQ7CisJc3RydWN0IGxjZF9kZXZpY2UJ CSpsZDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZQkJKmJkOworCXN0cnVjdCBsY2RfcGxhdGZv cm1fZGF0YQkqbGNkX3BkOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNFUV9Q QU5FTF9DT05ESVRJT05fU0VUW10gPSB7CisJMHhGOCwgMHgwMSwKKwlEQVRBX09OTFksIDB4Mjcs CisJREFUQV9PTkxZLCAweDI3LAorCURBVEFfT05MWSwgMHgwNywKKwlEQVRBX09OTFksIDB4MDcs CisJREFUQV9PTkxZLCAweDU0LAorCURBVEFfT05MWSwgMHg5ZiwKKwlEQVRBX09OTFksIDB4NjMs CisJREFUQV9PTkxZLCAweDg2LAorCURBVEFfT05MWSwgMHgxYSwKKwlEQVRBX09OTFksIDB4MzMs CisJREFUQV9PTkxZLCAweDBkLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAs CisKKwlFTkRERUYsIDB4MDAwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNF UV9ESVNQTEFZX0NPTkRJVElPTl9TRVRbXSA9IHsKKwkweGYyLCAweDAyLAorCURBVEFfT05MWSwg MHgwMywKKwlEQVRBX09OTFksIDB4MWMsCisJREFUQV9PTkxZLCAweDEwLAorCURBVEFfT05MWSwg MHgxMCwKKworCTB4ZjcsIDB4MDMsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgw MCwKKworCUVORERFRiwgMHgwMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg U0VRX0dBTU1BX1NFVFRJTkdbXSA9IHsKKwkweGZhLCAweDAwLAorCURBVEFfT05MWSwgMHgxOCwK KwlEQVRBX09OTFksIDB4MDgsCisJREFUQV9PTkxZLCAweDI0LAorCURBVEFfT05MWSwgMHg2NCwK KwlEQVRBX09OTFksIDB4NTYsCisJREFUQV9PTkxZLCAweDMzLAorCURBVEFfT05MWSwgMHhiNiwK KwlEQVRBX09OTFksIDB4YmEsCisJREFUQV9PTkxZLCAweGE4LAorCURBVEFfT05MWSwgMHhhYywK KwlEQVRBX09OTFksIDB4YjEsCisJREFUQV9PTkxZLCAweDlkLAorCURBVEFfT05MWSwgMHhjMSwK KwlEQVRBX09OTFksIDB4YzEsCisJREFUQV9PTkxZLCAweGI3LAorCURBVEFfT05MWSwgMHgwMCwK KwlEQVRBX09OTFksIDB4OWMsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHg5ZiwK KwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAweGQ2LAorCisJMHhmYSwgMHgwMSwKKwor CUVORERFRiwgMHgwMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgU0VRX0VU Q19DT05ESVRJT05fU0VUW10gPSB7CisJMHhmNiwgMHgwMCwKKwlEQVRBX09OTFksIDB4OGMsCisJ REFUQV9PTkxZLCAweDA3LAorCisJMHhiMywgMHhjLAorCisJMHhiNSwgMHgyYywKKwlEQVRBX09O TFksIDB4MTIsCisJREFUQV9PTkxZLCAweDBjLAorCURBVEFfT05MWSwgMHgwYSwKKwlEQVRBX09O TFksIDB4MTAsCisJREFUQV9PTkxZLCAweDBlLAorCURBVEFfT05MWSwgMHgxNywKKwlEQVRBX09O TFksIDB4MTMsCisJREFUQV9PTkxZLCAweDFmLAorCURBVEFfT05MWSwgMHgxYSwKKwlEQVRBX09O TFksIDB4MmEsCisJREFUQV9PTkxZLCAweDI0LAorCURBVEFfT05MWSwgMHgxZiwKKwlEQVRBX09O TFksIDB4MWIsCisJREFUQV9PTkxZLCAweDFhLAorCURBVEFfT05MWSwgMHgxNywKKworCURBVEFf T05MWSwgMHgyYiwKKwlEQVRBX09OTFksIDB4MjYsCisJREFUQV9PTkxZLCAweDIyLAorCURBVEFf T05MWSwgMHgyMCwKKwlEQVRBX09OTFksIDB4M2EsCisJREFUQV9PTkxZLCAweDM0LAorCURBVEFf T05MWSwgMHgzMCwKKwlEQVRBX09OTFksIDB4MmMsCisJREFUQV9PTkxZLCAweDI5LAorCURBVEFf T05MWSwgMHgyNiwKKwlEQVRBX09OTFksIDB4MjUsCisJREFUQV9PTkxZLCAweDIzLAorCURBVEFf T05MWSwgMHgyMSwKKwlEQVRBX09OTFksIDB4MjAsCisJREFUQV9PTkxZLCAweDFlLAorCURBVEFf T05MWSwgMHgxZSwKKworCTB4YjYsIDB4MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05M WSwgMHgxMSwKKwlEQVRBX09OTFksIDB4MjIsCisJREFUQV9PTkxZLCAweDMzLAorCURBVEFfT05M WSwgMHg0NCwKKwlEQVRBX09OTFksIDB4NDQsCisJREFUQV9PTkxZLCAweDQ0LAorCisJREFUQV9P TkxZLCAweDU1LAorCURBVEFfT05MWSwgMHg1NSwKKwlEQVRBX09OTFksIDB4NjYsCisJREFUQV9P TkxZLCAweDY2LAorCURBVEFfT05MWSwgMHg2NiwKKwlEQVRBX09OTFksIDB4NjYsCisJREFUQV9P TkxZLCAweDY2LAorCURBVEFfT05MWSwgMHg2NiwKKworCTB4YjcsIDB4MmMsCisJREFUQV9PTkxZ LCAweDEyLAorCURBVEFfT05MWSwgMHgwYywKKwlEQVRBX09OTFksIDB4MGEsCisJREFUQV9PTkxZ LCAweDEwLAorCURBVEFfT05MWSwgMHgwZSwKKwlEQVRBX09OTFksIDB4MTcsCisJREFUQV9PTkxZ LCAweDEzLAorCURBVEFfT05MWSwgMHgxZiwKKwlEQVRBX09OTFksIDB4MWEsCisJREFUQV9PTkxZ LCAweDJhLAorCURBVEFfT05MWSwgMHgyNCwKKwlEQVRBX09OTFksIDB4MWYsCisJREFUQV9PTkxZ LCAweDFiLAorCURBVEFfT05MWSwgMHgxYSwKKwlEQVRBX09OTFksIDB4MTcsCisKKwlEQVRBX09O TFksIDB4MmIsCisJREFUQV9PTkxZLCAweDI2LAorCURBVEFfT05MWSwgMHgyMiwKKwlEQVRBX09O TFksIDB4MjAsCisJREFUQV9PTkxZLCAweDNhLAorCURBVEFfT05MWSwgMHgzNCwKKwlEQVRBX09O TFksIDB4MzAsCisJREFUQV9PTkxZLCAweDJjLAorCURBVEFfT05MWSwgMHgyOSwKKwlEQVRBX09O TFksIDB4MjYsCisJREFUQV9PTkxZLCAweDI1LAorCURBVEFfT05MWSwgMHgyMywKKwlEQVRBX09O TFksIDB4MjEsCisJREFUQV9PTkxZLCAweDIwLAorCURBVEFfT05MWSwgMHgxZSwKKwlEQVRBX09O TFksIDB4MWUsCisKKwkweGI4LCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFks IDB4MTEsCisJREFUQV9PTkxZLCAweDIyLAorCURBVEFfT05MWSwgMHgzMywKKwlEQVRBX09OTFks IDB4NDQsCisJREFUQV9PTkxZLCAweDQ0LAorCURBVEFfT05MWSwgMHg0NCwKKworCURBVEFfT05M WSwgMHg1NSwKKwlEQVRBX09OTFksIDB4NTUsCisJREFUQV9PTkxZLCAweDY2LAorCURBVEFfT05M WSwgMHg2NiwKKwlEQVRBX09OTFksIDB4NjYsCisJREFUQV9PTkxZLCAweDY2LAorCURBVEFfT05M WSwgMHg2NiwKKwlEQVRBX09OTFksIDB4NjYsCisKKwkweGI5LCAweDJjLAorCURBVEFfT05MWSwg MHgxMiwKKwlEQVRBX09OTFksIDB4MGMsCisJREFUQV9PTkxZLCAweDBhLAorCURBVEFfT05MWSwg MHgxMCwKKwlEQVRBX09OTFksIDB4MGUsCisJREFUQV9PTkxZLCAweDE3LAorCURBVEFfT05MWSwg MHgxMywKKwlEQVRBX09OTFksIDB4MWYsCisJREFUQV9PTkxZLCAweDFhLAorCURBVEFfT05MWSwg MHgyYSwKKwlEQVRBX09OTFksIDB4MjQsCisJREFUQV9PTkxZLCAweDFmLAorCURBVEFfT05MWSwg MHgxYiwKKwlEQVRBX09OTFksIDB4MWEsCisJREFUQV9PTkxZLCAweDE3LAorCisJREFUQV9PTkxZ LCAweDJiLAorCURBVEFfT05MWSwgMHgyNiwKKwlEQVRBX09OTFksIDB4MjIsCisJREFUQV9PTkxZ LCAweDIwLAorCURBVEFfT05MWSwgMHgzYSwKKwlEQVRBX09OTFksIDB4MzQsCisJREFUQV9PTkxZ LCAweDMwLAorCURBVEFfT05MWSwgMHgyYywKKwlEQVRBX09OTFksIDB4MjksCisJREFUQV9PTkxZ LCAweDI2LAorCURBVEFfT05MWSwgMHgyNSwKKwlEQVRBX09OTFksIDB4MjMsCisJREFUQV9PTkxZ LCAweDIxLAorCURBVEFfT05MWSwgMHgyMCwKKwlEQVRBX09OTFksIDB4MWUsCisJREFUQV9PTkxZ LCAweDFlLAorCisJMHhiYSwgMHgwMCwKKwlEQVRBX09OTFksIDB4MDAsCisJREFUQV9PTkxZLCAw eDExLAorCURBVEFfT05MWSwgMHgyMiwKKwlEQVRBX09OTFksIDB4MzMsCisJREFUQV9PTkxZLCAw eDQ0LAorCURBVEFfT05MWSwgMHg0NCwKKwlEQVRBX09OTFksIDB4NDQsCisKKwlEQVRBX09OTFks IDB4NTUsCisJREFUQV9PTkxZLCAweDU1LAorCURBVEFfT05MWSwgMHg2NiwKKwlEQVRBX09OTFks IDB4NjYsCisJREFUQV9PTkxZLCAweDY2LAorCURBVEFfT05MWSwgMHg2NiwKKwlEQVRBX09OTFks IDB4NjYsCisJREFUQV9PTkxZLCAweDY2LAorCisJMHhjMSwgMHg0ZCwKKwlEQVRBX09OTFksIDB4 OTYsCisJREFUQV9PTkxZLCAweDFkLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4 MDAsCisJREFUQV9PTkxZLCAweDAxLAorCURBVEFfT05MWSwgMHhkZiwKKwlEQVRBX09OTFksIDB4 MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMywKKwlEQVRBX09OTFksIDB4 MWYsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4 MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4 MDAsCisJREFUQV9PTkxZLCAweDAwLAorCURBVEFfT05MWSwgMHgwMCwKKwlEQVRBX09OTFksIDB4 MDMsCisJREFUQV9PTkxZLCAweDA2LAorCURBVEFfT05MWSwgMHgwOSwKKwlEQVRBX09OTFksIDB4 MGQsCisJREFUQV9PTkxZLCAweDBmLAorCURBVEFfT05MWSwgMHgxMiwKKwlEQVRBX09OTFksIDB4 MTUsCisJREFUQV9PTkxZLCAweDE4LAorCisJMHhiMiwgMHgxMCwKKwlEQVRBX09OTFksIDB4MTAs CisJREFUQV9PTkxZLCAweDBiLAorCURBVEFfT05MWSwgMHgwNSwKKworCUVORERFRiwgMHgwMDAw Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgU0VRX0FDTF9PTltdID0geworCS8q IEFDTCBvbiAqLworCTB4YzAsIDB4MDEsCisKKwlFTkRERUYsIDB4MDAwMAorfTsKKworc3RhdGlj IGNvbnN0IHVuc2lnbmVkIHNob3J0IFNFUV9BQ0xfT0ZGW10gPSB7CisJLyogQUNMIG9mZiAqLwor CTB4YzAsIDB4MDAsCisKKwlFTkRERUYsIDB4MDAwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2ln bmVkIHNob3J0IFNFUV9FTFZTU19PTltdID0geworCS8qIEVMVlNTIG9uICovCisJMHhiMSwgMHgw YiwKKworCUVORERFRiwgMHgwMDAwCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg U0VRX0VMVlNTX09GRltdID0geworCS8qIEVMVlNTIG9mZiAqLworCTB4YjEsIDB4MGEsCisKKwlF TkRERUYsIDB4MDAwMAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNFUV9TVEFO RF9CWV9PRkZbXSA9IHsKKwkweDExLCBDT01NQU5EX09OTFksCisKKwlFTkRERUYsIDB4MDAwMAor fTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNFUV9TVEFORF9CWV9PTltdID0gewor CTB4MTAsIENPTU1BTkRfT05MWSwKKworCUVORERFRiwgMHgwMDAwCit9OworCitzdGF0aWMgY29u c3QgdW5zaWduZWQgc2hvcnQgU0VRX0RJU1BMQVlfT05bXSA9IHsKKwkweDI5LCBDT01NQU5EX09O TFksCisKKwlFTkRERUYsIDB4MDAwMAorfTsKKworCitzdGF0aWMgaW50IHM2ZTYzbTBfc3BpX3dy aXRlX2J5dGUoc3RydWN0IHM2ZTYzbTAgKmxjZCwgaW50IGFkZHIsIGludCBkYXRhKQoreworCXUx NiBidWZbMV07CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKworCXN0cnVjdCBzcGlfdHJhbnNm ZXIgeGZlciA9IHsKKwkJLmxlbgkJPSAyLAorCQkudHhfYnVmCQk9IGJ1ZiwKKwl9OworCisJYnVm WzBdID0gKGFkZHIgPDwgOCkgfCBkYXRhOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlz cGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7CisKKwlyZXR1cm4gc3BpX3N5bmMobGNk LT5zcGksICZtc2cpOworfQorCitzdGF0aWMgaW50IHM2ZTYzbTBfc3BpX3dyaXRlKHN0cnVjdCBz NmU2M20wICpsY2QsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcywKKwl1bnNpZ25lZCBjaGFyIGNvbW1h bmQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoYWRkcmVzcyAhPSBEQVRBX09OTFkpCisJCXJl dCA9IHM2ZTYzbTBfc3BpX3dyaXRlX2J5dGUobGNkLCAweDAsIGFkZHJlc3MpOworCWlmIChjb21t YW5kICE9IENPTU1BTkRfT05MWSkKKwkJcmV0ID0gczZlNjNtMF9zcGlfd3JpdGVfYnl0ZShsY2Qs IDB4MSwgY29tbWFuZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHM2ZTYzbTBf cGFuZWxfc2VuZF9zZXF1ZW5jZShzdHJ1Y3QgczZlNjNtMCAqbGNkLAorCWNvbnN0IHVuc2lnbmVk IHNob3J0ICp3YnVmKQoreworCWludCByZXQgPSAwLCBpID0gMDsKKworCXdoaWxlICgod2J1Zltp XSAmIERFRk1BU0spICE9IEVORERFRikgeworCQlpZiAoKHdidWZbaV0gJiBERUZNQVNLKSAhPSBT TEVFUE1TRUMpIHsKKwkJCXJldCA9IHM2ZTYzbTBfc3BpX3dyaXRlKGxjZCwgd2J1ZltpXSwgd2J1 ZltpKzFdKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJdWRlbGF5KHdi dWZbaSsxXSoxMDAwKTsKKwkJaSArPSAyOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgX3M2ZTYzbTBfZ2FtbWFfY3RsKHN0cnVjdCBzNmU2M20wICpsY2QsIGNvbnN0IHVuc2ln bmVkIGludCAqZ2FtbWEpCit7CisJdW5zaWduZWQgaW50IGkgPSAwOworCWludCByZXQgPSAwOwor CisJLyogZGlzYWJsZSBnYW1tYSB0YWJsZSB1cGRhdGluZy4gKi8KKwlyZXQgPSBzNmU2M20wX3Nw aV93cml0ZShsY2QsIDB4ZmEsIDB4MDApOworCisJZm9yIChpID0gMCA7IGkgPCBHQU1NQV9UQUJM RV9DT1VOVDsgaSsrKQorCQlyZXQgfD0gczZlNjNtMF9zcGlfd3JpdGUobGNkLCBEQVRBX09OTFks IGdhbW1hW2ldKTsKKworCS8qIHVwZGF0ZSBnYW1tYSB0YWJsZS4gKi8KKwlyZXQgfD0gczZlNjNt MF9zcGlfd3JpdGUobGNkLCAweGZhLCAweDAxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgczZlNjNtMF9nYW1tYV9jdGwoc3RydWN0IHM2ZTYzbTAgKmxjZCwgaW50IGdhbW1hKQor eworCWludCByZXQgPSAwOworCisJcmV0ID0gX3M2ZTYzbTBfZ2FtbWFfY3RsKGxjZCwgZ2FtbWFf dGFibGUuZ2FtbWFfMjJfdGFibGVbZ2FtbWFdKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3Rh dGljIGludCBzNmU2M20wX2xkaV9pbml0KHN0cnVjdCBzNmU2M20wICpsY2QpCit7CisJaW50IHJl dDsKKworCXJldCA9IHM2ZTYzbTBfcGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIFNFUV9QQU5FTF9D T05ESVRJT05fU0VUKTsKKwlyZXQgfD0gczZlNjNtMF9wYW5lbF9zZW5kX3NlcXVlbmNlKGxjZCwg U0VRX0RJU1BMQVlfQ09ORElUSU9OX1NFVCk7CisJcmV0IHw9IHM2ZTYzbTBfcGFuZWxfc2VuZF9z ZXF1ZW5jZShsY2QsIFNFUV9HQU1NQV9TRVRUSU5HKTsKKwlyZXQgfD0gczZlNjNtMF9wYW5lbF9z ZW5kX3NlcXVlbmNlKGxjZCwgU0VRX0VUQ19DT05ESVRJT05fU0VUKTsKKwlyZXQgfD0gczZlNjNt MF9wYW5lbF9zZW5kX3NlcXVlbmNlKGxjZCwgU0VRX0FDTF9PTik7CisJcmV0IHw9IHM2ZTYzbTBf cGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIFNFUV9FTFZTU19PTik7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHM2ZTYzbTBfbGRpX2VuYWJsZShzdHJ1Y3QgczZlNjNtMCAqbGNkKQor eworCWludCByZXQgPSAwOworCisJcmV0ID0gczZlNjNtMF9wYW5lbF9zZW5kX3NlcXVlbmNlKGxj ZCwgU0VRX1NUQU5EX0JZX09GRik7CisJcmV0ID0gczZlNjNtMF9wYW5lbF9zZW5kX3NlcXVlbmNl KGxjZCwgU0VRX0RJU1BMQVlfT04pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBz NmU2M20wX2xkaV9kaXNhYmxlKHN0cnVjdCBzNmU2M20wICpsY2QpCit7CisJaW50IHJldDsKKwor CXJldCA9IHM2ZTYzbTBfcGFuZWxfc2VuZF9zZXF1ZW5jZShsY2QsIFNFUV9TVEFORF9CWV9PTik7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHM2ZTYzbTBfcG93ZXJfb24oc3RydWN0 IHM2ZTYzbTAgKmxjZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGNkX3BsYXRmb3JtX2Rh dGEgKnBkID0gTlVMTDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBOVUxMOworCisJ cGQgPSBsY2QtPmxjZF9wZDsKKwlpZiAoIXBkKSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJwbGF0 Zm9ybSBkYXRhIGlzIE5VTEwuXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJYmQgPSBs Y2QtPmJkOworCWlmICghYmQpIHsKKwkJZGV2X2VycihsY2QtPmRldiwgImJhY2tsaWdodCBkZXZp Y2UgaXMgTlVMTC5cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAoIXBkLT5wb3dl cl9vbikgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAicG93ZXJfb24gaXMgTlVMTC5cbiIpOworCQly ZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlwZC0+cG93ZXJfb24obGNkLT5sZCwgMSk7CisJ CW1kZWxheShwZC0+cG93ZXJfb25fZGVsYXkpOworCX0KKworCWlmICghcGQtPnJlc2V0KSB7CisJ CWRldl9lcnIobGNkLT5kZXYsICJyZXNldCBpcyBOVUxMLlxuIik7CisJCXJldHVybiAtRUZBVUxU OworCX0gZWxzZSB7CisJCXBkLT5yZXNldChsY2QtPmxkKTsKKwkJbWRlbGF5KHBkLT5yZXNldF9k ZWxheSk7CisJfQorCisJcmV0ID0gczZlNjNtMF9sZGlfaW5pdChsY2QpOworCXJldCB8PSBzNmU2 M20wX2xkaV9lbmFibGUobGNkKTsKKwkvKiBzZXQgYnJpZ2h0bmVzcyB0byBjdXJyZW50IHZhbHVl IGFmdGVyIHBvd2VyIG9uIG9yIHJlc3VtZS4gKi8KKwlyZXQgfD0gczZlNjNtMF9nYW1tYV9jdGwo bGNkLCBiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGxjZC0+ ZGV2LCAibGNkIGdhbW1hIHNldHRpbmcgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlPOworCX0K KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM2ZTYzbTBfcG93ZXJfb2ZmKHN0cnVjdCBz NmU2M20wICpsY2QpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxjZF9wbGF0Zm9ybV9kYXRh ICpwZCA9IE5VTEw7CisKKwlwZCA9IGxjZC0+bGNkX3BkOworCWlmICghcGQpIHsKKwkJZGV2X2Vy cihsY2QtPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgTlVMTC5cbiIpOworCQlyZXR1cm4gLUVGQVVM VDsKKwl9CisKKwlyZXQgPSBzNmU2M20wX2xkaV9kaXNhYmxlKGxjZCk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGxjZC0+ZGV2LCAibGNkIHNldHRpbmcgZmFpbGVkLlxuIik7CisJCXJldHVybiAt RUlPOworCX0KKworCW1kZWxheShwZC0+cG93ZXJfb2ZmX2RlbGF5KTsKKworCWlmICghcGQtPnBv d2VyX29uKSB7CisJCWRldl9lcnIobGNkLT5kZXYsICJwb3dlcl9vbiBpcyBOVUxMLlxuIik7CisJ CXJldHVybiAtRUZBVUxUOworCX0gZWxzZQorCQlwZC0+cG93ZXJfb24obGNkLT5sZCwgMCk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNmU2M20wX3Bvd2VyKHN0cnVjdCBzNmU2M20w ICpsY2QsIGludCBwb3dlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChQT1dFUl9JU19PTihw b3dlcikgJiYgIVBPV0VSX0lTX09OKGxjZC0+cG93ZXIpKQorCQlyZXQgPSBzNmU2M20wX3Bvd2Vy X29uKGxjZCk7CisJZWxzZSBpZiAoIVBPV0VSX0lTX09OKHBvd2VyKSAmJiBQT1dFUl9JU19PTihs Y2QtPnBvd2VyKSkKKwkJcmV0ID0gczZlNjNtMF9wb3dlcl9vZmYobGNkKTsKKworCWlmICghcmV0 KQorCQlsY2QtPnBvd2VyID0gcG93ZXI7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHM2ZTYzbTBfc2V0X3Bvd2VyKHN0cnVjdCBsY2RfZGV2aWNlICpsZCwgaW50IHBvd2VyKQorewor CXN0cnVjdCBzNmU2M20wICpsY2QgPSBsY2RfZ2V0X2RhdGEobGQpOworCisJaWYgKHBvd2VyICE9 IEZCX0JMQU5LX1VOQkxBTksgJiYgcG93ZXIgIT0gRkJfQkxBTktfUE9XRVJET1dOICYmCisJCXBv d2VyICE9IEZCX0JMQU5LX05PUk1BTCkgeworCQlkZXZfZXJyKGxjZC0+ZGV2LCAicG93ZXIgdmFs dWUgc2hvdWxkIGJlIDAsIDEgb3IgNC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gczZlNjNtMF9wb3dlcihsY2QsIHBvd2VyKTsKK30KKworc3RhdGljIGludCBzNmU2M20w X2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCit7CisJc3RydWN0IHM2ZTYzbTAgKmxj ZCA9IGxjZF9nZXRfZGF0YShsZCk7CisKKwlyZXR1cm4gbGNkLT5wb3dlcjsKK30KKworc3RhdGlj IGludCBzNmU2M20wX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkK K3sKKwlyZXR1cm4gYmQtPnByb3BzLmJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNt MF9zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7CisJaW50IHJl dCA9IDAsIGJyaWdodG5lc3MgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlzdHJ1Y3QgczZlNjNt MCAqbGNkID0gYmxfZ2V0X2RhdGEoYmQpOworCisJaWYgKGJyaWdodG5lc3MgPCBNSU5fQlJJR0hU TkVTUyB8fAorCQlicmlnaHRuZXNzID4gYmQtPnByb3BzLm1heF9icmlnaHRuZXNzKSB7CisJCWRl dl9lcnIoJmJkLT5kZXYsICJsY2QgYnJpZ2h0bmVzcyBzaG91bGQgYmUgJWQgdG8gJWQuXG4iLAor CQkJTUlOX0JSSUdIVE5FU1MsIE1BWF9CUklHSFRORVNTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcmV0ID0gczZlNjNtMF9nYW1tYV9jdGwobGNkLCBiZC0+cHJvcHMuYnJpZ2h0bmVzcyk7 CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZiZC0+ZGV2LCAibGNkIGJyaWdodG5lc3Mgc2V0dGlu ZyBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIHN0cnVjdCBsY2Rfb3BzIHM2ZTYzbTBfbGNkX29wcyA9IHsKKwkuc2V0X3Bvd2VyID0g czZlNjNtMF9zZXRfcG93ZXIsCisJLmdldF9wb3dlciA9IHM2ZTYzbTBfZ2V0X3Bvd2VyLAorfTsK Kworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHM2ZTYzbTBfYmFja2xpZ2h0X29wcyAgPSB7 CisJLmdldF9icmlnaHRuZXNzID0gczZlNjNtMF9nZXRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0 YXR1cyA9IHM2ZTYzbTBfc2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IHM2ZTYzbTBf c3lzZnNfc2hvd19nYW1tYV9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzNmU2M20w ICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyIHRlbXBbMTBdOworCisJc3dpdGNo IChsY2QtPmdhbW1hX21vZGUpIHsKKwljYXNlIDA6CisJCXNwcmludGYodGVtcCwgIjIuMiBtb2Rl XG4iKTsKKwkJc3RyY2F0KGJ1ZiwgdGVtcCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJc3ByaW50 Zih0ZW1wLCAiMS45IG1vZGVcbiIpOworCQlzdHJjYXQoYnVmLCB0ZW1wKTsKKwkJYnJlYWs7CisJ Y2FzZSAyOgorCQlzcHJpbnRmKHRlbXAsICIxLjcgbW9kZVxuIik7CisJCXN0cmNhdChidWYsIHRl bXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfaW5mbyhkZXYsICJnYW1tYSBtb2RlIGNv dWxkIGJlIDA6Mi4yLCAxOjEuOSBvciAyOjEuNyluIik7CisJCWJyZWFrOworCX0KKworCXJldHVy biBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIGludCBzNmU2M20wX3N5c2ZzX3N0b3JlX2dhbW1h X21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorewor CXN0cnVjdCBzNmU2M20wICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYmFj a2xpZ2h0X2RldmljZSAqYmQgPSBOVUxMOworCWludCBicmlnaHRuZXNzLCByYzsKKworCXJjID0g c3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAodW5zaWduZWQgbG9uZyAqKSZsY2QtPmdhbW1hX21vZGUp OworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWJkID0gbGNkLT5iZDsKKworCWJyaWdo dG5lc3MgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCXN3aXRjaCAobGNkLT5nYW1tYV9tb2Rl KSB7CisJY2FzZSAwOgorCQlfczZlNjNtMF9nYW1tYV9jdGwobGNkLCBnYW1tYV90YWJsZS5nYW1t YV8yMl90YWJsZVticmlnaHRuZXNzXSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJX3M2ZTYzbTBf Z2FtbWFfY3RsKGxjZCwgZ2FtbWFfdGFibGUuZ2FtbWFfMTlfdGFibGVbYnJpZ2h0bmVzc10pOwor CQlicmVhazsKKwljYXNlIDI6CisJCV9zNmU2M20wX2dhbW1hX2N0bChsY2QsIGdhbW1hX3RhYmxl LmdhbW1hXzE3X3RhYmxlW2JyaWdodG5lc3NdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2 X2luZm8oZGV2LCAiZ2FtbWEgbW9kZSBjb3VsZCBiZSAwOjIuMiwgMToxLjkgb3IgMjoxLjdcbiIp OworCQlfczZlNjNtMF9nYW1tYV9jdGwobGNkLCBnYW1tYV90YWJsZS5nYW1tYV8yMl90YWJsZVti cmlnaHRuZXNzXSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgREVW SUNFX0FUVFIoZ2FtbWFfbW9kZSwgMDY0NCwKKwkJczZlNjNtMF9zeXNmc19zaG93X2dhbW1hX21v ZGUsIHM2ZTYzbTBfc3lzZnNfc3RvcmVfZ2FtbWFfbW9kZSk7CisKK3N0YXRpYyBpbnQgczZlNjNt MF9zeXNmc19zaG93X2dhbW1hX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzNmU2 M20wICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljaGFyIHRlbXBbM107CisKKwlzcHJp bnRmKHRlbXAsICIlZFxuIiwgbGNkLT5nYW1tYV90YWJsZV9jb3VudCk7CisJc3RyY3B5KGJ1Ziwg dGVtcCk7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZ2Ft bWFfdGFibGUsIDA2NDQsCisJCXM2ZTYzbTBfc3lzZnNfc2hvd19nYW1tYV90YWJsZSwgTlVMTCk7 CisKK3N0YXRpYyBpbnQgX19pbml0IHM2ZTYzbTBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNw aSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgczZlNjNtMCAqbGNkID0gTlVMTDsKKwlzdHJ1 Y3QgbGNkX2RldmljZSAqbGQgPSBOVUxMOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9 IE5VTEw7CisKKwlsY2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczZlNjNtMCksIEdGUF9LRVJO RUwpOworCWlmICghbGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHM2ZTYzbTAgbGNkIHBh bmVsIHVzZXMgMy13aXJlIDliaXRzIFNQSSBNb2RlLiAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9 IDk7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KCZzcGktPmRldiwgInNwaSBzZXR1cCBmYWlsZWQuXG4iKTsKKwkJZ290byBvdXRfZnJlZV9sY2Q7 CisJfQorCisJbGNkLT5zcGkgPSBzcGk7CisJbGNkLT5kZXYgPSAmc3BpLT5kZXY7CisKKwlsY2Qt PmxjZF9wZCA9IChzdHJ1Y3QgbGNkX3BsYXRmb3JtX2RhdGEgKilzcGktPmRldi5wbGF0Zm9ybV9k YXRhOworCWlmICghbGNkLT5sY2RfcGQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJwbGF0Zm9y bSBkYXRhIGlzIE5VTEwuXG4iKTsKKwkJZ290byBvdXRfZnJlZV9sY2Q7CisJfQorCisJbGQgPSBs Y2RfZGV2aWNlX3JlZ2lzdGVyKCJzNmU2M20wIiwgJnNwaS0+ZGV2LCBsY2QsICZzNmU2M20wX2xj ZF9vcHMpOworCWlmIChJU19FUlIobGQpKSB7CisJCXJldCA9IFBUUl9FUlIobGQpOworCQlnb3Rv IG91dF9mcmVlX2xjZDsKKwl9CisKKwlsY2QtPmxkID0gbGQ7CisKKwliZCA9IGJhY2tsaWdodF9k ZXZpY2VfcmVnaXN0ZXIoInM2ZTYzbTBibC1ibCIsICZzcGktPmRldiwgbGNkLAorCQkmczZlNjNt MF9iYWNrbGlnaHRfb3BzLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGJkKSkgeworCQlyZXQgPSAgUFRS X0VSUihiZCk7CisJCWdvdG8gb3V0X2xjZF91bnJlZ2lzdGVyOworCX0KKworCWJkLT5wcm9wcy5t YXhfYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCWJkLT5wcm9wcy5icmlnaHRuZXNzID0g TUFYX0JSSUdIVE5FU1M7CisJbGNkLT5iZCA9IGJkOworCisJLyoKKwkgKiBpdCBnZXRzIGdhbW1h IHRhYmxlIGNvdW50IGF2YWlsYWJsZSBzbyBpdCBnZXRzIHVzZXIKKwkgKiBrbm93IHRoYXQuCisJ ICovCisJbGNkLT5nYW1tYV90YWJsZV9jb3VudCA9CisJICAgIHNpemVvZihnYW1tYV90YWJsZSkg LyAoTUFYX0dBTU1BX0xFVkVMICogc2l6ZW9mKGludCkpOworCisJcmV0ID0gZGV2aWNlX2NyZWF0 ZV9maWxlKCYoc3BpLT5kZXYpLCAmZGV2X2F0dHJfZ2FtbWFfbW9kZSk7CisJaWYgKHJldCA8IDAp CisJCWRldl9lcnIoJihzcGktPmRldiksICJmYWlsZWQgdG8gYWRkIHN5c2ZzIGVudHJpZXNcbiIp OworCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCYoc3BpLT5kZXYpLCAmZGV2X2F0dHJfZ2Ft bWFfdGFibGUpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKCYoc3BpLT5kZXYpLCAiZmFpbGVk IHRvIGFkZCBzeXNmcyBlbnRyaWVzXG4iKTsKKworCS8qCisJICogaWYgbGNkIHBhbmVsIHdhcyBv biBmcm9tIGJvb3Rsb2FkZXIgbGlrZSB1LWJvb3QgdGhlbgorCSAqIGRvIG5vdCBsY2Qgb24uCisJ ICovCisJaWYgKCFsY2QtPmxjZF9wZC0+bGNkX2VuYWJsZWQpIHsKKwkJLyoKKwkJICogaWYgbGNk IHBhbmVsIHdhcyBvZmYgZnJvbSBib290bG9hZGVyIHRoZW4KKwkJICogY3VycmVudCBsY2Qgc3Rh dHVzIGlzIHBvd2VyZG93biBhbmQgdGhlbgorCQkgKiBpdCBlbmFibGVzIGxjZCBwYW5lbC4KKwkJ ICovCisJCWxjZC0+cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisKKwkJczZlNjNtMF9wb3dl cihsY2QsIEZCX0JMQU5LX1VOQkxBTkspOworCX0gZWxzZQorCQlsY2QtPnBvd2VyID0gRkJfQkxB TktfVU5CTEFOSzsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGxjZCk7CisKKwlkZXZf aW5mbygmc3BpLT5kZXYsICJzNmU2M20wIHBhbmVsIGRyaXZlciBoYXMgYmVlbiBwcm9iZWQuXG4i KTsKKworCXJldHVybiAwOworCitvdXRfbGNkX3VucmVnaXN0ZXI6CisJbGNkX2RldmljZV91bnJl Z2lzdGVyKGxkKTsKK291dF9mcmVlX2xjZDoKKwlrZnJlZShsY2QpOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHM2ZTYzbTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNl ICpzcGkpCit7CisJc3RydWN0IHM2ZTYzbTAgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5k ZXYpOworCisJczZlNjNtMF9wb3dlcihsY2QsIEZCX0JMQU5LX1BPV0VSRE9XTik7CisJbGNkX2Rl dmljZV91bnJlZ2lzdGVyKGxjZC0+bGQpOworCWtmcmVlKGxjZCk7CisKKwlyZXR1cm4gMDsKK30K KworI2lmIGRlZmluZWQoQ09ORklHX1BNKQordW5zaWduZWQgaW50IGJlZm9yZV9wb3dlcjsKKwor c3RhdGljIGludCBzNmU2M20wX3N1c3BlbmQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgcG1fbWVz c2FnZV90IG1lc2cpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHM2ZTYzbTAgKmxjZCA9IGRl dl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJZGV2X2RiZygmc3BpLT5kZXYsICJsY2QtPnBv d2VyID0gJWRcbiIsIGxjZC0+cG93ZXIpOworCisJYmVmb3JlX3Bvd2VyID0gbGNkLT5wb3dlcjsK KworCS8qCisJICogd2hlbiBsY2QgcGFuZWwgaXMgc3VzcGVuZCwgbGNkIHBhbmVsIGJlY29tZXMg b2ZmCisJICogcmVnYXJkbGVzcyBvZiBzdGF0dXMuCisJICovCisJcmV0ID0gczZlNjNtMF9wb3dl cihsY2QsIEZCX0JMQU5LX1BPV0VSRE9XTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHM2ZTYzbTBfcmVzdW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldCA9 IDA7CisJc3RydWN0IHM2ZTYzbTAgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwor CisJLyoKKwkgKiBhZnRlciBzdXNwZW5kZWQsIGlmIGxjZCBwYW5lbCBzdGF0dXMgaXMgRkJfQkxB TktfVU5CTEFOSworCSAqIChhdCB0aGF0IHRpbWUsIGJlZm9yZV9wb3dlciBpcyBGQl9CTEFOS19V TkJMQU5LKSB0aGVuCisJICogaXQgY2hhbmdlcyB0aGF0IHN0YXR1cyB0byBGQl9CTEFOS19QT1dF UkRPV04gdG8gZ2V0IGxjZCBvbi4KKwkgKi8KKwlpZiAoYmVmb3JlX3Bvd2VyID09IEZCX0JMQU5L X1VOQkxBTkspCisJCWxjZC0+cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisKKwlkZXZfZGJn KCZzcGktPmRldiwgImJlZm9yZV9wb3dlciA9ICVkXG4iLCBiZWZvcmVfcG93ZXIpOworCisJcmV0 ID0gczZlNjNtMF9wb3dlcihsY2QsIGJlZm9yZV9wb3dlcik7CisKKwlyZXR1cm4gcmV0OworfQor I2Vsc2UKKyNkZWZpbmUgczZlNjNtMF9zdXNwZW5kCQlOVUxMCisjZGVmaW5lIHM2ZTYzbTBfcmVz dW1lCQlOVUxMCisjZW5kaWYKKworLyogUG93ZXIgZG93biBhbGwgZGlzcGxheXMgb24gcmVib290 LCBwb3dlcm9mZiBvciBoYWx0LiAqLworc3RhdGljIHZvaWQgczZlNjNtMF9zaHV0ZG93bihzdHJ1 Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzNmU2M20wICpsY2QgPSBkZXZfZ2V0X2Ry dmRhdGEoJnNwaS0+ZGV2KTsKKworCXM2ZTYzbTBfcG93ZXIobGNkLCBGQl9CTEFOS19QT1dFUkRP V04pOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgczZlNjNtMF9kcml2ZXIgPSB7CisJ LmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiczZlNjNtMCIsCisJCS5idXMJPSAmc3BpX2J1c190eXBl LAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzNmU2M20wX3Byb2Jl LAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczZlNjNtMF9yZW1vdmUpLAorCS5zaHV0ZG93bgk9 IHM2ZTYzbTBfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBzNmU2M20wX3N1c3BlbmQsCisJLnJlc3Vt ZQkJPSBzNmU2M20wX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM2ZTYzbTBfaW5p dCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzNmU2M20wX2RyaXZlcik7 Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzNmU2M20wX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5y ZWdpc3Rlcl9kcml2ZXIoJnM2ZTYzbTBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoczZlNjNt MF9pbml0KTsKK21vZHVsZV9leGl0KHM2ZTYzbTBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIklu S2kgRGFlIDxpbmtpLmRhZUBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUzZF NjNNMCBMQ0QgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3M2ZTYzbTBfZ2FtbWEuaCBiL2RyaXZlcnMvdmlkZW8v YmFja2xpZ2h0L3M2ZTYzbTBfZ2FtbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4yYzQ0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQv czZlNjNtMF9nYW1tYS5oCkBAIC0wLDAgKzEsMjY2IEBACisvKiBsaW51eC9kcml2ZXJzL3ZpZGVv L3NhbXN1bmcvczZlNjNtMF9icmlnaHRuZXNzLmgKKyAqCisgKiBHYW1tYSBsZXZlbCBkZWZpbml0 aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcworICog SW5LaSBEYWUgPGlua2kuZGFlQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisq LworCisjaWZuZGVmIF9TNkU2M00wX0JSSUdIVE5FU1NfSAorI2RlZmluZSBfUzZFNjNNMF9CUklH SFRORVNTX0gKKworI2RlZmluZSBNQVhfR0FNTUFfTEVWRUwJCTExCisjZGVmaW5lIEdBTU1BX1RB QkxFX0NPVU5UCTIxCisKKy8qIGdhbW1hIHZhbHVlOiAyLjIgKi8KK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBpbnQgczZlNjNtMF8yMl8zMDBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDVmLCAw eDUwLCAweDJkLCAweEI2LAorCTB4QjksIDB4QTcsIDB4QWQsIDB4QjEsIDB4OWYsIDB4YmUsIDB4 QzAsCisJMHhCNSwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhNCwgMHgwMCwgMHhkYgorfTsKKworc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzIyXzI4MFtdID0geworCTB4MTgsIDB4MDgs IDB4MjQsIDB4NjQsIDB4NTYsIDB4MzMsIDB4QjYsCisJMHhCQSwgMHhBOCwgMHhBQywgMHhCMSwg MHg5RCwgMHhDMSwgMHhDMSwKKwkweEI3LCAweDAwLCAweDlDLCAweDAwLCAweDlGLCAweDAwLCAw eEQ2Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMjJfMjYwW10gPSB7 CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg2NiwgMHg1OCwgMHgzNCwgMHhCNiwKKwkweEJBLCAweEE3 LCAweEFGLCAweEIzLCAweEEwLCAweEMxLCAweEMyLAorCTB4QjcsIDB4MDAsIDB4OTcsIDB4MDAs IDB4OUEsIDB4MDAsIDB4RDEKKworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2 M20wXzIyXzI0MFtdID0geworCTB4MTgsIDB4MDgsIDB4MjQsIDB4NjIsIDB4NTQsIDB4MzAsIDB4 QjksCisJMHhCQiwgMHhBOSwgMHhCMCwgMHhCMywgMHhBMSwgMHhDMSwgMHhDMywKKwkweEI3LCAw eDAwLCAweDkxLCAweDAwLCAweDk1LCAweDAwLCAweERBCisKK307CitzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IHM2ZTYzbTBfMjJfMjIwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg2Mywg MHg1MywgMHgzMSwgMHhCOCwKKwkweEJDLCAweEE5LCAweEIwLCAweEI1LCAweEEyLCAweEM0LCAw eEM0LAorCTB4QjgsIDB4MDAsIDB4OEIsIDB4MDAsIDB4OEUsIDB4MDAsIDB4QzIKK307CisKK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8yMl8yMDBbXSA9IHsKKwkweDE4LCAweDA4 LCAweDI0LCAweDY2LCAweDU1LCAweDM0LCAweEJBLAorCTB4QkQsIDB4QUIsIDB4QjEsIDB4QjUs IDB4QTMsIDB4QzUsIDB4QzYsCisJMHhCOSwgMHgwMCwgMHg4NSwgMHgwMCwgMHg4OCwgMHgwMCwg MHhCQQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzIyXzE3MFtdID0g eworCTB4MTgsIDB4MDgsIDB4MjQsIDB4NjksIDB4NTQsIDB4MzcsIDB4QkIsCisJMHhCRSwgMHhB QywgMHhCNCwgMHhCNywgMHhBNiwgMHhDNywgMHhDOCwKKwkweEJDLCAweDAwLCAweDdCLCAweDAw LCAweDdFLCAweDAwLCAweEFCCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYz bTBfMjJfMTQwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg2QywgMHg1NCwgMHgzQSwgMHhC QywKKwkweEJGLCAweEFDLCAweEI3LCAweEJCLCAweEE5LCAweEM5LCAweEM5LAorCTB4QkUsIDB4 MDAsIDB4NzEsIDB4MDAsIDB4NzMsIDB4MDAsIDB4OUUKK307CisKK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBpbnQgczZlNjNtMF8yMl8xMTBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDcwLCAw eDUxLCAweDNFLCAweEJGLAorCTB4QzEsIDB4QUYsIDB4QjksIDB4QkMsIDB4QUIsIDB4Q0MsIDB4 Q0MsCisJMHhDMiwgMHgwMCwgMHg2NSwgMHgwMCwgMHg2NywgMHgwMCwgMHg4RAorfTsKKworc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzIyXzkwW10gPSB7CisJMHgxOCwgMHgwOCwg MHgyNCwgMHg3MywgMHg0QSwgMHgzRCwgMHhDMCwKKwkweEMyLCAweEIxLCAweEJCLCAweEJFLCAw eEFDLCAweENFLCAweENGLAorCTB4QzUsIDB4MDAsIDB4NUQsIDB4MDAsIDB4NUUsIDB4MDAsIDB4 ODIKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8yMl8zMFtdID0gewor CTB4MTgsIDB4MDgsIDB4MjQsIDB4NzgsIDB4RUMsIDB4M0QsIDB4QzgsCisJMHhDMiwgMHhCNiwg MHhDNCwgMHhDNywgMHhCNiwgMHhENSwgMHhENywKKwkweENDLCAweDAwLCAweDM5LCAweDAwLCAw eDM2LCAweDAwLCAweDUxCit9OworCisvKiBnYW1tYSB2YWx1ZTogMS45ICovCitzdGF0aWMgY29u c3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTlfMzAwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwg MHg2MSwgMHg1RiwgMHgzOSwgMHhCQSwKKwkweEJELCAweEFELCAweEIxLCAweEI2LCAweEE1LCAw eEM0LCAweEM1LAorCTB4QkMsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QTQsIDB4MDAsIDB4REIKK307 CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8xOV8yODBbXSA9IHsKKwkweDE4 LCAweDA4LCAweDI0LCAweDYxLCAweDYwLCAweDM5LCAweEJCLAorCTB4QkUsIDB4QUQsIDB4QjIs IDB4QjYsIDB4QTYsIDB4QzUsIDB4QzcsCisJMHhCRCwgMHgwMCwgMHg5QiwgMHgwMCwgMHg5RSwg MHgwMCwgMHhENQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzE5XzI2 MFtdID0geworCTB4MTgsIDB4MDgsIDB4MjQsIDB4NjMsIDB4NjEsIDB4M0IsIDB4QkEsCisJMHhC RSwgMHhBQywgMHhCMywgMHhCOCwgMHhBNywgMHhDNiwgMHhDOCwKKwkweEJELCAweDAwLCAweDk2 LCAweDAwLCAweDk4LCAweDAwLCAweENGCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IHM2ZTYzbTBfMTlfMjQwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg2NywgMHg2NCwgMHgz RiwgMHhCQiwKKwkweEJFLCAweEFELCAweEIzLCAweEI5LCAweEE3LCAweEM4LCAweEM5LAorCTB4 QkUsIDB4MDAsIDB4OTAsIDB4MDAsIDB4OTIsIDB4MDAsIDB4QzgKK307CisKK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBpbnQgczZlNjNtMF8xOV8yMjBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAw eDY4LCAweDY0LCAweDQwLCAweEJDLAorCTB4QkYsIDB4QUYsIDB4QjQsIDB4QkEsIDB4QTksIDB4 QzgsIDB4Q0EsCisJMHhCRSwgMHgwMCwgMHg4QiwgMHgwMCwgMHg4QywgMHgwMCwgMHhDMAorfTsK Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzE5XzIwMFtdID0geworCTB4MTgs IDB4MDgsIDB4MjQsIDB4NjgsIDB4NjQsIDB4M0YsIDB4QkUsCisJMHhDMCwgMHhCMCwgMHhCNiwg MHhCQiwgMHhBQiwgMHhDOCwgMHhDQiwKKwkweEJGLCAweDAwLCAweDg1LCAweDAwLCAweDg2LCAw eDAwLCAweEI4Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTlfMTcw W10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg2OSwgMHg2NCwgMHg0MCwgMHhCRiwKKwkweEMx LCAweEIwLCAweEI5LCAweEJFLCAweEFELCAweENCLCAweENELAorCTB4QzIsIDB4MDAsIDB4N0Es IDB4MDAsIDB4N0IsIDB4MDAsIDB4QUEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg czZlNjNtMF8xOV8xNDBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDZFLCAweDY1LCAweDQ1 LCAweEMwLAorCTB4QzMsIDB4QjIsIDB4QkEsIDB4QkUsIDB4QUUsIDB4Q0QsIDB4RDAsCisJMHhD NCwgMHgwMCwgMHg3MCwgMHgwMCwgMHg3MCwgMHgwMCwgMHg5QworfTsKKworc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGludCBzNmU2M20wXzE5XzExMFtdID0geworCTB4MTgsIDB4MDgsIDB4MjQsIDB4 NkYsIDB4NjUsIDB4NDYsIDB4QzIsCisJMHhDNCwgMHhCMywgMHhCRiwgMHhDMiwgMHhCMiwgMHhD RiwgMHhEMSwKKwkweEM2LCAweDAwLCAweDY0LCAweDAwLCAweDY0LCAweDAwLCAweDhECit9Owor CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTlfOTBbXSA9IHsKKwkweDE4LCAw eDA4LCAweDI0LCAweDc0LCAweDYwLCAweDRBLCAweEMzLAorCTB4QzYsIDB4QjUsIDB4QkYsIDB4 QzMsIDB4QjIsIDB4RDIsIDB4RDMsCisJMHhDOCwgMHgwMCwgMHg1QiwgMHgwMCwgMHg1QiwgMHgw MCwgMHg4MQorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzE5XzMwW10g PSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg4NCwgMHg0NSwgMHg0RiwgMHhDQSwKKwkweENCLCAw eEJDLCAweEM5LCAweENCLCAweEJDLCAweERBLCAweERBLAorCTB4RDAsIDB4MDAsIDB4MzUsIDB4 MDAsIDB4MzQsIDB4MDAsIDB4NEUKK307CisKKy8qIGdhbW1hIHZhbHVlOiAxLjcgKi8KK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8xN18zMDBbXSA9IHsKKwkweDE4LCAweDA4LCAw eDI0LCAweDcwLCAweDcwLCAweDRGLCAweEJGLAorCTB4QzIsIDB4QjIsIDB4QjgsIDB4QkMsIDB4 QUMsIDB4Q0IsIDB4Q0QsCisJMHhDMywgMHgwMCwgMHhBMCwgMHgwMCwgMHhBNCwgMHgwMCwgMHhE QgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzE3XzI4MFtdID0gewor CTB4MTgsIDB4MDgsIDB4MjQsIDB4NzEsIDB4NzEsIDB4NTAsIDB4QkYsCisJMHhDMiwgMHhCMiwg MHhCQSwgMHhCRSwgMHhBRSwgMHhDQiwgMHhDRCwKKwkweEMzLCAweDAwLCAweDlDLCAweDAwLCAw eDlGLCAweDAwLCAweEQ2Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBf MTdfMjYwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgyNCwgMHg3MiwgMHg3MiwgMHg1MCwgMHhDMCwK KwkweEMzLCAweEI0LCAweEI5LCAweEJFLCAweEFFLCAweENDLCAweENGLAorCTB4QzQsIDB4MDAs IDB4OTcsIDB4MDAsIDB4OUEsIDB4MDAsIDB4RDEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBpbnQgczZlNjNtMF8xN18yNDBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDcxLCAweDcy LCAweDRGLCAweEMyLAorCTB4QzQsIDB4QjUsIDB4QkIsIDB4QkYsIDB4QjAsIDB4Q0MsIDB4Q0Ys CisJMHhDMywgMHgwMCwgMHg5MSwgMHgwMCwgMHg5NSwgMHgwMCwgMHhDQQorfTsKKworc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCBzNmU2M20wXzE3XzIyMFtdID0geworCTB4MTgsIDB4MDgsIDB4 MjQsIDB4NzEsIDB4NzMsIDB4NEYsIDB4QzIsCisJMHhDNSwgMHhCNSwgMHhCRCwgMHhDMCwgMHhC MiwgMHhDRCwgMHhEMSwKKwkweEM1LCAweDAwLCAweDhCLCAweDAwLCAweDhFLCAweDAwLCAweEMy Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTdfMjAwW10gPSB7CisJ MHgxOCwgMHgwOCwgMHgyNCwgMHg3MiwgMHg3NSwgMHg1MSwgMHhDMiwKKwkweEM2LCAweEI1LCAw eEJGLCAweEMxLCAweEIzLCAweENFLCAweEQxLAorCTB4QzYsIDB4MDAsIDB4ODUsIDB4MDAsIDB4 ODgsIDB4MDAsIDB4QkEKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8x N18xNzBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDc1LCAweDc3LCAweDU0LCAweEMzLAor CTB4QzcsIDB4QjcsIDB4QzAsIDB4QzMsIDB4QjQsIDB4RDEsIDB4RDMsCisJMHhDOSwgMHgwMCwg MHg3QiwgMHgwMCwgMHg3RSwgMHgwMCwgMHhBQgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVk IGludCBzNmU2M20wXzE3XzE0MFtdID0geworCTB4MTgsIDB4MDgsIDB4MjQsIDB4N0IsIDB4Nzcs IDB4NTgsIDB4QzMsCisJMHhDOCwgMHhCOCwgMHhDMiwgMHhDNiwgMHhCNiwgMHhEMywgMHhENCwK KwkweENBLCAweDAwLCAweDcxLCAweDAwLCAweDczLCAweDAwLCAweDlFCit9OworCitzdGF0aWMg Y29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTdfMTEwW10gPSB7CisJMHgxOCwgMHgwOCwgMHgy NCwgMHg4MSwgMHg3QiwgMHg1RCwgMHhDNiwKKwkweENBLCAweEJCLCAweEMzLCAweEM3LCAweEI4 LCAweEQ2LCAweEQ4LAorCTB4Q0QsIDB4MDAsIDB4NjUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4OEQK K307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgczZlNjNtMF8xN185MFtdID0geworCTB4 MTgsIDB4MDgsIDB4MjQsIDB4ODIsIDB4N0EsIDB4NUIsIDB4QzgsCisJMHhDQiwgMHhCRCwgMHhD NSwgMHhDQSwgMHhCQSwgMHhENiwgMHhEOCwKKwkweENFLCAweDAwLCAweDVELCAweDAwLCAweDVF LCAweDAwLCAweDgyCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHM2ZTYzbTBfMTdf MzBbXSA9IHsKKwkweDE4LCAweDA4LCAweDI0LCAweDhGLCAweDczLCAweDYzLCAweEQxLAorCTB4 RDAsIDB4QzUsIDB4Q0MsIDB4RDEsIDB4QzIsIDB4REUsIDB4RTAsCisJMHhENiwgMHgwMCwgMHgz OSwgMHgwMCwgMHgzNiwgMHgwMCwgMHg1MQorfTsKKworc3RydWN0IHM2ZTYzbTBfZ2FtbWEgewor CXVuc2lnbmVkIGludCAqZ2FtbWFfMjJfdGFibGVbTUFYX0dBTU1BX0xFVkVMXTsKKwl1bnNpZ25l ZCBpbnQgKmdhbW1hXzE5X3RhYmxlW01BWF9HQU1NQV9MRVZFTF07CisJdW5zaWduZWQgaW50ICpn YW1tYV8xN190YWJsZVtNQVhfR0FNTUFfTEVWRUxdOworfTsKKworc3RhdGljIHN0cnVjdCBzNmU2 M20wX2dhbW1hIGdhbW1hX3RhYmxlID0geworCS5nYW1tYV8yMl90YWJsZVswXSA9ICh1bnNpZ25l ZCBpbnQgKikmczZlNjNtMF8yMl8zMCwKKwkuZ2FtbWFfMjJfdGFibGVbMV0gPSAodW5zaWduZWQg aW50ICopJnM2ZTYzbTBfMjJfOTAsCisJLmdhbW1hXzIyX3RhYmxlWzJdID0gKHVuc2lnbmVkIGlu dCAqKSZzNmU2M20wXzIyXzExMCwKKwkuZ2FtbWFfMjJfdGFibGVbM10gPSAodW5zaWduZWQgaW50 ICopJnM2ZTYzbTBfMjJfMTQwLAorCS5nYW1tYV8yMl90YWJsZVs0XSA9ICh1bnNpZ25lZCBpbnQg KikmczZlNjNtMF8yMl8xNzAsCisJLmdhbW1hXzIyX3RhYmxlWzVdID0gKHVuc2lnbmVkIGludCAq KSZzNmU2M20wXzIyXzIwMCwKKwkuZ2FtbWFfMjJfdGFibGVbNl0gPSAodW5zaWduZWQgaW50ICop JnM2ZTYzbTBfMjJfMjIwLAorCS5nYW1tYV8yMl90YWJsZVs3XSA9ICh1bnNpZ25lZCBpbnQgKikm czZlNjNtMF8yMl8yNDAsCisJLmdhbW1hXzIyX3RhYmxlWzhdID0gKHVuc2lnbmVkIGludCAqKSZz NmU2M20wXzIyXzI2MCwKKwkuZ2FtbWFfMjJfdGFibGVbOV0gPSAodW5zaWduZWQgaW50ICopJnM2 ZTYzbTBfMjJfMjgwLAorCS5nYW1tYV8yMl90YWJsZVsxMF0gPSAodW5zaWduZWQgaW50ICopJnM2 ZTYzbTBfMjJfMzAwLAorCisJLmdhbW1hXzE5X3RhYmxlWzBdID0gKHVuc2lnbmVkIGludCAqKSZz NmU2M20wXzE5XzMwLAorCS5nYW1tYV8xOV90YWJsZVsxXSA9ICh1bnNpZ25lZCBpbnQgKikmczZl NjNtMF8xOV85MCwKKwkuZ2FtbWFfMTlfdGFibGVbMl0gPSAodW5zaWduZWQgaW50ICopJnM2ZTYz bTBfMTlfMTEwLAorCS5nYW1tYV8xOV90YWJsZVszXSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNt MF8xOV8xNDAsCisJLmdhbW1hXzE5X3RhYmxlWzRdID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20w XzE5XzE3MCwKKwkuZ2FtbWFfMTlfdGFibGVbNV0gPSAodW5zaWduZWQgaW50ICopJnM2ZTYzbTBf MTlfMjAwLAorCS5nYW1tYV8xOV90YWJsZVs2XSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8x OV8yMjAsCisJLmdhbW1hXzE5X3RhYmxlWzddID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE5 XzI0MCwKKwkuZ2FtbWFfMTlfdGFibGVbOF0gPSAodW5zaWduZWQgaW50ICopJnM2ZTYzbTBfMTlf MjYwLAorCS5nYW1tYV8xOV90YWJsZVs5XSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8xOV8y ODAsCisJLmdhbW1hXzE5X3RhYmxlWzEwXSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8xOV8z MDAsCisKKwkuZ2FtbWFfMTdfdGFibGVbMF0gPSAodW5zaWduZWQgaW50ICopJnM2ZTYzbTBfMTdf MzAsCisJLmdhbW1hXzE3X3RhYmxlWzFdID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE3Xzkw LAorCS5nYW1tYV8xN190YWJsZVsyXSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8xN18xMTAs CisJLmdhbW1hXzE3X3RhYmxlWzNdID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE3XzE0MCwK KwkuZ2FtbWFfMTdfdGFibGVbNF0gPSAodW5zaWduZWQgaW50ICopJnM2ZTYzbTBfMTdfMTcwLAor CS5nYW1tYV8xN190YWJsZVs1XSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8xN18yMDAsCisJ LmdhbW1hXzE3X3RhYmxlWzZdID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE3XzIyMCwKKwku Z2FtbWFfMTdfdGFibGVbN10gPSAodW5zaWduZWQgaW50ICopJnM2ZTYzbTBfMTdfMjQwLAorCS5n YW1tYV8xN190YWJsZVs4XSA9ICh1bnNpZ25lZCBpbnQgKikmczZlNjNtMF8xN18yNjAsCisJLmdh bW1hXzE3X3RhYmxlWzldID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE3XzI4MCwKKwkuZ2Ft bWFfMTdfdGFibGVbMTBdID0gKHVuc2lnbmVkIGludCAqKSZzNmU2M20wXzE3XzMwMCwKK307CisK KyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xjZC5oIGIvaW5jbHVkZS9saW51 eC9sY2QuaAppbmRleCBjNjdmZWNhLi44ODc3MTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4 L2xjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGNkLmgKQEAgLTY5LDYgKzY5LDI5IEBAIHN0cnVj dCBsY2RfZGV2aWNlIHsKIAlzdHJ1Y3QgZGV2aWNlIGRldjsKIH07CiAKK3N0cnVjdCBsY2RfcGxh dGZvcm1fZGF0YSB7CisJLyogcmVzZXQgbGNkIHBhbmVsIGRldmljZS4gKi8KKwlpbnQgKCpyZXNl dCkoc3RydWN0IGxjZF9kZXZpY2UgKmxkKTsKKwkvKiBvbiBvciBvZmYgdG8gbGNkIHBhbmVsLiBp ZiAnZW5hYmxlJyBpcyAwIHRoZW4KKwkgICBsY2QgcG93ZXIgb2ZmIGFuZCAxLCBsY2QgcG93ZXIg b24uICovCisJaW50ICgqcG93ZXJfb24pKHN0cnVjdCBsY2RfZGV2aWNlICpsZCwgaW50IGVuYWJs ZSk7CisKKwkvKiBpdCBpbmRpY2F0ZXMgd2hldGhlciBsY2QgcGFuZWwgd2FzIGVuYWJsZWQKKwkg ICBmcm9tIGJvb3Rsb2FkZXIgb3Igbm90LiAqLworCWludCBsY2RfZW5hYmxlZDsKKwkvKiBpdCBt ZWFucyBkZWxheSBmb3Igc3RhYmxlIHRpbWUgd2hlbiBpdCBiZWNvbWVzIGxvdyB0byBoaWdoCisJ ICAgb3IgaGlnaCB0byBsb3cgdGhhdCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciByZXNldCBncGlv IGlzCisJICAgbG93IGFjdGl2ZSBvciBoaWdoIGFjdGl2ZS4gKi8KKwl1bnNpZ25lZCBpbnQgcmVz ZXRfZGVsYXk7CisJLyogc3RhYmxlIHRpbWUgbmVlZGluZyB0byBiZWNvbWUgbGNkIHBvd2VyIG9u LiAqLworCXVuc2lnbmVkIGludCBwb3dlcl9vbl9kZWxheTsKKwkvKiBzdGFibGUgdGltZSBuZWVk aW5nIHRvIGJlY29tZSBsY2QgcG93ZXIgb2ZmLiAqLworCXVuc2lnbmVkIGludCBwb3dlcl9vZmZf ZGVsYXk7CisKKwkvKiBpdCBjb3VsZCBiZSB1c2VkIGZvciBhbnkgcHVycG9zZS4gKi8KKwl2b2lk ICpwZGF0YTsKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsY2Rfc2V0X3Bvd2VyKHN0cnVjdCBs Y2RfZGV2aWNlICpsZCwgaW50IHBvd2VyKQogewogCW11dGV4X2xvY2soJmxkLT51cGRhdGVfbG9j ayk7Cg== --001485f8137436f5610482abb3f6--