ZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjEyMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCkBAIC0wLDAgKzEsMjQ3IEBACisvKiAKKyAgIEJORVAgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IEJsdWV0b290aCBzdGFjayAoQmx1ZVopLgorICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgSW52ZW50ZWwgU3lzdGVtZXMKKyAgIFdyaXR0ZW4gMjAwMS0yMDAyIGJ5CisJQ2zpbWVudCBNb3JlYXUgPGNsZW1lbnQubW9yZWF1QGludmVudGVsLmZyPgorCURhdmlkIExpYmF1bHQgIDxkYXZpZC5saWJhdWx0QGludmVudGVsLmZyPgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIAorICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIAorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsIAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTIAorICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKy8qCisgKiAkSWQ6IG5ldGRldi5jLHYgMS44IDIwMDIvMDgvMDQgMjE6MjM6NTggbWF4ayBFeHAgJAorICovIAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KKworI2luY2x1ZGUgImJuZXAuaCIKKworI2lmbmRlZiBDT05GSUdfQlRfQk5FUF9ERUJVRworI3VuZGVmICBCVF9EQkcKKyNkZWZpbmUgQlRfREJHKCBBLi4uICkKKyNlbmRpZgorCisjZGVmaW5lIEJORVBfVFhfUVVFVUVfTEVOIDIwCisKK3N0YXRpYyBpbnQgYm5lcF9uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm5lcF9uZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYm5lcF9uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJuZXBfc2Vzc2lvbiAqcyA9IGRldi0+cHJpdjsKKwlyZXR1cm4gJnMtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBibmVwX25ldF9zZXRfbWNfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUgorCXN0cnVjdCBibmVwX3Nlc3Npb24gKnMgPSBkZXYtPnByaXY7CisJc3RydWN0IHNvY2sgKnNrID0gcy0+c29jay0+c2s7CisJc3RydWN0IGJuZXBfc2V0X2ZpbHRlcl9yZXEgKnI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc2l6ZTsKKworCUJUX0RCRygiJXMgbWNfY291bnQgJWQiLCBkZXYtPm5hbWUsIGRldi0+bWNfY291bnQpOworCisJc2l6ZSA9IHNpemVvZigqcikgKyAoQk5FUF9NQVhfTVVMVElDQVNUX0ZJTFRFUlMgKyAxKSAqIEVUSF9BTEVOICogMjsKKwlza2IgID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKSB7CisJCUJUX0VSUigiJXMgTXVsdGljYXN0IGxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlfX3NrYl9wdXQoc2tiLCBzaXplb2YoKnIpKTsKKworCXItPnR5cGUgPSBCTkVQX0NPTlRST0w7CisJci0+Y3RybCA9IEJORVBfRklMVEVSX01VTFRJX0FERFJfU0VUOworCisgICAgICAgIGlmIChkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkgeworCQl1OCBzdGFydFtFVEhfQUxFTl0gPSB7IDB4MDEgfTsKKworCQkvKiBSZXF1ZXN0IGFsbCBhZGRyZXNzZXMgKi8KKwkJbWVtY3B5KF9fc2tiX3B1dChza2IsIEVUSF9BTEVOKSwgc3RhcnQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KF9fc2tiX3B1dChza2IsIEVUSF9BTEVOKSwgZGV2LT5icm9hZGNhc3QsIEVUSF9BTEVOKTsKKwkJci0+bGVuID0gaHRvbnMoRVRIX0FMRU4gKiAyKTsKKwl9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCQlpbnQgaSwgbGVuID0gc2tiLT5sZW47CisKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7CisJCQltZW1jcHkoX19za2JfcHV0KHNrYiwgRVRIX0FMRU4pLCBkZXYtPmJyb2FkY2FzdCwgRVRIX0FMRU4pOworCQkJbWVtY3B5KF9fc2tiX3B1dChza2IsIEVUSF9BTEVOKSwgZGV2LT5icm9hZGNhc3QsIEVUSF9BTEVOKTsKKwkJfQkKKwkJCisJCS8qIEZJWE1FOiBXZSBzaG91bGQgZ3JvdXAgYWRkcmVzc2VzIGhlcmUuICovCisKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQgJiYgaSA8IEJORVBfTUFYX01VTFRJQ0FTVF9GSUxURVJTOyBpKyspIHsKKwkJCW1lbWNweShfX3NrYl9wdXQoc2tiLCBFVEhfQUxFTiksIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShfX3NrYl9wdXQoc2tiLCBFVEhfQUxFTiksIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCWRtaSA9IGRtaS0+bmV4dDsKKwkJfQorCQlyLT5sZW4gPSBodG9ucyhza2ItPmxlbiAtIGxlbik7CisJfQorCisJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGJuZXBfbmV0X3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphcmcpCit7CisJQlRfREJHKCIlcyIsIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJuZXBfbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlCVF9EQkcoIm5ldF90aW1lb3V0Iik7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgaW50IGJuZXBfbmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjaWZkZWYgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSCitzdGF0aWMgaW5saW5lIGludCBibmVwX25ldF9tY19maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJuZXBfc2Vzc2lvbiAqcykKK3sKKwlzdHJ1Y3QgZXRoaGRyICplaCA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKworCWlmICgoZWgtPmhfZGVzdFswXSAmIDEpICYmICF0ZXN0X2JpdChibmVwX21jX2hhc2goZWgtPmhfZGVzdCksICh1bG9uZyAqKSAmcy0+bWNfZmlsdGVyKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUgorLyogRGV0ZXJtaW5lIGV0aGVyIHByb3RvY29sLiBCYXNlZCBvbiBldGhfdHlwZV90cmFucy4gKi8KK3N0YXRpYyBpbmxpbmUgdTE2IGJuZXBfbmV0X2V0aF9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBldGhoZHIgKmVoID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQorCWlmIChudG9ocyhlaC0+aF9wcm90bykgPj0gMTUzNikKKwkJcmV0dXJuIGVoLT5oX3Byb3RvOworCQkKKwlpZiAoZ2V0X3VuYWxpZ25lZCgodTE2ICopIHNrYi0+ZGF0YSkgPT0gMHhGRkZGKQorCQlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzMpOworCQkKKwlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBibmVwX25ldF9wcm90b19maWx0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJuZXBfc2Vzc2lvbiAqcykKK3sKKwl1MTYgcHJvdG8gPSBibmVwX25ldF9ldGhfcHJvdG8oc2tiKTsKKwlzdHJ1Y3QgYm5lcF9wcm90b19maWx0ZXIgKmYgPSBzLT5wcm90b19maWx0ZXI7CisJaW50IGk7CisJCisJZm9yIChpID0gMDsgaSA8IEJORVBfTUFYX1BST1RPX0ZJTFRFUlMgJiYgZltpXS5lbmQ7IGkrKykgeworCQlpZiAocHJvdG8gPj0gZltpXS5zdGFydCAmJiBwcm90byA8PSBmW2ldLmVuZCkKKwkJCXJldHVybiAwOworCX0KKworCUJUX0RCRygiQk5FUDogZmlsdGVyZWQgc2tiICVwLCBwcm90byAweCUuNHgiLCBza2IsIHByb3RvKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGJuZXBfbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYm5lcF9zZXNzaW9uICpzID0gZGV2LT5wcml2OworCXN0cnVjdCBzb2NrICpzayA9IHMtPnNvY2stPnNrOworCisJQlRfREJHKCJza2IgJXAsIGRldiAlcCIsIHNrYiwgZGV2KTsKKworI2lmZGVmIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUgorCWlmIChibmVwX25ldF9tY19maWx0ZXIoc2tiLCBzKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisJCisjaWZkZWYgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSCisJaWYgKGJuZXBfbmV0X3Byb3RvX2ZpbHRlcihza2IsIHMpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwkKKwkvKgorCSAqIFdlIGNhbm5vdCBzZW5kIEwyQ0FQIHBhY2tldHMgZnJvbSBoZXJlIGFzIHdlIGFyZSBwb3RlbnRpYWxseSBpbiBhIGJoLgorCSAqIFNvIHdlIGhhdmUgdG8gcXVldWUgdGhlbSBhbmQgd2FrZSB1cCBzZXNzaW9uIHRocmVhZCB3aGljaCBpcyBzbGVlcGluZworCSAqIG9uIHRoZSBzay0+c2tfc2xlZXAuCisJICovCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoc2stPnNrX3NsZWVwKTsKKworCWlmIChza2JfcXVldWVfbGVuKCZzay0+c2tfd3JpdGVfcXVldWUpID49IEJORVBfVFhfUVVFVUVfTEVOKSB7CisJCUJUX0RCRygidHggcXVldWUgaXMgZnVsbCIpOworCisJCS8qIFN0b3AgcXVldWluZy4KKwkJICogU2Vzc2lvbiB0aHJlYWQgd2lsbCBkbyBuZXRpZl93YWtlX3F1ZXVlKCkgKi8KKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGJuZXBfbmV0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwltZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKKwlkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CisKKwlldGhlcl9zZXR1cChkZXYpOworCisJZGV2LT5vcGVuICAgICAgICAgICAgPSBibmVwX25ldF9vcGVuOworCWRldi0+c3RvcCAgICAgICAgICAgID0gYm5lcF9uZXRfY2xvc2U7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBibmVwX25ldF94bWl0OworCWRldi0+Z2V0X3N0YXRzICAgICAgID0gYm5lcF9uZXRfZ2V0X3N0YXRzOworCWRldi0+ZG9faW9jdGwgICAgICAgID0gYm5lcF9uZXRfaW9jdGw7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBibmVwX25ldF9zZXRfbWFjX2FkZHI7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBibmVwX25ldF9zZXRfbWNfbGlzdDsKKworCWRldi0+d2F0Y2hkb2dfdGltZW8gID0gSFogKiAyOworCWRldi0+dHhfdGltZW91dCAgICAgID0gYm5lcF9uZXRfdGltZW91dDsKK30K