From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1H9TA8-0001OV-Ue for qemu-devel@nongnu.org; Tue, 23 Jan 2007 16:26:40 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1H9TA8-0001Nb-BR for qemu-devel@nongnu.org; Tue, 23 Jan 2007 16:26:40 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1H9TA8-0001ND-0p for qemu-devel@nongnu.org; Tue, 23 Jan 2007 16:26:40 -0500 Received: from [64.233.184.224] (helo=wr-out-0506.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1H9TA7-0002Vc-Hm for qemu-devel@nongnu.org; Tue, 23 Jan 2007 16:26:39 -0500 Received: by wr-out-0506.google.com with SMTP id i7so71120wra for ; Tue, 23 Jan 2007 13:26:38 -0800 (PST) Message-ID: Date: Tue, 23 Jan 2007 13:26:37 -0800 From: "Ed Swierk" Sender: eswierk@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_212684_17300655.1169587597424" Subject: [Qemu-devel] [PATCH] PIIX4 SMBus host, EEPROM device emulation Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_212684_17300655.1169587597424 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline The attached patch adds SMBus host support to the emulated PIIX4 power management device (acpi.c), and adds an emulated serial EEPROM device accessible via the SMBus interface. I tried to follow the Intel 82371AB spec for the SMBus support; the interface should be generic enough to implement a variety of SMBus-compliant devices. The EEPROM device can use a file for persistent storage (smbus_eeprom.bin in the BIOS directory). If this file does not exist, a temporary buffer is used instead. I tested the devices with Linux using the i2c-piix4 host driver and the eeprom chip driver. I have no idea what will happen on other OSes. Comments and suggestions welcome. --Ed ------=_Part_212684_17300655.1169587597424 Content-Type: text/x-patch; name=qemu-piix4-smbus-eeprom.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_exau710z Content-Disposition: attachment; filename="qemu-piix4-smbus-eeprom.patch" SW5kZXg6IHFlbXUtMC44LjIvaHcvYWNwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUtMC44LjIub3Jp Zy9ody9hY3BpLmMKKysrIHFlbXUtMC44LjIvaHcvYWNwaS5jCkBAIC0yNyw2ICsyNyw3IEBACiAj ZGVmaW5lIFBNX0lPX0JBU0UgICAgICAgIDB4YjAwMAogI2RlZmluZSBTTUlfQ01EX0lPX0FERFIg ICAweGIwNDAKICNkZWZpbmUgQUNQSV9EQkdfSU9fQUREUiAgMHhiMDQ0CisjZGVmaW5lIFNNQl9J T19CQVNFICAgICAweGIxMDAKIAogdHlwZWRlZiBzdHJ1Y3QgUElJWDRQTVN0YXRlIHsKICAgICBQ Q0lEZXZpY2UgZGV2OwpAQCAtMzUsNiArMzYsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgUElJWDRQTVN0 YXRlIHsKICAgICB1aW50MTZfdCBwbWNudHJsOwogICAgIFFFTVVUaW1lciAqdG1yX3RpbWVyOwog ICAgIGludDY0X3QgdG1yX292ZXJmbG93X3RpbWU7CisgICAgU01CdXNEZXZpY2UgKnNtYl9kZXZb MTI4XTsKKyAgICB1aW50OF90IHNtYl9zdGF0OworICAgIHVpbnQ4X3Qgc21iX2N0bDsKKyAgICB1 aW50OF90IHNtYl9jbWQ7CisgICAgdWludDhfdCBzbWJfYWRkcjsKKyAgICB1aW50OF90IHNtYl9k YXRhMDsKKyAgICB1aW50OF90IHNtYl9kYXRhMTsKKyAgICB1aW50OF90IHNtYl9kYXRhWzMyXTsK KyAgICB1aW50OF90IHNtYl9pbmRleDsKIH0gUElJWDRQTVN0YXRlOwogCiAjZGVmaW5lIFJUQ19F TiAoMSA8PCAxMCkKQEAgLTQ2LDggKzU2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUElJWDRQTVN0YXRl IHsKIAogI2RlZmluZSBTVVNfRU4gKDEgPDwgMTMpCiAKLS8qIE5vdGU6IG9ubHkgdXNlZCBmb3Ig QUNQSSBiaW9zIGluaXQuIENvdWxkIGJlIGRlbGV0ZWQgd2hlbiBBQ1BJIGluaXQKLSAgIGlzIGlu dGVncmF0ZWQgaW4gQm9jaHMgQklPUyAqLwogc3RhdGljIFBJSVg0UE1TdGF0ZSAqcGlpeDRfcG1f c3RhdGU7CiAKIHN0YXRpYyB1aW50MzJfdCBnZXRfcG10bXIoUElJWDRQTVN0YXRlICpzKQpAQCAt MjE4LDEzICsyMjYsMTYzIEBAIHN0YXRpYyB2b2lkIGFjcGlfZGJnX3dyaXRlbCh2b2lkICpvcGFx dWUKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBzbWJfdHJhbnNhY3Rpb24oUElJWDRQTVN0YXRl ICpzKQoreworICAgIHVpbnQ4X3QgcHJvdCA9IChzLT5zbWJfY3RsID4+IDIpICYgMHgwNzsKKyAg ICB1aW50OF90IHJlYWQgPSBzLT5zbWJfYWRkciAmIDB4MDE7CisgICAgdWludDhfdCBjbWQgPSBz LT5zbWJfY21kOworICAgIHVpbnQ4X3QgYWRkciA9IHMtPnNtYl9hZGRyID4+IDE7CisgICAgU01C dXNEZXZpY2UgKmRldiA9IHMtPnNtYl9kZXZbYWRkcl07CisKKyNpZmRlZiBERUJVRworICAgIHBy aW50ZigiU01CdXMgdHJhbnMgYWRkcj0weCUwMnggcHJvdD0weCUwMnhcbiIsIGFkZHIsIHByb3Qp OworI2VuZGlmCisgICAgaWYgKCFkZXYpIGdvdG8gZXJyb3I7CisKKyAgICBzd2l0Y2gocHJvdCkg eworICAgIGNhc2UgMHgwOgorICAgICAgICBpZiAoIWRldi0+cXVpY2tfY21kKSBnb3RvIGVycm9y OworICAgICAgICAoKmRldi0+cXVpY2tfY21kKShkZXYsIHJlYWQpOworICAgICAgICBicmVhazsK KyAgICBjYXNlIDB4MToKKyAgICAgICAgaWYgKHJlYWQpIHsKKyAgICAgICAgICAgIGlmICghZGV2 LT5yZWNlaXZlX2J5dGUpIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBzLT5zbWJfZGF0YTAgPSAo KmRldi0+cmVjZWl2ZV9ieXRlKShkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAg ICAgICAgICAgaWYgKCFkZXYtPnNlbmRfYnl0ZSkgZ290byBlcnJvcjsKKyAgICAgICAgICAgICgq ZGV2LT5zZW5kX2J5dGUpKGRldiwgY21kKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4MjoKKyAgICAgICAgaWYgKHJlYWQpIHsKKyAgICAgICAgICAgIGlmICghZGV2LT5y ZWFkX2J5dGUpIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBzLT5zbWJfZGF0YTAgPSAoKmRldi0+ cmVhZF9ieXRlKShkZXYsIGNtZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICBpZiAoIWRldi0+d3JpdGVfYnl0ZSkgZ290byBlcnJvcjsKKyAgICAgICAgICAgICgqZGV2 LT53cml0ZV9ieXRlKShkZXYsIGNtZCwgcy0+c21iX2RhdGEwKTsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICBjYXNlIDB4MzoKKyAgICAgICAgaWYgKHJlYWQpIHsKKyAgICAgICAgICAg IHVpbnQxNl90IHZhbDsKKyAgICAgICAgICAgIGlmICghZGV2LT5yZWFkX3dvcmQpIGdvdG8gZXJy b3I7CisgICAgICAgICAgICB2YWwgPSAoKmRldi0+cmVhZF93b3JkKShkZXYsIGNtZCk7CisgICAg ICAgICAgICBzLT5zbWJfZGF0YTAgPSB2YWw7CisgICAgICAgICAgICBzLT5zbWJfZGF0YTEgPSB2 YWwgPj4gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICghZGV2 LT53cml0ZV93b3JkKSBnb3RvIGVycm9yOworICAgICAgICAgICAgKCpkZXYtPndyaXRlX3dvcmQp KGRldiwgY21kLCAocy0+c21iX2RhdGExIDw8IDgpIHwgcy0+c21iX2RhdGEwKTsKKyAgICAgICAg fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4NToKKyAgICAgICAgaWYgKHJlYWQpIHsKKyAg ICAgICAgICAgIGlmICghZGV2LT5yZWFkX2Jsb2NrKSBnb3RvIGVycm9yOworICAgICAgICAgICAg cy0+c21iX2RhdGEwID0gKCpkZXYtPnJlYWRfYmxvY2spKGRldiwgY21kLCBzLT5zbWJfZGF0YSk7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIWRldi0+d3JpdGVf YmxvY2spIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAoKmRldi0+d3JpdGVfYmxvY2spKGRldiwg Y21kLCBzLT5zbWJfZGF0YTAsIHMtPnNtYl9kYXRhKTsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICByZXR1cm47 CisKKyAgZXJyb3I6CisgICAgcy0+c21iX3N0YXQgfD0gMHgwNDsKK30KKworc3RhdGljIHZvaWQg c21iX2lvcG9ydF93cml0ZWIodm9pZCAqb3BhcXVlLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2 YWwpCit7CisgICAgUElJWDRQTVN0YXRlICpzID0gb3BhcXVlOworICAgIGFkZHIgJj0gMHgzZjsK KyNpZmRlZiBERUJVRworICAgIHByaW50ZigiU01CIHdyaXRlYiBwb3J0PTB4JTA0eCB2YWw9MHgl MDJ4XG4iLCBhZGRyLCB2YWwpOworI2VuZGlmCisgICAgc3dpdGNoKGFkZHIpIHsKKyAgICBjYXNl IDB4MDA6IC8qIFNNQkhTVFNUUyAqLworICAgICAgICBzLT5zbWJfc3RhdCA9IDA7CisgICAgICAg IHMtPnNtYl9pbmRleCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMjogLyogU01C SFNUQ05UICovCisgICAgICAgIHMtPnNtYl9jdGwgPSB2YWw7CisgICAgICAgIGlmICh2YWwgJiAw eDQwKQorICAgICAgICAgICAgc21iX3RyYW5zYWN0aW9uKHMpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4MDM6IC8qIFNNQkhTVENNRCAqLworICAgICAgICBzLT5zbWJfY21kID0gdmFsOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDQ6IC8qIFNNQkhTVEFERCAqLworICAgICAgICBz LT5zbWJfYWRkciA9IHZhbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA1OiAvKiBTTUJI U1REQVQwICovCisgICAgICAgIHMtPnNtYl9kYXRhMCA9IHZhbDsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSAweDA2OiAvKiBTTUJIU1REQVQxICovCisgICAgICAgIHMtPnNtYl9kYXRhMSA9IHZh bDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA3OiAvKiBTTUJCTEtEQVQgKi8KKyAgICAg ICAgcy0+c21iX2RhdGFbcy0+c21iX2luZGV4KytdID0gdmFsOworICAgICAgICBpZiAocy0+c21i X2luZGV4ID4gMzEpCisgICAgICAgICAgICBzLT5zbWJfaW5kZXggPSAwOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50 MzJfdCBzbWJfaW9wb3J0X3JlYWRiKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcikKK3sKKyAg ICBQSUlYNFBNU3RhdGUgKnMgPSBvcGFxdWU7CisgICAgdWludDMyX3QgdmFsOworCisgICAgYWRk ciAmPSAweDNmOworICAgIHN3aXRjaChhZGRyKSB7CisgICAgY2FzZSAweDAwOiAvKiBTTUJIU1RT VFMgKi8KKyAgICAgICAgdmFsID0gcy0+c21iX3N0YXQ7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgMHgwMjogLyogU01CSFNUQ05UICovCisgICAgICAgIHMtPnNtYl9pbmRleCA9IDA7CisgICAg ICAgIHZhbCA9IHMtPnNtYl9jdGwgJiAweDFmOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4 MDM6IC8qIFNNQkhTVENNRCAqLworICAgICAgICB2YWwgPSBzLT5zbWJfY21kOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIDB4MDQ6IC8qIFNNQkhTVEFERCAqLworICAgICAgICB2YWwgPSBzLT5z bWJfYWRkcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDA1OiAvKiBTTUJIU1REQVQwICov CisgICAgICAgIHZhbCA9IHMtPnNtYl9kYXRhMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAw eDA2OiAvKiBTTUJIU1REQVQxICovCisgICAgICAgIHZhbCA9IHMtPnNtYl9kYXRhMTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAweDA3OiAvKiBTTUJCTEtEQVQgKi8KKyAgICAgICAgdmFsID0g cy0+c21iX2RhdGFbcy0+c21iX2luZGV4KytdOworICAgICAgICBpZiAocy0+c21iX2luZGV4ID4g MzEpCisgICAgICAgICAgICBzLT5zbWJfaW5kZXggPSAwOworICAgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgICB2YWwgPSAwOworICAgICAgICBicmVhazsKKyAgICB9CisjaWZkZWYg REVCVUcKKyAgICBwcmludGYoIlNNQiByZWFkYiBwb3J0PTB4JTA0eCB2YWw9MHglMDJ4XG4iLCBh ZGRyLCB2YWwpOworI2VuZGlmCisgICAgcmV0dXJuIHZhbDsKK30KKwogLyogWFhYOiB3ZSBzdGls bCBhZGQgaXQgdG8gdGhlIFBJSVgzIGFuZCB3ZSBjb3VudCBvbiB0aGUgZmFjdCB0aGF0CiAgICBP U2VzIGFyZSBzbWFydCBlbm91Z2ggdG8gYWNjZXB0IHRoaXMgc3RyYW5nZSBjb25maWd1cmF0aW9u ICovCiB2b2lkIHBpaXg0X3BtX2luaXQoUENJQnVzICpidXMsIGludCBkZXZmbikKIHsKICAgICBQ SUlYNFBNU3RhdGUgKnM7CiAgICAgdWludDhfdCAqcGNpX2NvbmY7Ci0gICAgdWludDMyX3QgcG1f aW9fYmFzZTsKKyAgICB1aW50MzJfdCBwbV9pb19iYXNlLCBzbWJfaW9fYmFzZTsKIAogICAgIHMg PSAoUElJWDRQTVN0YXRlICopcGNpX3JlZ2lzdGVyX2RldmljZShidXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQTSIsIHNpemVvZihQSUlYNFBNU3RhdGUpLApA QCAtMjU5LDEwICs0MTcsMjIgQEAgdm9pZCBwaWl4NF9wbV9pbml0KFBDSUJ1cyAqYnVzLCBpbnQg ZGV2ZgogICAgIHBjaV9jb25mWzB4NjddID0gKHNlcmlhbF9oZHNbMF0gIT0gTlVMTCA/IDB4MDgg OiAwKSB8CiAJKHNlcmlhbF9oZHNbMV0gIT0gTlVMTCA/IDB4OTAgOiAwKTsKIAorICAgIHNtYl9p b19iYXNlID0gU01CX0lPX0JBU0U7CisgICAgcGNpX2NvbmZbMHg5MF0gPSBzbWJfaW9fYmFzZSB8 IDE7CisgICAgcGNpX2NvbmZbMHg5MV0gPSBzbWJfaW9fYmFzZSA+PiA4OworICAgIHBjaV9jb25m WzB4ZDJdID0gMHgwOTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfd3JpdGUoc21iX2lvX2Jhc2UsIDY0 LCAxLCBzbWJfaW9wb3J0X3dyaXRlYiwgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoc21i X2lvX2Jhc2UsIDY0LCAxLCBzbWJfaW9wb3J0X3JlYWRiLCBzKTsKKwogICAgIHMtPnRtcl90aW1l ciA9IHFlbXVfbmV3X3RpbWVyKHZtX2Nsb2NrLCBwbV90bXJfdGltZXIsIHMpOwogICAgIHBpaXg0 X3BtX3N0YXRlID0gczsKIH0KIAordm9pZCBwaWl4NF9zbWJ1c19yZWdpc3Rlcl9kZXZpY2UoU01C dXNEZXZpY2UgKmRldiwgdWludDhfdCBhZGRyKQoreworICAgIHBpaXg0X3BtX3N0YXRlLT5zbWJf ZGV2W2FkZHJdID0gZGV2OworfQorCiAvKiBBQ1BJIHRhYmxlcyAqLwogLyogWFhYOiBtb3ZlIHRo ZW0gaW4gdGhlIEJvY2hzIEJJT1MgPyAqLwogCkluZGV4OiBxZW11LTAuOC4yL2h3L3NtYnVzLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBxZW11LTAuOC4yL2h3L3NtYnVzLmgKQEAgLTAs MCArMSwzOCBAQAorLyoKKyAqIFFFTVUgU01CdXMgQVBJCisgKiAKKyAqIENvcHlyaWdodCAoYykg MjAwNyBBcmFzdHJhLCBJbmMuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz ZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g d2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBTTUJ1 c0RldmljZSBTTUJ1c0RldmljZTsKKworc3RydWN0IFNNQnVzRGV2aWNlIHsKKyAgICB1aW50OF90 IGFkZHI7CisgICAgdm9pZCAoKnF1aWNrX2NtZCkoU01CdXNEZXZpY2UgKmRldiwgdWludDhfdCBy ZWFkKTsKKyAgICB2b2lkICgqc2VuZF9ieXRlKShTTUJ1c0RldmljZSAqZGV2LCB1aW50OF90IHZh bCk7CisgICAgdWludDhfdCAoKnJlY2VpdmVfYnl0ZSkoU01CdXNEZXZpY2UgKmRldik7CisgICAg dm9pZCAoKndyaXRlX2J5dGUpKFNNQnVzRGV2aWNlICpkZXYsIHVpbnQ4X3QgY21kLCB1aW50OF90 IHZhbCk7CisgICAgdWludDhfdCAoKnJlYWRfYnl0ZSkoU01CdXNEZXZpY2UgKmRldiwgdWludDhf dCBjbWQpOworICAgIHZvaWQgKCp3cml0ZV93b3JkKShTTUJ1c0RldmljZSAqZGV2LCB1aW50OF90 IGNtZCwgdWludDE2X3QgdmFsKTsKKyAgICB1aW50MTZfdCAoKnJlYWRfd29yZCkoU01CdXNEZXZp Y2UgKmRldiwgdWludDhfdCBjbWQpOworICAgIHZvaWQgKCp3cml0ZV9ibG9jaykoU01CdXNEZXZp Y2UgKmRldiwgdWludDhfdCBjbWQsIHVpbnQ4X3QgbGVuLCB1aW50OF90ICpidWYpOworICAgIHVp bnQ4X3QgKCpyZWFkX2Jsb2NrKShTTUJ1c0RldmljZSAqZGV2LCB1aW50OF90IGNtZCwgdWludDhf dCAqYnVmKTsKK307CkluZGV4OiBxZW11LTAuOC4yL2h3L3NtYnVzX2VlcHJvbS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIC9kZXYvbnVsbAorKysgcWVtdS0wLjguMi9ody9zbWJ1c19lZXByb20uYwpAQCAtMCww ICsxLDk0IEBACisvKgorICogUUVNVSBTTUJ1cyBFRVBST00gZGV2aWNlCisgKiAKKyAqIENvcHly aWdodCAoYykgMjAwNyBBcmFzdHJhLCBJbmMuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK KyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us IGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK KyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAi dmwuaCIKKworLy8jZGVmaW5lIERFQlVHCisKK3R5cGVkZWYgc3RydWN0IFNNQnVzRUVQUk9NRGV2 aWNlIHsKKyAgICBTTUJ1c0RldmljZSBkZXY7CisgICAgdWludDhfdCAqZGF0YTsKKyAgICB1aW50 OF90IG9mZnNldDsKK30gU01CdXNFRVBST01EZXZpY2U7CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9x dWlja19jbWQoU01CdXNEZXZpY2UgKmRldiwgdWludDhfdCByZWFkKQoreworI2lmZGVmIERFQlVH CisgICAgcHJpbnRmKCJlZXByb21fcXVpY2tfY21kOiBhZGRyPTB4JTAyeCByZWFkPSVkXG4iLCBk ZXYtPmFkZHIsIHJlYWQpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9zZW5kX2J5 dGUoU01CdXNEZXZpY2UgKmRldiwgdWludDhfdCB2YWwpCit7CisgICAgU01CdXNFRVBST01EZXZp Y2UgKmVlcHJvbSA9IChTTUJ1c0VFUFJPTURldmljZSAqKSBkZXY7CisjaWZkZWYgREVCVUcKKyAg ICBwcmludGYoImVlcHJvbV9zZW5kX2J5dGU6IGFkZHI9MHglMDJ4IHZhbD0weCUwMnhcbiIsIGRl di0+YWRkciwgdmFsKTsKKyNlbmRpZgorICAgIGVlcHJvbS0+b2Zmc2V0ID0gdmFsOworfQorCitz dGF0aWMgdWludDhfdCBlZXByb21fcmVjZWl2ZV9ieXRlKFNNQnVzRGV2aWNlICpkZXYpCit7Cisg ICAgU01CdXNFRVBST01EZXZpY2UgKmVlcHJvbSA9IChTTUJ1c0VFUFJPTURldmljZSAqKSBkZXY7 CisgICAgdWludDhfdCB2YWwgPSBlZXByb20tPmRhdGFbZWVwcm9tLT5vZmZzZXQrK107CisjaWZk ZWYgREVCVUcKKyAgICBwcmludGYoImVlcHJvbV9yZWNlaXZlX2J5dGU6IGFkZHI9MHglMDJ4IHZh bD0weCUwMnhcbiIsIGRldi0+YWRkciwgdmFsKTsKKyNlbmRpZgorICAgIHJldHVybiB2YWw7Cit9 CisKK3N0YXRpYyB2b2lkIGVlcHJvbV93cml0ZV9ieXRlKFNNQnVzRGV2aWNlICpkZXYsIHVpbnQ4 X3QgY21kLCB1aW50OF90IHZhbCkKK3sKKyAgICBTTUJ1c0VFUFJPTURldmljZSAqZWVwcm9tID0g KFNNQnVzRUVQUk9NRGV2aWNlICopIGRldjsKKyNpZmRlZiBERUJVRworICAgIHByaW50ZigiZWVw cm9tX3dyaXRlX2J5dGU6IGFkZHI9MHglMDJ4IGNtZD0weCUwMnggdmFsPTB4JTAyeFxuIiwgZGV2 LT5hZGRyLAorICAgICAgICAgICBjbWQsIHZhbCk7CisjZW5kaWYKKyAgICBlZXByb20tPmRhdGFb Y21kXSA9IHZhbDsKK30KKworc3RhdGljIHVpbnQ4X3QgZWVwcm9tX3JlYWRfYnl0ZShTTUJ1c0Rl dmljZSAqZGV2LCB1aW50OF90IGNtZCkKK3sKKyAgICBTTUJ1c0VFUFJPTURldmljZSAqZWVwcm9t ID0gKFNNQnVzRUVQUk9NRGV2aWNlICopIGRldjsKKyAgICB1aW50OF90IHZhbCA9IGVlcHJvbS0+ ZGF0YVtjbWRdOworI2lmZGVmIERFQlVHCisgICAgcHJpbnRmKCJlZXByb21fcmVhZF9ieXRlOiBh ZGRyPTB4JTAyeCBjbWQ9MHglMDJ4IHZhbD0weCUwMnhcbiIsIGRldi0+YWRkciwKKyAgICAgICAg ICAgY21kLCB2YWwpOworI2VuZGlmCisgICAgcmV0dXJuIHZhbDsKK30KKworU01CdXNEZXZpY2Ug KnNtYnVzX2VlcHJvbV9kZXZpY2VfaW5pdCh1aW50OF90IGFkZHIsIHVpbnQ4X3QgKmJ1ZikKK3sK KyAgICBTTUJ1c0VFUFJPTURldmljZSAqZWVwcm9tID0gcWVtdV9tYWxsb2N6KHNpemVvZihTTUJ1 c0VFUFJPTURldmljZSkpOworICAgIGVlcHJvbS0+ZGV2LmFkZHIgPSBhZGRyOworICAgIGVlcHJv bS0+ZGV2LnF1aWNrX2NtZCA9IGVlcHJvbV9xdWlja19jbWQ7CisgICAgZWVwcm9tLT5kZXYuc2Vu ZF9ieXRlID0gZWVwcm9tX3NlbmRfYnl0ZTsKKyAgICBlZXByb20tPmRldi5yZWNlaXZlX2J5dGUg PSBlZXByb21fcmVjZWl2ZV9ieXRlOworICAgIGVlcHJvbS0+ZGV2LndyaXRlX2J5dGUgPSBlZXBy b21fd3JpdGVfYnl0ZTsKKyAgICBlZXByb20tPmRldi5yZWFkX2J5dGUgPSBlZXByb21fcmVhZF9i eXRlOworICAgIGVlcHJvbS0+ZGF0YSA9IGJ1ZjsKKyAgICBlZXByb20tPm9mZnNldCA9IDA7Cisg ICAgcmV0dXJuIChTTUJ1c0RldmljZSAqKSBlZXByb207Cit9CkluZGV4OiBxZW11LTAuOC4yL3Zs LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gcWVtdS0wLjguMi5vcmlnL3ZsLmgKKysrIHFlbXUtMC44LjIvdmwu aApAQCAtOTE3LDExICs5MTcsMTcgQEAgaW50IHBpdF9nZXRfb3V0KFBJVFN0YXRlICpwaXQsIGlu dCBjaGFubgogdm9pZCBwY3Nwa19pbml0KFBJVFN0YXRlICopOwogaW50IHBjc3BrX2F1ZGlvX2lu aXQoQXVkaW9TdGF0ZSAqKTsKIAorI2luY2x1ZGUgImh3L3NtYnVzLmgiCisKIC8qIGFjcGkuYyAq LwogZXh0ZXJuIGludCBhY3BpX2VuYWJsZWQ7CiB2b2lkIHBpaXg0X3BtX2luaXQoUENJQnVzICpi dXMsIGludCBkZXZmbik7Cit2b2lkIHBpaXg0X3NtYnVzX3JlZ2lzdGVyX2RldmljZShTTUJ1c0Rl dmljZSAqZGV2LCB1aW50OF90IGFkZHIpOwogdm9pZCBhY3BpX2Jpb3NfaW5pdCh2b2lkKTsKIAor Lyogc21idXNfZWVwcm9tLmMgKi8KK1NNQnVzRGV2aWNlICpzbWJ1c19lZXByb21fZGV2aWNlX2lu aXQodWludDhfdCBhZGRyLCB1aW50OF90ICpidWYpOworCiAvKiBwYy5jICovCiBleHRlcm4gUUVN VU1hY2hpbmUgcGNfbWFjaGluZTsKIGV4dGVybiBRRU1VTWFjaGluZSBpc2FwY19tYWNoaW5lOwpJ bmRleDogcWVtdS0wLjguMi9ody9wYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUtMC44LjIub3JpZy9o dy9wYy5jCisrKyBxZW11LTAuOC4yL2h3L3BjLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRl ICJ2bC5oIgogCiAjaW5jbHVkZSA8ZGxmY24uaD4gLyogRm9yIGRsb3BlbiBvZiBodyBwbHVnaW4g c2hhcmVkIGxpYnJhcmllcyAqLworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKIC8qIG91dHB1dCBC b2NocyBiaW9zIGluZm8gbWVzc2FnZXMgKi8KIC8vI2RlZmluZSBERUJVR19CSU9TCkBAIC0zMiw2 ICszMyw3IEBACiAjZGVmaW5lIFZHQUJJT1NfRklMRU5BTUUgInZnYWJpb3MuYmluIgogI2RlZmlu ZSBWR0FCSU9TX0NJUlJVU19GSUxFTkFNRSAidmdhYmlvcy1jaXJydXMuYmluIgogI2RlZmluZSBM SU5VWF9CT09UX0ZJTEVOQU1FICJsaW51eF9ib290LmJpbiIKKyNkZWZpbmUgU01CVVNfRUVQUk9N X0ZJTEVOQU1FICJzbWJ1c19lZXByb20uYmluIgogCiAjZGVmaW5lIEtFUk5FTF9MT0FEX0FERFIg ICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgSU5JVFJEX0xPQURfQUREUiAgICAgMHgwMDYwMDAwMApA QCAtODYzLDcgKzg2NSwyMiBAQCBzdGF0aWMgdm9pZCBwY19pbml0MShpbnQgcmFtX3NpemUsIGlu dCB2CiAgICAgfQogCiAgICAgaWYgKHBjaV9lbmFibGVkICYmIGFjcGlfZW5hYmxlZCkgeworICAg ICAgICBpbnQgZjsKKyAgICAgICAgdWludDhfdCAqZCA9IE1BUF9GQUlMRUQ7CiAgICAgICAgIHBp aXg0X3BtX2luaXQocGNpX2J1cywgcGlpeDNfZGV2Zm4gKyAzKTsKKyAgICAgICAgc25wcmludGYo YnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzIiwgYmlvc19kaXIsIFNNQlVTX0VFUFJPTV9GSUxFTkFN RSk7CisgICAgICAgIGYgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKKyAgICAgICAgaWYgKGYgPj0gMCkg eworICAgICAgICAgICAgZnRydW5jYXRlKGYsIDggKiAyNTYpOworICAgICAgICAgICAgZCA9IG1t YXAoMCwgOCAqIDI1NiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZiwgMCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGQgPT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgICAgIGQg PSBxZW11X21hbGxvY3ooOCAqIDI1Nik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKysp IHsKKyAgICAgICAgICAgIFNNQnVzRGV2aWNlICplZXByb20gPSBzbWJ1c19lZXByb21fZGV2aWNl X2luaXQoMHg1MCArIGksCisgICAgICAgICAgICAgICAgZCArIChpICogMjU2KSk7CisgICAgICAg ICAgICBwaWl4NF9zbWJ1c19yZWdpc3Rlcl9kZXZpY2UoZWVwcm9tLCAweDUwICsgaSk7CisgICAg ICAgIH0KICAgICB9CiAKICNpZiAwCkluZGV4OiBxZW11LTAuOC4yL01ha2VmaWxlLnRhcmdldAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBxZW11LTAuOC4yLm9yaWcvTWFrZWZpbGUudGFyZ2V0CisrKyBxZW11LTAu OC4yL01ha2VmaWxlLnRhcmdldApAQCAtMzM4LDcgKzMzOCw3IEBAIGlmZXEgKCQoVEFSR0VUX0JB U0VfQVJDSCksIGkzODYpCiBWTF9PQkpTKz0gaWRlLm8gcGNrYmQubyBwczIubyB2Z2EubyAkKFNP VU5EX0hXKSBkbWEubyAkKEFVRElPRFJWKQogVkxfT0JKUys9IGZkYy5vIG1jMTQ2ODE4cnRjLm8g c2VyaWFsLm8gaTgyNTkubyBpODI1NC5vIHBjc3BrLm8gcGMubwogVkxfT0JKUys9IGNpcnJ1c192 Z2EubyBtaXhlbmcubyBhcGljLm8gcGFyYWxsZWwubyBhY3BpLm8gcGlpeF9wY2kubwotVkxfT0JK Uys9IHVzYi11aGNpLm8KK1ZMX09CSlMrPSB1c2ItdWhjaS5vIHNtYnVzX2VlcHJvbS5vCiBERUZJ TkVTICs9IC1ESEFTX0FVRElPCiBlbmRpZgogaWZlcSAoJChUQVJHRVRfQkFTRV9BUkNIKSwgcHBj KQo= ------=_Part_212684_17300655.1169587597424--