From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [5/5] usb: typec: ucsi: Support for DisplayPort alt mode From: Heikki Krogerus Message-Id: <20190201104758.1483-6-heikki.krogerus@linux.intel.com> Date: Fri, 1 Feb 2019 13:47:58 +0300 To: Greg Kroah-Hartman , Ajay Gupta , Michael Hsu Cc: linux-usb@vger.kernel.org List-ID: VGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBiaW5kIGEgZHJpdmVyIHRvIGEgRGlzcGxheVBvcnQK YWx0IG1vZGUgYWRhcHRlciBkZXZpY2VzLgoKVGhlIGRyaXZlciBhdHRlbXB0cyB0byBjb3BlIHdp dGggdGhlIGxpbWl0YXRpb25zIG9mIFVDU0kgYnkKImVtdWxhdGluZyIgYmVoYXZpb3VyIGFuZCBh dHRlbXB0aW5nIHRvIGd1ZXNzIHRoaW5ncyB3aGVuCmV2ZXIgcG9zc2libGUgaW4gb3JkZXIgdG8g c2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIHRoZQpzdGFuZGFyZCBEaXNwbGF5UG9ydCBhbHQgbW9k ZSBkcml2ZXIgaGFzLgoKU2lnbmVkLW9mZi1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3Jv Z2VydXNAbGludXguaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZp bGUgICAgICB8ICAxNSArLQogZHJpdmVycy91c2IvdHlwZWMvdWNzaS9kaXNwbGF5cG9ydC5jIHwg MzAxICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy91c2IvdHlwZWMvdWNzaS91 Y3NpLmMgICAgICAgIHwgIDIyICstCiBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuaCAgICAg ICAgfCAgMjEgKysKIDQgZmlsZXMgY2hhbmdlZCwgMzUxIGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS9kaXNwbGF5 cG9ydC5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZSBiL2Ry aXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKaW5kZXggMmY0OTAwYjI2MjEwLi5iMzVlMTVh MWYwMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZQpAQCAtMSwxMiArMSwxNSBAQAogIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotQ0ZMQUdTX3RyYWNlLm8JCQk6PSAtSSQoc3Jj KQorQ0ZMQUdTX3RyYWNlLm8JCQkJOj0gLUkkKHNyYykKIAotb2JqLSQoQ09ORklHX1RZUEVDX1VD U0kpCSs9IHR5cGVjX3Vjc2kubworb2JqLSQoQ09ORklHX1RZUEVDX1VDU0kpCQkrPSB0eXBlY191 Y3NpLm8KIAotdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5vCit0eXBlY191Y3NpLXkJCQkJOj0gdWNz aS5vCiAKLXR5cGVjX3Vjc2ktJChDT05GSUdfVFJBQ0lORykJKz0gdHJhY2UubwordHlwZWNfdWNz aS0kKENPTkZJR19UUkFDSU5HKQkJKz0gdHJhY2UubwogCi1vYmotJChDT05GSUdfVUNTSV9BQ1BJ KQkJKz0gdWNzaV9hY3BpLm8KK2lmbmVxICgkKENPTkZJR19UWVBFQ19EUF9BTFRNT0RFKSwpCisJ dHlwZWNfdWNzaS15CQkJKz0gZGlzcGxheXBvcnQubworZW5kaWYKIAotb2JqLSQoQ09ORklHX1VD U0lfQ0NHKQkJKz0gdWNzaV9jY2cubworb2JqLSQoQ09ORklHX1VDU0lfQUNQSSkJCQkrPSB1Y3Np X2FjcGkubworb2JqLSQoQ09ORklHX1VDU0lfQ0NHKQkJCSs9IHVjc2lfY2NnLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvZGlzcGxheXBvcnQuYyBiL2RyaXZlcnMvdXNiL3R5 cGVjL3Vjc2kvZGlzcGxheXBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjNjNTMxMmNjNzEzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVj L3Vjc2kvZGlzcGxheXBvcnQuYwpAQCAtMCwwICsxLDMwMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVQ1NJIERpc3BsYXlQb3J0IEFsdGVybmF0ZSBNb2Rl IFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgsIEludGVsIENvcnBvcmF0aW9uCisg KiBBdXRob3I6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNv bT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjX2RwLmg+CisjaW5jbHVkZSA8bGlu dXgvdXNiL3BkX3Zkby5oPgorCisjaW5jbHVkZSAidWNzaS5oIgorCisjZGVmaW5lIFVDU0lfQ01E X1NFVF9ORVdfQ0FNKF9jb25fbnVtXywgX2VudGVyXywgX2NhbV8sIF9hbV8pCQlcCisJIChVQ1NJ X1NFVF9ORVdfQ0FNIHwgKChfY29uX251bV8pIDw8IDE2KSB8ICgoX2VudGVyXykgPDwgMjMpIHwJ XAorCSAgKChfY2FtXykgPDwgMjQpIHwgKCh1NjQpKF9hbV8pIDw8IDMyKSkKKworc3RydWN0IHVj c2lfZHAgeworCXN0cnVjdCB0eXBlY19kaXNwbGF5cG9ydF9kYXRhIGRhdGE7CisJc3RydWN0IHVj c2lfY29ubmVjdG9yICpjb247CisJc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdDsKKwlzdHJ1Y3Qg d29ya19zdHJ1Y3Qgd29yazsKKwlpbnQgb2Zmc2V0OworCisJYm9vbCBvdmVycmlkZTsKKwlib29s IGluaXRpYWxpemVkOworCisJdTMyIGhlYWRlcjsKKwl1MzIgKnZkb19kYXRhOworCXU4IHZkb19z aXplOworfTsKKworLyoKKyAqIE5vdGUuIEFsdGVybmF0ZSBtb2RlIGNvbnRyb2wgaXMgb3B0aW9u YWwgZmVhdHVyZSBpbiBVQ1NJLiBJdCBtZWFucyB0aGF0IGV2ZW4KKyAqIGlmIHRoZSBzeXN0ZW0g c3VwcG9ydHMgYWx0ZXJuYXRlIG1vZGVzLCB0aGUgT1MgbWF5IG5vdCBiZSBhd2FyZSBvZiB0aGVt LgorICoKKyAqIEluIG1vc3QgY2FzZXMgaG93ZXZlciwgdGhlIE9TIHdpbGwgYmUgYWJsZSB0byBz ZWUgdGhlIHN1cHBvcnRlZCBhbHRlcm5hdGUKKyAqIG1vZGVzLCBidXQgaXQgbWF5IHN0aWxsIG5v dCBiZSBhYmxlIHRvIGNvbmZpZ3VyZSB0aGVtLCBub3QgZXZlbiBlbnRlciBvciBleGl0CisgKiB0 aGVtLiBUaGF0IGlzIGJlY2F1c2UgVUNTSSBkZWZpbmVzIGFsdCBtb2RlIGRldGFpbHMgYW5kIGFs dCBtb2RlICJvdmVycmlkaW5nIgorICogYXMgc2VwYXJhdGUgb3B0aW9ucy4KKyAqCisgKiBJbiBj YXNlIGFsdCBtb2RlIGRldGFpbHMgYXJlIHN1cHBvcnRlZCwgYnV0IG92ZXJyaWRpbmcgaXMgbm90 LCB0aGUgZHJpdmVyCisgKiB3aWxsIHN0aWxsIGRpc3BsYXkgdGhlIHN1cHBvcnRlZCBwaW4gYXNz aWdubWVudHMgYW5kIGNvbmZpZ3VyYXRpb24sIGJ1dCBhbnkKKyAqIGNoYW5nZXMgdGhlIHVzZXIg YXR0ZW1wdHMgdG8gZG8gd2lsbCBsZWFkIGludG8gZmFpbHVyZSB3aXRoIHJldHVybiB2YWx1ZSBv ZgorICogLUVPUE5PVFNVUFAuCisgKi8KKworc3RhdGljIGludCB1Y3NpX2Rpc3BsYXlwb3J0X2Vu dGVyKHN0cnVjdCB0eXBlY19hbHRtb2RlICphbHQpCit7CisJc3RydWN0IHVjc2lfZHAgKmRwID0g dHlwZWNfYWx0bW9kZV9nZXRfZHJ2ZGF0YShhbHQpOworCisJbXV0ZXhfbG9jaygmZHAtPmNvbi0+ bG9jayk7CisKKwlpZiAoIWRwLT5vdmVycmlkZSAmJiBkcC0+aW5pdGlhbGl6ZWQpIHsKKwkJY29u c3Qgc3RydWN0IHR5cGVjX2FsdG1vZGUgKnAgPSB0eXBlY19hbHRtb2RlX2dldF9wYXJ0bmVyKGFs dCk7CisKKwkJZGV2X3dhcm4oJnAtPmRldiwKKwkJCSAiZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0 IGFsdGVybmF0ZSBtb2RlIG92ZXJyaWRpbmdcbiIpOworCQltdXRleF91bmxvY2soJmRwLT5jb24t PmxvY2spOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyoKKwkgKiBXZSBjYW4ndCBz ZW5kIHRoZSBOZXcgQ0FNIGNvbW1hbmQgeWV0IHRvIHRoZSBQUE0gYXMgaXQgbmVlZHMgdGhlCisJ ICogY29uZmlndXJhdGlvbiB2YWx1ZSBhcyB3ZWxsLiBQcmV0ZW5kaW5nIHRoYXQgd2UgaGF2ZSBu b3cgZW50ZXJlZCB0aGUKKwkgKiBtb2RlLCBhbmQgbGV0dGluZyB0aGUgYWx0IG1vZGUgZHJpdmVy IGNvbnRpbnVlLgorCSAqLworCisJZHAtPmhlYWRlciA9IFZETyhVU0JfVFlQRUNfRFBfU0lELCAx LCBDTURfRU5URVJfTU9ERSk7CisJZHAtPmhlYWRlciB8PSBWRE9fT1BPUyhVU0JfVFlQRUNfRFBf TU9ERSk7CisJZHAtPmhlYWRlciB8PSBWRE9fQ01EVChDTURUX1JTUF9BQ0spOworCisJZHAtPnZk b19kYXRhID0gTlVMTDsKKwlkcC0+dmRvX3NpemUgPSAxOworCisJc2NoZWR1bGVfd29yaygmZHAt PndvcmspOworCisJbXV0ZXhfdW5sb2NrKCZkcC0+Y29uLT5sb2NrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHVjc2lfZGlzcGxheXBvcnRfZXhpdChzdHJ1Y3QgdHlwZWNfYWx0bW9k ZSAqYWx0KQoreworCXN0cnVjdCB1Y3NpX2RwICpkcCA9IHR5cGVjX2FsdG1vZGVfZ2V0X2RydmRh dGEoYWx0KTsKKwlzdHJ1Y3QgdWNzaV9jb250cm9sIGN0cmw7CisJaW50IHJldCA9IDA7CisKKwlt dXRleF9sb2NrKCZkcC0+Y29uLT5sb2NrKTsKKworCWlmICghZHAtPm92ZXJyaWRlKSB7CisJCWNv bnN0IHN0cnVjdCB0eXBlY19hbHRtb2RlICpwID0gdHlwZWNfYWx0bW9kZV9nZXRfcGFydG5lcihh bHQpOworCisJCWRldl93YXJuKCZwLT5kZXYsCisJCQkgImZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9y dCBhbHRlcm5hdGUgbW9kZSBvdmVycmlkaW5nXG4iKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJ CWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwljdHJsLnJhd19jbWQgPSBVQ1NJX0NNRF9TRVRfTkVX X0NBTShkcC0+Y29uLT5udW0sIDAsIGRwLT5vZmZzZXQsIDApOworCXJldCA9IHVjc2lfc2VuZF9j b21tYW5kKGRwLT5jb24tPnVjc2ksICZjdHJsLCBOVUxMLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byBvdXRfdW5sb2NrOworCisJZHAtPmhlYWRlciA9IFZETyhVU0JfVFlQRUNfRFBfU0lELCAx LCBDTURfRVhJVF9NT0RFKTsKKwlkcC0+aGVhZGVyIHw9IFZET19PUE9TKFVTQl9UWVBFQ19EUF9N T0RFKTsKKwlkcC0+aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX0FDSyk7CisKKwlkcC0+dmRv X2RhdGEgPSBOVUxMOworCWRwLT52ZG9fc2l6ZSA9IDE7CisKKwlzY2hlZHVsZV93b3JrKCZkcC0+ d29yayk7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkcC0+Y29uLT5sb2NrKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXZSBkbyBub3QgYWN0dWFsbHkgaGF2ZSBhY2Nlc3Mg dG8gdGhlIFN0YXR1cyBVcGRhdGUgVkRPLCBzbyB3ZSBoYXZlIHRvIGd1ZXNzCisgKiB0aGluZ3Mu CisgKi8KK3N0YXRpYyBpbnQgdWNzaV9kaXNwbGF5cG9ydF9zdGF0dXNfdXBkYXRlKHN0cnVjdCB1 Y3NpX2RwICpkcCkKK3sKKwl1MzIgY2FwID0gZHAtPmFsdC0+dmRvOworCisJZHAtPmRhdGEuc3Rh dHVzID0gRFBfU1RBVFVTX0VOQUJMRUQ7CisKKwkvKgorCSAqIElmIHBpbiBhc3NpZ25lbWVudCBE IGlzIHN1cHBvcnRlZCwgY2xhaW1pbmcgYWx3YXlzCisJICogdGhhdCBNdWx0aS1mdW5jdGlvbiBp cyBwcmVmZXJyZWQuCisJICovCisJaWYgKERQX0NBUF9DQVBBQklMSVRZKGNhcCkgJiBEUF9DQVBf VUZQX0QpIHsKKwkJZHAtPmRhdGEuc3RhdHVzIHw9IERQX1NUQVRVU19DT05fVUZQX0Q7CisKKwkJ aWYgKERQX0NBUF9VRlBfRF9QSU5fQVNTSUdOKGNhcCkgJiBCSVQoRFBfUElOX0FTU0lHTl9EKSkK KwkJCWRwLT5kYXRhLnN0YXR1cyB8PSBEUF9TVEFUVVNfUFJFRkVSX01VTFRJX0ZVTkM7CisJfSBl bHNlIHsKKwkJZHAtPmRhdGEuc3RhdHVzIHw9IERQX1NUQVRVU19DT05fREZQX0Q7CisKKwkJaWYg KERQX0NBUF9ERlBfRF9QSU5fQVNTSUdOKGNhcCkgJiBCSVQoRFBfUElOX0FTU0lHTl9EKSkKKwkJ CWRwLT5kYXRhLnN0YXR1cyB8PSBEUF9TVEFUVVNfUFJFRkVSX01VTFRJX0ZVTkM7CisJfQorCisJ ZHAtPnZkb19kYXRhID0gJmRwLT5kYXRhLnN0YXR1czsKKwlkcC0+dmRvX3NpemUgPSAyOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9kaXNwbGF5cG9ydF9jb25maWd1cmUoc3Ry dWN0IHVjc2lfZHAgKmRwKQoreworCXUzMiBwaW5zID0gRFBfQ09ORl9HRVRfUElOX0FTU0lHTihk cC0+ZGF0YS5jb25mKTsKKwlzdHJ1Y3QgdWNzaV9jb250cm9sIGN0cmw7CisKKwlpZiAoIWRwLT5v dmVycmlkZSkKKwkJcmV0dXJuIDA7CisKKwljdHJsLnJhd19jbWQgPSBVQ1NJX0NNRF9TRVRfTkVX X0NBTShkcC0+Y29uLT5udW0sIDEsIGRwLT5vZmZzZXQsIHBpbnMpOworCisJcmV0dXJuIHVjc2lf c2VuZF9jb21tYW5kKGRwLT5jb24tPnVjc2ksICZjdHJsLCBOVUxMLCAwKTsKK30KKworc3RhdGlj IGludCB1Y3NpX2Rpc3BsYXlwb3J0X3ZkbShzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0LAorCQkJ CXUzMiBoZWFkZXIsIGNvbnN0IHUzMiAqZGF0YSwgaW50IGNvdW50KQoreworCXN0cnVjdCB1Y3Np X2RwICpkcCA9IHR5cGVjX2FsdG1vZGVfZ2V0X2RydmRhdGEoYWx0KTsKKwlpbnQgY21kX3R5cGUg PSBQRF9WRE9fQ01EVChoZWFkZXIpOworCWludCBjbWQgPSBQRF9WRE9fQ01EKGhlYWRlcik7CisJ c3RydWN0IHR5cGVjX2FsdG1vZGUgKnBkZXY7CisKKwltdXRleF9sb2NrKCZkcC0+Y29uLT5sb2Nr KTsKKworCWlmICghZHAtPm92ZXJyaWRlICYmIGRwLT5pbml0aWFsaXplZCkgeworCQljb25zdCBz dHJ1Y3QgdHlwZWNfYWx0bW9kZSAqcCA9IHR5cGVjX2FsdG1vZGVfZ2V0X3BhcnRuZXIoYWx0KTsK KworCQlkZXZfd2FybigmcC0+ZGV2LAorCQkJICJmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgYWx0 ZXJuYXRlIG1vZGUgb3ZlcnJpZGluZ1xuIik7CisJCW11dGV4X3VubG9jaygmZHAtPmNvbi0+bG9j ayk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlwZGV2ID0gdHlwZWNfbWF0Y2hfYWx0 bW9kZShkcC0+Y29uLT5wYXJ0bmVyX2FsdG1vZGUsIC0xLAorCQkJCSAgIGFsdC0+c3ZpZCwgYWx0 LT5tb2RlKTsKKworCXN3aXRjaCAoY21kX3R5cGUpIHsKKwljYXNlIENNRFRfSU5JVDoKKwkJZHAt PmhlYWRlciA9IFZETyhVU0JfVFlQRUNfRFBfU0lELCAxLCBjbWQpOworCQlkcC0+aGVhZGVyIHw9 IFZET19PUE9TKFVTQl9UWVBFQ19EUF9NT0RFKTsKKworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNl IERQX0NNRF9TVEFUVVNfVVBEQVRFOgorCQkJaWYgKHVjc2lfZGlzcGxheXBvcnRfc3RhdHVzX3Vw ZGF0ZShkcCkpCisJCQkJZHAtPmhlYWRlciB8PSBWRE9fQ01EVChDTURUX1JTUF9OQUspOworCQkJ ZWxzZQorCQkJCWRwLT5oZWFkZXIgfD0gVkRPX0NNRFQoQ01EVF9SU1BfQUNLKTsKKwkJCWJyZWFr OworCQljYXNlIERQX0NNRF9DT05GSUdVUkU6CisJCQlkcC0+ZGF0YS5jb25mID0gKmRhdGE7CisJ CQlpZiAodWNzaV9kaXNwbGF5cG9ydF9jb25maWd1cmUoZHApKSB7CisJCQkJZHAtPmhlYWRlciB8 PSBWRE9fQ01EVChDTURUX1JTUF9OQUspOworCQkJfSBlbHNlIHsKKwkJCQlkcC0+aGVhZGVyIHw9 IFZET19DTURUKENNRFRfUlNQX0FDSyk7CisJCQkJaWYgKGRwLT5pbml0aWFsaXplZCkKKwkJCQkJ dWNzaV9hbHRtb2RlX3VwZGF0ZV9hY3RpdmUoZHAtPmNvbik7CisJCQkJZWxzZQorCQkJCQlkcC0+ aW5pdGlhbGl6ZWQgPSB0cnVlOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcC0+ aGVhZGVyIHw9IFZET19DTURUKENNRFRfUlNQX0FDSyk7CisJCQlicmVhazsKKwkJfQorCisJCXNj aGVkdWxlX3dvcmsoJmRwLT53b3JrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ fQorCisJbXV0ZXhfdW5sb2NrKCZkcC0+Y29uLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IHR5cGVjX2FsdG1vZGVfb3BzIHVjc2lfZGlzcGxheXBvcnRfb3Bz ID0geworCS5lbnRlciA9IHVjc2lfZGlzcGxheXBvcnRfZW50ZXIsCisJLmV4aXQgPSB1Y3NpX2Rp c3BsYXlwb3J0X2V4aXQsCisJLnZkbSA9IHVjc2lfZGlzcGxheXBvcnRfdmRtLAorfTsKKworc3Rh dGljIHZvaWQgdWNzaV9kaXNwbGF5cG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK K3sKKwlzdHJ1Y3QgdWNzaV9kcCAqZHAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVjc2lf ZHAsIHdvcmspOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkcC0+Y29uLT5sb2NrKTsKKwor CXJldCA9IHR5cGVjX2FsdG1vZGVfdmRtKGRwLT5hbHQsIGRwLT5oZWFkZXIsCisJCQkJZHAtPnZk b19kYXRhLCBkcC0+dmRvX3NpemUpOworCWlmIChyZXQpCisJCWRldl9lcnIoJmRwLT5hbHQtPmRl diwgIlZETSAweCV4IGZhaWxlZFxuIiwgZHAtPmhlYWRlcik7CisKKwlkcC0+dmRvX2RhdGEgPSBO VUxMOworCWRwLT52ZG9fc2l6ZSA9IDA7CisJZHAtPmhlYWRlciA9IDA7CisKKwltdXRleF91bmxv Y2soJmRwLT5jb24tPmxvY2spOworfQorCit2b2lkIHVjc2lfZGlzcGxheXBvcnRfcmVtb3ZlX3Bh cnRuZXIoc3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdCkKK3sKKwlzdHJ1Y3QgdWNzaV9kcCAqZHA7 CisKKwlpZiAoIWFsdCkKKwkJcmV0dXJuOworCisJZHAgPSB0eXBlY19hbHRtb2RlX2dldF9kcnZk YXRhKGFsdCk7CisJZHAtPmRhdGEuY29uZiA9IDA7CisJZHAtPmRhdGEuc3RhdHVzID0gMDsKKwlk cC0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworc3RydWN0IHR5cGVjX2FsdG1vZGUgKnVjc2lf cmVnaXN0ZXJfZGlzcGxheXBvcnQoc3RydWN0IHVjc2lfY29ubmVjdG9yICpjb24sCisJCQkJCQli b29sIG92ZXJyaWRlLCBpbnQgb2Zmc2V0LAorCQkJCQkJc3RydWN0IHR5cGVjX2FsdG1vZGVfZGVz YyAqZGVzYykKK3sKKwl1OCBhbGxfYXNzaWdubWVudHMgPSBCSVQoRFBfUElOX0FTU0lHTl9DKSB8 IEJJVChEUF9QSU5fQVNTSUdOX0QpIHwKKwkJCSAgICAgQklUKERQX1BJTl9BU1NJR05fRSk7CisJ c3RydWN0IHR5cGVjX2FsdG1vZGUgKmFsdDsKKwlzdHJ1Y3QgdWNzaV9kcCAqZHA7CisKKwkvKiBX ZSBjYW4ndCByZWx5IG9uIHRoZSBmaXJtd2FyZSB3aXRoIHRoZSBjYXBhYmlsaXRpZXMuICovCisJ ZGVzYy0+dmRvIHw9IERQX0NBUF9EUF9TSUdOQUxJTkcgfCBEUF9DQVBfUkVDRVBUQUNMRTsKKwor CS8qIENsYWltaW5nIHRoYXQgd2Ugc3VwcG9ydCBhbGwgcGluIGFzc2lnbm1lbnRzICovCisJZGVz Yy0+dmRvIHw9IGFsbF9hc3NpZ25tZW50cyA8PCA4OworCWRlc2MtPnZkbyB8PSBhbGxfYXNzaWdu bWVudHMgPDwgMTY7CisKKwlhbHQgPSB0eXBlY19wb3J0X3JlZ2lzdGVyX2FsdG1vZGUoY29uLT5w b3J0LCBkZXNjKTsKKwlpZiAoSVNfRVJSKGFsdCkpCisJCXJldHVybiBhbHQ7CisKKwlkcCA9IGRl dm1fa3phbGxvYygmYWx0LT5kZXYsIHNpemVvZigqZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRw KSB7CisJCXR5cGVjX3VucmVnaXN0ZXJfYWx0bW9kZShhbHQpOworCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKwl9CisKKwlJTklUX1dPUksoJmRwLT53b3JrLCB1Y3NpX2Rpc3BsYXlwb3J0X3dv cmspOworCWRwLT5vdmVycmlkZSA9IG92ZXJyaWRlOworCWRwLT5vZmZzZXQgPSBvZmZzZXQ7CisJ ZHAtPmNvbiA9IGNvbjsKKwlkcC0+YWx0ID0gYWx0OworCisJYWx0LT5vcHMgPSAmdWNzaV9kaXNw bGF5cG9ydF9vcHM7CisJdHlwZWNfYWx0bW9kZV9zZXRfZHJ2ZGF0YShhbHQsIGRwKTsKKworCXJl dHVybiBhbHQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuYyBi L2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaS5jCmluZGV4IDUxOTBmOGRkNDU0OC4uNzYwZDY5 ZWFhMDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuYworKysgYi9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2kuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBlY19hbHRtb2RlLmg+CisjaW5jbHVk ZSA8bGludXgvdXNiL3R5cGVjX2RwLmg+CiAKICNpbmNsdWRlICJ1Y3NpLmgiCiAjaW5jbHVkZSAi dHJhY2UuaCIKQEAgLTI4OCw5ICsyODgsMTIgQEAgc3RhdGljIGludCB1Y3NpX3JlZ2lzdGVyX2Fs dG1vZGUoc3RydWN0IHVjc2lfY29ubmVjdG9yICpjb24sCiAJCQkJIHU4IHJlY2lwaWVudCkKIHsK IAlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0OworCWJvb2wgb3ZlcnJpZGU7CiAJaW50IHJldDsK IAlpbnQgaTsKIAorCW92ZXJyaWRlID0gISEoY29uLT51Y3NpLT5jYXAuZmVhdHVyZXMgJiBVQ1NJ X0NBUF9BTFRfTU9ERV9PVkVSUklERSk7CisKIAlzd2l0Y2ggKHJlY2lwaWVudCkgewogCWNhc2Ug VUNTSV9SRUNJUElFTlRfQ09OOgogCQlpID0gdWNzaV9uZXh0X2FsdG1vZGUoY29uLT5wb3J0X2Fs dG1vZGUpOwpAQCAtMzAyLDcgKzMwNSwxNSBAQCBzdGF0aWMgaW50IHVjc2lfcmVnaXN0ZXJfYWx0 bW9kZShzdHJ1Y3QgdWNzaV9jb25uZWN0b3IgKmNvbiwKIAkJZGVzYy0+bW9kZSA9IHVjc2lfYWx0 bW9kZV9uZXh0X21vZGUoY29uLT5wb3J0X2FsdG1vZGUsCiAJCQkJCQkgICAgZGVzYy0+c3ZpZCk7 CiAKLQkJYWx0ID0gdHlwZWNfcG9ydF9yZWdpc3Rlcl9hbHRtb2RlKGNvbi0+cG9ydCwgZGVzYyk7 CisJCXN3aXRjaCAoZGVzYy0+c3ZpZCkgeworCQljYXNlIFVTQl9UWVBFQ19EUF9TSUQ6CisJCQlh bHQgPSB1Y3NpX3JlZ2lzdGVyX2Rpc3BsYXlwb3J0KGNvbiwgb3ZlcnJpZGUsIGksIGRlc2MpOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhbHQgPSB0eXBlY19wb3J0X3JlZ2lzdGVyX2FsdG1v ZGUoY29uLT5wb3J0LCBkZXNjKTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKElTX0VSUihhbHQp KSB7CiAJCQlyZXQgPSBQVFJfRVJSKGFsdCk7CiAJCQlnb3RvIGVycjsKQEAgLTM5OCw2ICs0MDks NyBAQCBzdGF0aWMgaW50IHVjc2lfcmVnaXN0ZXJfYWx0bW9kZXMoc3RydWN0IHVjc2lfY29ubmVj dG9yICpjb24sIHU4IHJlY2lwaWVudCkKIHN0YXRpYyB2b2lkIHVjc2lfdW5yZWdpc3Rlcl9hbHRt b2RlcyhzdHJ1Y3QgdWNzaV9jb25uZWN0b3IgKmNvbiwgdTggcmVjaXBpZW50KQogewogCXN0cnVj dCB0eXBlY19hbHRtb2RlICoqYWRldjsKKwlzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqYWx0OwogCWlu dCBpID0gMDsKIAogCXN3aXRjaCAocmVjaXBpZW50KSB7CkBAIC00MTIsNiArNDI0LDEyIEBAIHN0 YXRpYyB2b2lkIHVjc2lfdW5yZWdpc3Rlcl9hbHRtb2RlcyhzdHJ1Y3QgdWNzaV9jb25uZWN0b3Ig KmNvbiwgdTggcmVjaXBpZW50KQogCX0KIAogCXdoaWxlIChhZGV2W2ldKSB7CisJCWlmIChyZWNp cGllbnQgPT0gVUNTSV9SRUNJUElFTlRfU09QICYmCisJCSAgICBhZGV2W2ldLT5zdmlkID09IFVT Ql9UWVBFQ19EUF9TSUQpIHsKKwkJCWFsdCA9IHR5cGVjX21hdGNoX2FsdG1vZGUoY29uLT5wb3J0 X2FsdG1vZGUsIC0xLAorCQkJCQkJICBVU0JfVFlQRUNfRFBfU0lELCAxKTsKKwkJCXVjc2lfZGlz cGxheXBvcnRfcmVtb3ZlX3BhcnRuZXIoYWx0KTsKKwkJfQogCQl0eXBlY191bnJlZ2lzdGVyX2Fs dG1vZGUoYWRldltpXSk7CiAJCWFkZXZbaSsrXSA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvdHlwZWMvdWNzaS91Y3NpLmggYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2ku aAppbmRleCBjNDE2YmFlNGI1Y2EuLjAzNmViZjI1NmNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91 c2IvdHlwZWMvdWNzaS91Y3NpLmgKKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpLmgK QEAgLTQwNiw0ICs0MDYsMjUgQEAgaW50IHVjc2lfc2VuZF9jb21tYW5kKHN0cnVjdCB1Y3NpICp1 Y3NpLCBzdHJ1Y3QgdWNzaV9jb250cm9sICpjdHJsLAogCiB2b2lkIHVjc2lfYWx0bW9kZV91cGRh dGVfYWN0aXZlKHN0cnVjdCB1Y3NpX2Nvbm5lY3RvciAqY29uKTsKIAorI2lmIElTX0VOQUJMRUQo Q09ORklHX1RZUEVDX0RQX0FMVE1PREUpCitzdHJ1Y3QgdHlwZWNfYWx0bW9kZSAqCit1Y3NpX3Jl Z2lzdGVyX2Rpc3BsYXlwb3J0KHN0cnVjdCB1Y3NpX2Nvbm5lY3RvciAqY29uLAorCQkJICBib29s IG92ZXJyaWRlLCBpbnQgb2Zmc2V0LAorCQkJICBzdHJ1Y3QgdHlwZWNfYWx0bW9kZV9kZXNjICpk ZXNjKTsKKwordm9pZCB1Y3NpX2Rpc3BsYXlwb3J0X3JlbW92ZV9wYXJ0bmVyKHN0cnVjdCB0eXBl Y19hbHRtb2RlICphZGV2KTsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR5cGVjX2Fs dG1vZGUgKgordWNzaV9yZWdpc3Rlcl9kaXNwbGF5cG9ydChzdHJ1Y3QgdWNzaV9jb25uZWN0b3Ig KmNvbiwKKwkJCSAgYm9vbCBvdmVycmlkZSwgaW50IG9mZnNldCwKKwkJCSAgc3RydWN0IHR5cGVj X2FsdG1vZGVfZGVzYyAqZGVzYykKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCit1Y3NpX2Rpc3BsYXlwb3J0X3JlbW92ZV9wYXJ0bmVyKHN0cnVjdCB0eXBlY19hbHRt b2RlICphZGV2KSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfVFlQRUNfRFBfQUxUTU9ERSAqLworCiAj ZW5kaWYgLyogX19EUklWRVJfVVNCX1RZUEVDX1VDU0lfSCAqLwo=