From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IWaKE-0004cE-P6 for qemu-devel@nongnu.org; Sat, 15 Sep 2007 12:16:54 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IWaKE-0004b2-4R for qemu-devel@nongnu.org; Sat, 15 Sep 2007 12:16:54 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IWaKD-0004as-Ov for qemu-devel@nongnu.org; Sat, 15 Sep 2007 12:16:53 -0400 Received: from nf-out-0910.google.com ([64.233.182.189]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IWaKD-0004aB-1f for qemu-devel@nongnu.org; Sat, 15 Sep 2007 12:16:53 -0400 Received: by nf-out-0910.google.com with SMTP id 30so957910nfu for ; Sat, 15 Sep 2007 09:16:51 -0700 (PDT) Message-ID: Date: Sat, 15 Sep 2007 19:16:51 +0300 From: "Blue Swirl" Subject: Re: [Qemu-devel] Re: PATCH, RFC: Generic DMA framework In-Reply-To: <200709081703.08899.paul@codesourcery.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_6698_6787252.1189873011211" References: <200709081531.25197.paul@codesourcery.com> <200709081703.08899.paul@codesourcery.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paul Brook Cc: qemu-devel@nongnu.org ------=_Part_6698_6787252.1189873011211 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline I made a first implementation of this concept. CPU->bus uses "southbound" functions, device->CPU "northbound" ones. The system is not symmetric, the device address range allocation could well be separate. What do you think? ------=_Part_6698_6787252.1189873011211 Content-Type: text/x-diff; name="bus_ops.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bus_ops.diff" X-Attachment-Id: f_f6mbluwp SW5kZXg6IHFlbXUvY3B1LWFsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9jcHUtYWxsLmgJ MjAwNy0wOS0xNSAxNTozNDo1MS4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvY3B1LWFsbC5oCTIw MDctMDktMTUgMTY6MDU6MDQuMDAwMDAwMDAwICswMDAwCkBAIC04NjEsNiArODYxLDU0IEBACiB2 b2lkIGR1bXBfZXhlY19pbmZvKEZJTEUgKmYsCiAgICAgICAgICAgICAgICAgICAgIGludCAoKmNw dV9mcHJpbnRmKShGSUxFICpmLCBjb25zdCBjaGFyICpmbXQsIC4uLikpOwogCisvKiBCdXMgb3Bl cmF0aW9ucyAqLwordHlwZWRlZiBzdHJ1Y3QgcWVtdV9idXMgcWVtdV9idXM7CisKK3R5cGVkZWYg dm9pZCAoKnFlbXVfbWVtX3J3X2hhbmRsZXIpKHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVu LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX3dyaXRlKTsKKwor cWVtdV9idXMgKmJ1c19pbml0KHVuc2lnbmVkIGludCBidXNfYml0cywgcWVtdV9tZW1fcndfaGFu ZGxlciBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhbmRsZXJfb3BhcXVlKTsK K3ZvaWQgYnVzX3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShxZW11X2J1cyAqYnVzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBzdGFydF9hZGRy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBoeXNfb2Zm c2V0KTsKK2ludCBidXNfcmVnaXN0ZXJfaW9fbWVtb3J5KHFlbXVfYnVzICpidXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgaW9faW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBDUFVSZWFkTWVtb3J5RnVuYyAqKm1lbV9yZWFkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1BVV3JpdGVNZW1vcnlGdW5jICoqbWVtX3dyaXRlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAqb3BhcXVlKTsKKy8qIERpcmVjdGlvbiBDUFUtPmJyaWRnZS0+ZGV2aWNl L21lbW9yeSAqLwordm9pZCBidXNfcndfc291dGgocWVtdV9idXMgKmJ1cywgdGFyZ2V0X3BoeXNf YWRkcl90IGFkZHIsIHVpbnQ4X3QgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBsZW4sIGludCBpc193cml0ZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgYnVzX3JlYWRfc291dGgo cWVtdV9idXMgKmJ1cywgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworICAg IGJ1c19yd19zb3V0aChidXMsIGFkZHIsIGJ1ZiwgbGVuLCAwKTsKK30KK3N0YXRpYyBpbmxpbmUg dm9pZCBidXNfd3JpdGVfc291dGgocWVtdV9idXMgKmJ1cywgdGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgICBidXNfcndfc291dGgoYnVzLCBhZGRyLCAodWlu dDhfdCAqKWJ1ZiwgbGVuLCAxKTsKK30KK3ZvaWQgYnVzX3dyaXRlX3NvdXRoX3JvbShxZW11X2J1 cyAqYnVzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1aW50OF90ICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworLyogRnJvbSBkZXZpY2Ug dG93YXJkcyBDUFUvbWVtb3J5IChETUEpICovCit2b2lkIGJ1c19yd19ub3J0aChxZW11X2J1cyAq YnVzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDhfdCAqYnVmLAorICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50IGlzX3dyaXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9p ZCBidXNfcmVhZF9ub3J0aChxZW11X2J1cyAqYnVzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIHVuc2lnbmVk IGludCBsZW4pCit7CisgICAgYnVzX3J3X25vcnRoKGJ1cywgYWRkciwgYnVmLCBsZW4sIDApOwor fQorc3RhdGljIGlubGluZSB2b2lkIGJ1c193cml0ZV9ub3J0aChxZW11X2J1cyAqYnVzLCB0YXJn ZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdWludDhfdCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworICAgIGJ1c19yd19ub3J0 aChidXMsIGFkZHIsICh1aW50OF90ICopYnVmLCBsZW4sIDEpOworfQorCiAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGhvc3QgQ1BVIHRpY2tzIChpZiBh dmFpbGFibGUpICovCiAKSW5kZXg6IHFlbXUvZXhlYy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3Jp Zy9leGVjLmMJMjAwNy0wOS0xNSAxNTozNDo1MS4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvZXhl Yy5jCTIwMDctMDktMTUgMTY6MDU6NTQuMDAwMDAwMDAwICswMDAwCkBAIC0yOTA1LDMgKzI5MDUs MjU4IEBACiAjdW5kZWYgZW52CiAKICNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBCdXNQYWdlRGVz YyB7CisgICAgLyogb2Zmc2V0IGluIGhvc3QgbWVtb3J5IG9mIHRoZSBwYWdlICsgaW9faW5kZXgg aW4gdGhlIGxvdyAxMiBiaXRzICovCisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IHBoeXNfb2Zmc2V0 OworfSBCdXNQYWdlRGVzYzsKKworc3RydWN0IHFlbXVfYnVzIHsKKyAgICAvKiBOb3J0aGJvdW5k IGFjY2VzcyBoYW5kbGVyICovCisgICAgcWVtdV9tZW1fcndfaGFuZGxlciBub3J0aF9oYW5kbGVy OworICAgIHZvaWQgICpoYW5kbGVyX29wYXF1ZTsKKyAgICAvKiBTb3V0aGJvdW5kIGFjY2VzcyBt YW5hZ2VtZW50ICovCisgICAgQnVzUGFnZURlc2MgKipsMV9idXNfbWFwOworICAgIHVuc2lnbmVk IGludCBidXNfYml0cywgbDFfYml0cywgbDJfYml0cywgbDFfc2l6ZSwgbDJfc2l6ZTsKKyAgICBD UFVXcml0ZU1lbW9yeUZ1bmMgKmlvX21lbV93cml0ZVtJT19NRU1fTkJfRU5UUklFU11bNF07Cisg ICAgQ1BVUmVhZE1lbW9yeUZ1bmMgKmlvX21lbV9yZWFkW0lPX01FTV9OQl9FTlRSSUVTXVs0XTsK KyAgICB2b2lkICppb19tZW1fb3BhcXVlW0lPX01FTV9OQl9FTlRSSUVTXTsKKyAgICB1bnNpZ25l ZCBpbnQgaW9fbWVtX25iOworfTsKKworc3RhdGljIEJ1c1BhZ2VEZXNjICpidXNfcGFnZV9maW5k X2FsbG9jKHFlbXVfYnVzICpidXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGluZGV4LCBpbnQgYWxsb2MpCit7CisgICAgdm9pZCAq KmxwLCAqKnA7CisgICAgQnVzUGFnZURlc2MgKnBkOworCisgICAgcCA9ICh2b2lkICoqKWJ1cy0+ bDFfYnVzX21hcDsKKyNpZiBUQVJHRVRfUEhZU19BRERSX1NQQUNFX0JJVFMgPiAzMgorICAgIGxw ID0gcCArICgoaW5kZXggPj4gKGJ1cy0+bDFfYml0cyArIGJ1cy0+bDJfYml0cykpICYgKGJ1cy0+ bDFfc2l6ZSAtIDEpKTsKKyAgICBwID0gKmxwOworICAgIGlmICghcCkgeworICAgICAgICAvKiBh bGxvY2F0ZSBpZiBub3QgZm91bmQgKi8KKyAgICAgICAgaWYgKCFhbGxvYykKKyAgICAgICAgICAg IHJldHVybiBOVUxMOworICAgICAgICBwID0gcWVtdV92bWFsbG9jKHNpemVvZih2b2lkICopICog YnVzLT5sMV9zaXplKTsKKyAgICAgICAgbWVtc2V0KHAsIDAsIHNpemVvZih2b2lkICopICogYnVz LT5sMV9zaXplKTsKKyAgICAgICAgKmxwID0gcDsKKyAgICB9CisjZW5kaWYKKyAgICBscCA9IHAg KyAoKGluZGV4ID4+IGJ1cy0+bDJfYml0cykgJiAoYnVzLT5sMV9zaXplIC0gMSkpOworICAgIHBk ID0gKmxwOworICAgIGlmICghcGQpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAg IC8qIGFsbG9jYXRlIGlmIG5vdCBmb3VuZCAqLworICAgICAgICBpZiAoIWFsbG9jKQorICAgICAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHBkID0gcWVtdV92bWFsbG9jKHNpemVvZihCdXNQ YWdlRGVzYykgKiBidXMtPmwyX3NpemUpOworICAgICAgICAqbHAgPSBwZDsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IGJ1cy0+bDJfc2l6ZTsgaSsrKQorICAgICAgICAgICAgcGRbaV0ucGh5c19v ZmZzZXQgPSBJT19NRU1fVU5BU1NJR05FRDsKKyAgICB9CisgICAgcmV0dXJuICgoQnVzUGFnZURl c2MgKilwZCkgKyAoaW5kZXggJiAoYnVzLT5sMl9zaXplIC0gMSkpOworfQorCitzdGF0aWMgaW5s aW5lIEJ1c1BhZ2VEZXNjICpidXNfcGFnZV9maW5kKHFlbXVfYnVzICpidXMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBpbmRleCkK K3sKKyAgICByZXR1cm4gYnVzX3BhZ2VfZmluZF9hbGxvYyhidXMsIGluZGV4LCAwKTsKK30KKwor aW50IGJ1c19yZWdpc3Rlcl9pb19tZW1vcnkocWVtdV9idXMgKmJ1cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpb19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQ VVJlYWRNZW1vcnlGdW5jICoqbWVtX3JlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBD UFVXcml0ZU1lbW9yeUZ1bmMgKiptZW1fd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpvcGFxdWUpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoaW9faW5k ZXggPD0gMCkgeworICAgICAgICBpZiAoaW9fbWVtX25iID49IElPX01FTV9OQl9FTlRSSUVTKQor ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpb19pbmRleCA9IGlvX21lbV9uYisrOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpb19pbmRleCA+PSBJT19NRU1fTkJfRU5UUklFUykK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IoaSA9IDA7IGkgPCAzOyBp KyspIHsKKyAgICAgICAgYnVzLT5pb19tZW1fcmVhZFtpb19pbmRleF1baV0gPSBtZW1fcmVhZFtp XTsKKyAgICAgICAgYnVzLT5pb19tZW1fd3JpdGVbaW9faW5kZXhdW2ldID0gbWVtX3dyaXRlW2ld OworICAgIH0KKyAgICBidXMtPmlvX21lbV9vcGFxdWVbaW9faW5kZXhdID0gb3BhcXVlOworICAg IHJldHVybiBpb19pbmRleCA8PCBJT19NRU1fU0hJRlQ7Cit9CisKK3ZvaWQgYnVzX3J3X3NvdXRo KHFlbXVfYnVzICpidXMsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50OF90ICpidWYsCisg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCit7CisgICAg aW50IGwsIGlvX2luZGV4OworICAgIHVpbnQ4X3QgKnB0cjsKKyAgICB1aW50MzJfdCB2YWw7Cisg ICAgdGFyZ2V0X3BoeXNfYWRkcl90IHBhZ2U7CisgICAgdW5zaWduZWQgbG9uZyBwZDsKKyAgICBC dXNQYWdlRGVzYyAqcDsKKworICAgIHdoaWxlIChsZW4gPiAwKSB7CisgICAgICAgIHBhZ2UgPSBh ZGRyICYgVEFSR0VUX1BBR0VfTUFTSzsKKyAgICAgICAgbCA9IChwYWdlICsgVEFSR0VUX1BBR0Vf U0laRSkgLSBhZGRyOworICAgICAgICBpZiAobCA+IGxlbikKKyAgICAgICAgICAgIGwgPSBsZW47 CisgICAgICAgIHAgPSBidXNfcGFnZV9maW5kKGJ1cywgcGFnZSA+PiBUQVJHRVRfUEFHRV9CSVRT KTsKKyAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICBwZCA9IElPX01FTV9VTkFTU0lHTkVE OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGQgPSBwLT5waHlzX29mZnNldDsKKyAg ICAgICAgfQorCisgICAgICAgIGlmIChpc193cml0ZSkgeworICAgICAgICAgICAgaWYgKChwZCAm IH5UQVJHRVRfUEFHRV9NQVNLKSAhPSBJT19NRU1fUkFNKSB7CisgICAgICAgICAgICAgICAgaW9f aW5kZXggPSAocGQgPj4gSU9fTUVNX1NISUZUKSAmIChJT19NRU1fTkJfRU5UUklFUyAtIDEpOwor ICAgICAgICAgICAgICAgIC8qIFhYWDogY291bGQgZm9yY2UgY3B1X3NpbmdsZV9lbnYgdG8gTlVM TCB0byBhdm9pZAorICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbCBidWdzICovCisgICAgICAg ICAgICAgICAgaWYgKGwgPj0gNCAmJiAoKGFkZHIgJiAzKSA9PSAwKSkgeworICAgICAgICAgICAg ICAgICAgICAvKiAzMiBiaXQgd3JpdGUgYWNjZXNzICovCisgICAgICAgICAgICAgICAgICAgIHZh bCA9IGxkbF9wKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIGJ1cy0+aW9fbWVtX3dyaXRlW2lv X2luZGV4XVsyXShpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsIHZhbCk7CisgICAgICAgICAgICAg ICAgICAgIGwgPSA0OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobCA+PSAyICYmICgoYWRk ciAmIDEpID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIDE2IGJpdCB3cml0ZSBhY2Nl c3MgKi8KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gbGR1d19wKGJ1Zik7CisgICAgICAgICAg ICAgICAgICAgIGJ1cy0+aW9fbWVtX3dyaXRlW2lvX2luZGV4XVsxXShpb19tZW1fb3BhcXVlW2lv X2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFkZHIsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIGwgPSAyOworICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8qIDggYml0IHdyaXRlIGFjY2VzcyAq LworICAgICAgICAgICAgICAgICAgICB2YWwgPSBsZHViX3AoYnVmKTsKKyAgICAgICAgICAgICAg ICAgICAgYnVzLT5pb19tZW1fd3JpdGVbaW9faW5kZXhdWzBdKGlvX21lbV9vcGFxdWVbaW9faW5k ZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YWRkciwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbCA9IDE7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFk ZHIxOworCisgICAgICAgICAgICAgICAgYWRkcjEgPSAocGQgJiBUQVJHRVRfUEFHRV9NQVNLKSAr IChhZGRyICYgflRBUkdFVF9QQUdFX01BU0spOworICAgICAgICAgICAgICAgIC8qIFJBTSBjYXNl ICovCisgICAgICAgICAgICAgICAgcHRyID0gcGh5c19yYW1fYmFzZSArIGFkZHIxOworICAgICAg ICAgICAgICAgIG1lbWNweShwdHIsIGJ1ZiwgbCk7CisgICAgICAgICAgICAgICAgaWYgKCFjcHVf cGh5c2ljYWxfbWVtb3J5X2lzX2RpcnR5KGFkZHIxKSkgeworICAgICAgICAgICAgICAgICAgICAv KiBpbnZhbGlkYXRlIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgdGJfaW52YWxpZGF0ZV9w aHlzX3BhZ2VfcmFuZ2UoYWRkcjEsIGFkZHIxICsgbCwgMCk7CisgICAgICAgICAgICAgICAgICAg IC8qIHNldCBkaXJ0eSBiaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgcGh5c19yYW1fZGlydHlb YWRkcjEgPj4gVEFSR0VUX1BBR0VfQklUU10gfD0KKyAgICAgICAgICAgICAgICAgICAgICAgICgw eGZmICYgfkNPREVfRElSVFlfRkxBRyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChwZCAmIH5UQVJHRVRfUEFHRV9N QVNLKSA+IElPX01FTV9ST00gJiYKKyAgICAgICAgICAgICAgICAhKHBkICYgSU9fTUVNX1JPTUQp KSB7CisgICAgICAgICAgICAgICAgLyogSS9PIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBpb19p bmRleCA9IChwZCA+PiBJT19NRU1fU0hJRlQpICYgKElPX01FTV9OQl9FTlRSSUVTIC0gMSk7Cisg ICAgICAgICAgICAgICAgaWYgKGwgPj0gNCAmJiAoKGFkZHIgJiAzKSA9PSAwKSkgeworICAgICAg ICAgICAgICAgICAgICAvKiAzMiBiaXQgcmVhZCBhY2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAg ICAgdmFsID0gYnVzLT5pb19tZW1fcmVhZFtpb19pbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpb19p bmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFkZHIpOworICAgICAgICAgICAgICAgICAgICBzdGxfcChidWYsIHZhbCk7CisgICAg ICAgICAgICAgICAgICAgIGwgPSA0OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobCA+PSAy ICYmICgoYWRkciAmIDEpID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIDE2IGJpdCBy ZWFkIGFjY2VzcyAqLworICAgICAgICAgICAgICAgICAgICB2YWwgPSBidXMtPmlvX21lbV9yZWFk W2lvX2luZGV4XVsxXShpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcik7CisgICAgICAgICAg ICAgICAgICAgIHN0d19wKGJ1ZiwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgbCA9IDI7Cisg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogOCBiaXQgcmVh ZCBhY2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgdmFsID0gYnVzLT5pb19tZW1fcmVhZFtp b19pbmRleF1bMF0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIpOworICAgICAgICAgICAg ICAgICAgICBzdGJfcChidWYsIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIGwgPSAxOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyog UkFNIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBwdHIgPSBwaHlzX3JhbV9iYXNlICsgKHBkICYg VEFSR0VUX1BBR0VfTUFTSykgKworICAgICAgICAgICAgICAgICAgICAoYWRkciAmIH5UQVJHRVRf UEFHRV9NQVNLKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIGwpOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxlbiAtPSBsOworICAgICAgICBidWYgKz0gbDsK KyAgICAgICAgYWRkciArPSBsOworICAgIH0KK30KKworLyogdXNlZCBmb3IgUk9NIGxvYWRpbmcg OiBjYW4gd3JpdGUgaW4gUkFNIGFuZCBST00gKi8KK3ZvaWQgYnVzX3dyaXRlX3NvdXRoX3JvbShx ZW11X2J1cyAqYnVzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90ICpidWYsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgaW50 IGw7CisgICAgdWludDhfdCAqcHRyOworICAgIHRhcmdldF9waHlzX2FkZHJfdCBwYWdlOworICAg IHVuc2lnbmVkIGxvbmcgcGQ7CisgICAgQnVzUGFnZURlc2MgKnA7CisKKyAgICB3aGlsZSAobGVu ID4gMCkgeworICAgICAgICBwYWdlID0gYWRkciAmIFRBUkdFVF9QQUdFX01BU0s7CisgICAgICAg IGwgPSAocGFnZSArIFRBUkdFVF9QQUdFX1NJWkUpIC0gYWRkcjsKKyAgICAgICAgaWYgKGwgPiBs ZW4pCisgICAgICAgICAgICBsID0gbGVuOworICAgICAgICBwID0gYnVzX3BhZ2VfZmluZChidXMs IHBhZ2UgPj4gVEFSR0VUX1BBR0VfQklUUyk7CisgICAgICAgIGlmICghcCkgeworICAgICAgICAg ICAgcGQgPSBJT19NRU1fVU5BU1NJR05FRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHBkID0gcC0+cGh5c19vZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBkICYgflRB UkdFVF9QQUdFX01BU0spICE9IElPX01FTV9SQU0gJiYKKyAgICAgICAgICAgIChwZCAmIH5UQVJH RVRfUEFHRV9NQVNLKSAhPSBJT19NRU1fUk9NICYmCisgICAgICAgICAgICAhKHBkICYgSU9fTUVN X1JPTUQpKSB7CisgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIxOworCisgICAgICAgICAgICBhZGRyMSA9 IChwZCAmIFRBUkdFVF9QQUdFX01BU0spICsgKGFkZHIgJiB+VEFSR0VUX1BBR0VfTUFTSyk7Cisg ICAgICAgICAgICAvKiBST00vUkFNIGNhc2UgKi8KKyAgICAgICAgICAgIHB0ciA9IHBoeXNfcmFt X2Jhc2UgKyBhZGRyMTsKKyAgICAgICAgICAgIG1lbWNweShwdHIsIGJ1ZiwgbCk7CisgICAgICAg IH0KKyAgICAgICAgbGVuIC09IGw7CisgICAgICAgIGJ1ZiArPSBsOworICAgICAgICBhZGRyICs9 IGw7CisgICAgfQorfQorCit2b2lkIGJ1c19yd19ub3J0aChxZW11X2J1cyAqYnVzLCB0YXJnZXRf cGh5c19hZGRyX3QgYWRkciwgdWludDhfdCAqYnVmLAorICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGxlbiwgaW50IGlzX3dyaXRlKQoreworICAgIGJ1cy0+bm9ydGhfaGFuZGxlcihidXMt PmhhbmRsZXJfb3BhcXVlLCBhZGRyLCBidWYsIGxlbiwgaXNfd3JpdGUpOworfQorCitxZW11X2J1 cyAqYnVzX2luaXQodW5zaWduZWQgaW50IGJ1c19iaXRzLCBxZW11X21lbV9yd19oYW5kbGVyIG5v cnRoX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqaGFuZGxlcl9vcGFxdWUpCit7 CisgICAgcWVtdV9idXMgKmJ1czsKKworICAgIGJ1cyA9IHFlbXVfbWFsbG9jeihzaXplb2YocWVt dV9idXMpKTsKKyAgICBidXMtPm5vcnRoX2hhbmRsZXIgPSBub3J0aF9oYW5kbGVyOworICAgIGJ1 cy0+YnVzX2JpdHMgPSBidXNfYml0czsKKyAgICBidXMtPmwyX2JpdHMgPSAxMDsKKyAgICBidXMt PmwxX2JpdHMgPSBidXMtPmJ1c19iaXRzIC0gYnVzLT5sMl9iaXRzIC0gVEFSR0VUX1BBR0VfQklU UzsKKyAgICBidXMtPmwxX3NpemUgPSAoMSA8PCBidXMtPmwxX2JpdHMpOworICAgIGJ1cy0+bDJf c2l6ZSA9ICgxIDw8IGJ1cy0+bDJfYml0cyk7CisgICAgYnVzLT5sMV9idXNfbWFwID0gcWVtdV92 bWFsbG9jKGJ1cy0+bDFfc2l6ZSAqIHNpemVvZih2b2lkICopKTsKKyAgICBtZW1zZXQoYnVzLT5s MV9idXNfbWFwLCAwLCBidXMtPmwxX3NpemUgKiBzaXplb2Yodm9pZCAqKSk7CisgICAgYnVzLT5o YW5kbGVyX29wYXF1ZSA9IGhhbmRsZXJfb3BhcXVlOworCisgICAgLyogUmVnaXN0ZXIgZGVmYXVs dCB0eXBlcyAqLworICAgIGJ1c19yZWdpc3Rlcl9pb19tZW1vcnkoYnVzLCBJT19NRU1fUk9NID4+ IElPX01FTV9TSElGVCwgZXJyb3JfbWVtX3JlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bmFzc2lnbmVkX21lbV93cml0ZSwgTlVMTCk7CisgICAgYnVzX3JlZ2lzdGVyX2lvX21lbW9y eShidXMsIElPX01FTV9VTkFTU0lHTkVEID4+IElPX01FTV9TSElGVCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuYXNzaWduZWRfbWVtX3JlYWQsIHVuYXNzaWduZWRfbWVtX3dyaXRlLCBO VUxMKTsKKyAgICBidXNfcmVnaXN0ZXJfaW9fbWVtb3J5KGJ1cywgSU9fTUVNX05PVERJUlRZID4+ IElPX01FTV9TSElGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX21lbV9yZWFk LCBub3RkaXJ0eV9tZW1fd3JpdGUsIE5VTEwpOworICAgIGJ1cy0+aW9fbWVtX25iID0gNTsKKwor ICAgIHJldHVybiBidXM7Cit9Cg== ------=_Part_6698_6787252.1189873011211--