Return-Path: MIME-Version: 1.0 Date: Mon, 22 Jun 2009 12:30:34 -0300 Message-ID: Subject: [PATCH] A2DP Sink connection From: =?UTF-8?Q?Jo=C3=A3o_Paulo_Rechi_Vita?= To: linux-bluetooth Content-Type: multipart/mixed; boundary=0022150488fb388e68046cf18edd Sender: linux-bluetooth-owner@vger.kernel.org List-ID: --0022150488fb388e68046cf18edd Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable This set of patches implements the necessary code for the A2DP Sink. It wasn't extensively tested because we need a client to actually send audio through it, but avinfo and the D-Bus Connect() method works. Also, it didn't work over 2.6.28 kernel from Jaunty (connection refused), and it latter worked over 2.6.30 from kernel.ubuntu.com. I don't know if was a bug in kernel part or some ubuntu config file issue. Looking at the code one will notice that there is a lot of duplicated code from Source SEP and Sink API. I have plans to merge both codes in the future, but I would like to see it working with the client first, so we don't change working code without testing the new one first. To be able to test it, Source interface needs to be explicitly enabled in audio.conf (Enable=3DSource). --=20 Jo=C3=A3o Paulo Rechi Vita MSc Computer Science Student Computer Engineer IC / Unicamp http://jprvita.wordpress.com/ --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0001-Create-A2DP-Sink-SDP-record.patch" Content-Disposition: attachment; filename="0001-Create-A2DP-Sink-SDP-record.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cesh60 RnJvbSA2MjNjZDZhYmY4ZmFmZmRmYjVhZjhlODA1NGI2YzllYzE5OGMxMTYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMiBKdW4gMjAwOSAxNzozNjow MyAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBBMkRQIFNpbmsgU0RQIHJlY29yZC4KCi0t LQogYXVkaW8vYTJkcC5jIHwgICA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hdWRpby9hMmRwLmMgYi9hdWRpby9hMmRw LmMKaW5kZXggMmM0ZDA0Ny4uMWVmMjNjNCAxMDA2NDQKLS0tIGEvYXVkaW8vYTJkcC5jCisrKyBi L2F1ZGlvL2EyZHAuYwpAQCAtOTk1LDcgKzk5NSw2MiBAQCBzdGF0aWMgc2RwX3JlY29yZF90ICph MmRwX3NvdXJjZV9yZWNvcmQoKQogCiBzdGF0aWMgc2RwX3JlY29yZF90ICphMmRwX3NpbmtfcmVj b3JkKCkKIHsKLQlyZXR1cm4gTlVMTDsKKwlzZHBfbGlzdF90ICpzdmNsYXNzX2lkLCAqcGZzZXEs ICphcHNlcSwgKnJvb3Q7CisJdXVpZF90IHJvb3RfdXVpZCwgbDJjYXAsIGF2ZHRwLCBhMnNuazsK KwlzZHBfcHJvZmlsZV9kZXNjX3QgcHJvZmlsZVsxXTsKKwlzZHBfbGlzdF90ICphcHJvdG8sICpw cm90b1syXTsKKwlzZHBfcmVjb3JkX3QgKnJlY29yZDsKKwlzZHBfZGF0YV90ICpwc20sICp2ZXJz aW9uLCAqZmVhdHVyZXM7CisJdWludDE2X3QgbHAgPSBBVkRUUF9VVUlELCB2ZXIgPSAweDAxMDAs IGZlYXQgPSAweDAwMEY7CisKKwlyZWNvcmQgPSBzZHBfcmVjb3JkX2FsbG9jKCk7CisJaWYgKCFy ZWNvcmQpCisJCXJldHVybiBOVUxMOworCisJc2RwX3V1aWQxNl9jcmVhdGUoJnJvb3RfdXVpZCwg UFVCTElDX0JST1dTRV9HUk9VUCk7CisJcm9vdCA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcm9vdF91 dWlkKTsKKwlzZHBfc2V0X2Jyb3dzZV9ncm91cHMocmVjb3JkLCByb290KTsKKworCXNkcF91dWlk MTZfY3JlYXRlKCZhMnNuaywgQVVESU9fU0lOS19TVkNMQVNTX0lEKTsKKwlzdmNsYXNzX2lkID0g c2RwX2xpc3RfYXBwZW5kKDAsICZhMnNuayk7CisJc2RwX3NldF9zZXJ2aWNlX2NsYXNzZXMocmVj b3JkLCBzdmNsYXNzX2lkKTsKKworCXNkcF91dWlkMTZfY3JlYXRlKCZwcm9maWxlWzBdLnV1aWQs IEFEVkFOQ0VEX0FVRElPX1BST0ZJTEVfSUQpOworCXByb2ZpbGVbMF0udmVyc2lvbiA9IDB4MDEw MDsKKwlwZnNlcSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmcHJvZmlsZVswXSk7CisJc2RwX3NldF9w cm9maWxlX2Rlc2NzKHJlY29yZCwgcGZzZXEpOworCisJc2RwX3V1aWQxNl9jcmVhdGUoJmwyY2Fw LCBMMkNBUF9VVUlEKTsKKwlwcm90b1swXSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmbDJjYXApOwor CXBzbSA9IHNkcF9kYXRhX2FsbG9jKFNEUF9VSU5UMTYsICZscCk7CisJcHJvdG9bMF0gPSBzZHBf bGlzdF9hcHBlbmQocHJvdG9bMF0sIHBzbSk7CisJYXBzZXEgPSBzZHBfbGlzdF9hcHBlbmQoMCwg cHJvdG9bMF0pOworCisJc2RwX3V1aWQxNl9jcmVhdGUoJmF2ZHRwLCBBVkRUUF9VVUlEKTsKKwlw cm90b1sxXSA9IHNkcF9saXN0X2FwcGVuZCgwLCAmYXZkdHApOworCXZlcnNpb24gPSBzZHBfZGF0 YV9hbGxvYyhTRFBfVUlOVDE2LCAmdmVyKTsKKwlwcm90b1sxXSA9IHNkcF9saXN0X2FwcGVuZChw cm90b1sxXSwgdmVyc2lvbik7CisJYXBzZXEgPSBzZHBfbGlzdF9hcHBlbmQoYXBzZXEsIHByb3Rv WzFdKTsKKworCWFwcm90byA9IHNkcF9saXN0X2FwcGVuZCgwLCBhcHNlcSk7CisJc2RwX3NldF9h Y2Nlc3NfcHJvdG9zKHJlY29yZCwgYXByb3RvKTsKKworCWZlYXR1cmVzID0gc2RwX2RhdGFfYWxs b2MoU0RQX1VJTlQxNiwgJmZlYXQpOworCXNkcF9hdHRyX2FkZChyZWNvcmQsIFNEUF9BVFRSX1NV UFBPUlRFRF9GRUFUVVJFUywgZmVhdHVyZXMpOworCisJc2RwX3NldF9pbmZvX2F0dHIocmVjb3Jk LCAiQXVkaW8gU2luayIsIDAsIDApOworCisJZnJlZShwc20pOworCWZyZWUodmVyc2lvbik7CisJ c2RwX2xpc3RfZnJlZShwcm90b1swXSwgMCk7CisJc2RwX2xpc3RfZnJlZShwcm90b1sxXSwgMCk7 CisJc2RwX2xpc3RfZnJlZShhcHNlcSwgMCk7CisJc2RwX2xpc3RfZnJlZShwZnNlcSwgMCk7CisJ c2RwX2xpc3RfZnJlZShhcHJvdG8sIDApOworCXNkcF9saXN0X2ZyZWUocm9vdCwgMCk7CisJc2Rw X2xpc3RfZnJlZShzdmNsYXNzX2lkLCAwKTsKKworCXJldHVybiByZWNvcmQ7CiB9CiAKIHN0YXRp YyBzdHJ1Y3QgYTJkcF9zZXAgKmEyZHBfYWRkX3NlcChzdHJ1Y3QgYTJkcF9zZXJ2ZXIgKnNlcnZl ciwgdWludDhfdCB0eXBlLAotLSAKMS42LjAuNAoK --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0002-Create-a2dp_sink_cancel.patch" Content-Disposition: attachment; filename="0002-Create-a2dp_sink_cancel.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cfepe1 RnJvbSBiZmEzMGQ2NzFmZmI5OTZiYTRjMzhiOWQ1YWEwYmU3MGRkMWEzYjRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBKdW4gMjAwOSAxMDoyOTo0 MiAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBhMmRwX3NpbmtfY2FuY2VsKCkuCgotLS0K IGF1ZGlvL2EyZHAuYyB8ICAgMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGF1ZGlvL2EyZHAuaCB8ICAgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygr KSwgMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hdWRpby9hMmRwLmMgYi9hdWRpby9hMmRw LmMKaW5kZXggMWVmMjNjNC4uNjdlMjU3NiAxMDA2NDQKLS0tIGEvYXVkaW8vYTJkcC5jCisrKyBi L2F1ZGlvL2EyZHAuYwpAQCAtMTU2Niw2ICsxNTY2LDQxIEBAIGZhaWxlZDoKIAlyZXR1cm4gMDsK IH0KIAorZ2Jvb2xlYW4gYTJkcF9zaW5rX2NhbmNlbChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYs IHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgYTJkcF9zZXR1cF9jYiAqY2JfZGF0YTsKKwlz dHJ1Y3QgYTJkcF9zZXR1cCAqc2V0dXA7CisJR1NMaXN0ICpsOworCisJZGVidWcoImEyZHBfc2lu a19jYW5jZWwoKSIpOworCisJc2V0dXAgPSBmaW5kX3NldHVwX2J5X2RldihkZXYpOworCWlmICgh c2V0dXApCisJCXJldHVybiBGQUxTRTsKKworCWZvciAoY2JfZGF0YSA9IE5VTEwsIGwgPSBzZXR1 cC0+Y2I7IGwgIT0gTlVMTDsgbCA9IGdfc2xpc3RfbmV4dChsKSkgeworCQlzdHJ1Y3QgYTJkcF9z ZXR1cF9jYiAqY2IgPSBsLT5kYXRhOworCisJCWlmIChjYi0+aWQgPT0gaWQpIHsKKwkJCWNiX2Rh dGEgPSBjYjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFjYl9kYXRhKQorCQllcnJvcigi YTJkcF9zaW5rX2NhbmNlbDogbm8gbWF0Y2hpbmcgY2FsbGJhY2sgd2l0aCBpZCAldSIsIGlkKTsK KworCXNldHVwLT5jYiA9IGdfc2xpc3RfcmVtb3ZlKHNldHVwLT5jYiwgY2JfZGF0YSk7CisJZ19m cmVlKGNiX2RhdGEpOworCisJaWYgKCFzZXR1cC0+Y2IpIHsKKwkJc2V0dXAtPmNhbmNlbGVkID0g VFJVRTsKKwkJc2V0dXAtPnNlcCA9IE5VTEw7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKIGdi b29sZWFuIGEyZHBfc2VwX2xvY2soc3RydWN0IGEyZHBfc2VwICpzZXAsIHN0cnVjdCBhdmR0cCAq c2Vzc2lvbikKIHsKIAlpZiAoc2VwLT5sb2NrZWQpCmRpZmYgLS1naXQgYS9hdWRpby9hMmRwLmgg Yi9hdWRpby9hMmRwLmgKaW5kZXggMGU1Zjc5Ni4uZjcyNDgwYyAxMDA2NDQKLS0tIGEvYXVkaW8v YTJkcC5oCisrKyBiL2F1ZGlvL2EyZHAuaApAQCAtMTQzLDYgKzE0Myw4IEBAIHVuc2lnbmVkIGlu dCBhMmRwX3NvdXJjZV9zdXNwZW5kKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEyZHBf c2VwICpzZXAsCiAJCQkJYTJkcF9zdHJlYW1fY2JfdCBjYiwgdm9pZCAqdXNlcl9kYXRhKTsKIGdi b29sZWFuIGEyZHBfc291cmNlX2NhbmNlbChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIHVuc2ln bmVkIGludCBpZCk7CiAKK2dib29sZWFuIGEyZHBfc2lua19jYW5jZWwoc3RydWN0IGF1ZGlvX2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOworCiBnYm9vbGVhbiBhMmRwX3NlcF9sb2NrKHN0 cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24pOwogZ2Jvb2xlYW4gYTJk cF9zZXBfdW5sb2NrKHN0cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24p OwogZ2Jvb2xlYW4gYTJkcF9zZXBfZ2V0X2xvY2soc3RydWN0IGEyZHBfc2VwICpzZXApOwotLSAK MS42LjAuNAoK --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0003-Create-a2dp_sink_get.patch" Content-Disposition: attachment; filename="0003-Create-a2dp_sink_get.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cfnid2 RnJvbSAzNWRmM2ZjMzEyMWM1MWFlODVhY2E3NjdlZTQ0YTBiM2NkNjkyZmFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBKdW4gMjAwOSAxMToxOToz NiAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBhMmRwX3NpbmtfZ2V0KCkuCgotLS0KIGF1 ZGlvL2EyZHAuYyB8ICAgMzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBhdWRp by9hMmRwLmggfCAgICAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXVkaW8vYTJkcC5jIGIvYXVkaW8vYTJkcC5jCmlu ZGV4IDY3ZTI1NzYuLjYwNWRmZWQgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2EyZHAuYworKysgYi9hdWRp by9hMmRwLmMKQEAgLTE2MDEsNiArMTYwMSwzOSBAQCBnYm9vbGVhbiBhMmRwX3NpbmtfY2FuY2Vs KHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKQogCXJldHVybiBUUlVF OwogfQogCitzdHJ1Y3QgYTJkcF9zZXAgKmEyZHBfc2lua19nZXQoc3RydWN0IGF2ZHRwICpzZXNz aW9uLAorCQkJCXN0cnVjdCBhdmR0cF9yZW1vdGVfc2VwICpyc2VwKQoreworCUdTTGlzdCAqbDsK KwlzdHJ1Y3QgYTJkcF9zZXJ2ZXIgKnNlcnZlcjsKKwlzdHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBh YmlsaXR5ICpjYXA7CisJc3RydWN0IGF2ZHRwX21lZGlhX2NvZGVjX2NhcGFiaWxpdHkgKmNvZGVj X2NhcCA9IE5VTEw7CisJYmRhZGRyX3Qgc3JjOworCisJYXZkdHBfZ2V0X3BlZXJzKHNlc3Npb24s ICZzcmMsIE5VTEwpOworCXNlcnZlciA9IGZpbmRfc2VydmVyKHNlcnZlcnMsICZzcmMpOworCWlm ICghc2VydmVyKQorCQlyZXR1cm4gTlVMTDsKKworCWNhcCA9IGF2ZHRwX2dldF9jb2RlYyhyc2Vw KTsKKwljb2RlY19jYXAgPSAodm9pZCAqKSBjYXAtPmRhdGE7CisKKwlmb3IgKGwgPSBzZXJ2ZXIt PnNpbmtzOyBsICE9IE5VTEw7IGwgPSBsLT5uZXh0KSB7CisJCXN0cnVjdCBhMmRwX3NlcCAqc2Vw ID0gbC0+ZGF0YTsKKworCQlpZiAoc2VwLT5sb2NrZWQpCisJCQljb250aW51ZTsKKworCQlpZiAo c2VwLT5jb2RlYyAhPSBjb2RlY19jYXAtPm1lZGlhX2NvZGVjX3R5cGUpCisJCQljb250aW51ZTsK KworCQlpZiAoIXNlcC0+c3RyZWFtIHx8IGF2ZHRwX2hhc19zdHJlYW0oc2Vzc2lvbiwgc2VwLT5z dHJlYW0pKQorCQkJcmV0dXJuIHNlcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwogZ2Jvb2xl YW4gYTJkcF9zZXBfbG9jayhzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwgc3RydWN0IGF2ZHRwICpzZXNz aW9uKQogewogCWlmIChzZXAtPmxvY2tlZCkKZGlmZiAtLWdpdCBhL2F1ZGlvL2EyZHAuaCBiL2F1 ZGlvL2EyZHAuaAppbmRleCBmNzI0ODBjLi5mMGE2MWUzIDEwMDY0NAotLS0gYS9hdWRpby9hMmRw LmgKKysrIGIvYXVkaW8vYTJkcC5oCkBAIC0xNDMsNiArMTQzLDggQEAgdW5zaWduZWQgaW50IGEy ZHBfc291cmNlX3N1c3BlbmQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAg KnNlcCwKIAkJCQlhMmRwX3N0cmVhbV9jYl90IGNiLCB2b2lkICp1c2VyX2RhdGEpOwogZ2Jvb2xl YW4gYTJkcF9zb3VyY2VfY2FuY2VsKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgdW5zaWduZWQg aW50IGlkKTsKIAorc3RydWN0IGEyZHBfc2VwICphMmRwX3NpbmtfZ2V0KHN0cnVjdCBhdmR0cCAq c2Vzc2lvbiwKKwkJCQlzdHJ1Y3QgYXZkdHBfcmVtb3RlX3NlcCAqc2VwKTsKIGdib29sZWFuIGEy ZHBfc2lua19jYW5jZWwoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQp OwogCiBnYm9vbGVhbiBhMmRwX3NlcF9sb2NrKHN0cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1Y3Qg YXZkdHAgKnNlc3Npb24pOwotLSAKMS42LjAuNAoK --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0004-Create-a2dp_sink_config.patch" Content-Disposition: attachment; filename="0004-Create-a2dp_sink_config.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cftjd3 RnJvbSAzZGJkNDEzNTc3OTU5NjFlMjA0YTZkZWVmYzE0OTc3ZThhYWZiZjljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBKdW4gMjAwOSAxNTozMTo1 OCAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBhMmRwX3NpbmtfY29uZmlnKCkuCgotLS0K IGF1ZGlvL2EyZHAuYyB8ICAxMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogYXVkaW8vYTJkcC5oIHwgICAgMyArCiAyIGZpbGVzIGNo YW5nZWQsIDEyMSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2F1 ZGlvL2EyZHAuYyBiL2F1ZGlvL2EyZHAuYwppbmRleCA2MDVkZmVkLi5kYzRmNjk5IDEwMDY0NAot LS0gYS9hdWRpby9hMmRwLmMKKysrIGIvYXVkaW8vYTJkcC5jCkBAIC0xNjM0LDYgKzE2MzQsMTI0 IEBAIHN0cnVjdCBhMmRwX3NlcCAqYTJkcF9zaW5rX2dldChzdHJ1Y3QgYXZkdHAgKnNlc3Npb24s CiAJcmV0dXJuIE5VTEw7CiB9CiAKK3Vuc2lnbmVkIGludCBhMmRwX3NpbmtfY29uZmlnKHN0cnVj dCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEyZHBfc2VwICpzZXAsCisJCQkJYTJkcF9jb25maWdf Y2JfdCBjYiwgR1NMaXN0ICpjYXBzLAorCQkJCXZvaWQgKnVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3Qg YTJkcF9zZXR1cF9jYiAqY2JfZGF0YTsKKwlHU0xpc3QgKmw7CisJc3RydWN0IGEyZHBfc2VydmVy ICpzZXJ2ZXI7CisJc3RydWN0IGEyZHBfc2V0dXAgKnNldHVwOworCXN0cnVjdCBhMmRwX3NlcCAq dG1wOworCXN0cnVjdCBhdmR0cF9sb2NhbF9zZXAgKmxzZXA7CisJc3RydWN0IGF2ZHRwX3JlbW90 ZV9zZXAgKnJzZXA7CisJc3RydWN0IGF2ZHRwX3NlcnZpY2VfY2FwYWJpbGl0eSAqY2FwOworCXN0 cnVjdCBhdmR0cF9tZWRpYV9jb2RlY19jYXBhYmlsaXR5ICpjb2RlY19jYXAgPSBOVUxMOworCWlu dCBwb3NpeF9lcnI7CisJYmRhZGRyX3Qgc3JjOworCisJYXZkdHBfZ2V0X3BlZXJzKHNlc3Npb24s ICZzcmMsIE5VTEwpOworCXNlcnZlciA9IGZpbmRfc2VydmVyKHNlcnZlcnMsICZzcmMpOworCWlm ICghc2VydmVyKQorCQlyZXR1cm4gMDsKKworCWZvciAobCA9IGNhcHM7IGwgIT0gTlVMTDsgbCA9 IGwtPm5leHQpIHsKKwkJY2FwID0gbC0+ZGF0YTsKKworCQlpZiAoY2FwLT5jYXRlZ29yeSAhPSBB VkRUUF9NRURJQV9DT0RFQykKKwkJCWNvbnRpbnVlOworCisJCWNvZGVjX2NhcCA9ICh2b2lkICop IGNhcC0+ZGF0YTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFjb2RlY19jYXApCisJCXJldHVybiAw OworCisJaWYgKHNlcC0+Y29kZWMgIT0gY29kZWNfY2FwLT5tZWRpYV9jb2RlY190eXBlKQorCQly ZXR1cm4gMDsKKworCWRlYnVnKCJhMmRwX3NpbmtfY29uZmlnOiBzZWxlY3RlZCBTRVAgJXAiLCBz ZXAtPnNlcCk7CisKKwljYl9kYXRhID0gZ19uZXcwKHN0cnVjdCBhMmRwX3NldHVwX2NiLCAxKTsK KwljYl9kYXRhLT5jb25maWdfY2IgPSBjYjsKKwljYl9kYXRhLT51c2VyX2RhdGEgPSB1c2VyX2Rh dGE7CisJY2JfZGF0YS0+aWQgPSArK2NiX2lkOworCisJc2V0dXAgPSBmaW5kX3NldHVwX2J5X3Nl c3Npb24oc2Vzc2lvbik7CisJaWYgKCFzZXR1cCkgeworCQlzZXR1cCA9IGdfbmV3MChzdHJ1Y3Qg YTJkcF9zZXR1cCwgMSk7CisJCXNldHVwLT5zZXNzaW9uID0gYXZkdHBfcmVmKHNlc3Npb24pOwor CQlzZXR1cC0+ZGV2ID0gYTJkcF9nZXRfZGV2KHNlc3Npb24pOworCQlzZXR1cHMgPSBnX3NsaXN0 X2FwcGVuZChzZXR1cHMsIHNldHVwKTsKKwl9CisKKwlzZXR1cF9yZWYoc2V0dXApOworCXNldHVw LT5jYiA9IGdfc2xpc3RfYXBwZW5kKHNldHVwLT5jYiwgY2JfZGF0YSk7CisJc2V0dXAtPnNlcCA9 IHNlcDsKKwlzZXR1cC0+c3RyZWFtID0gc2VwLT5zdHJlYW07CisJc2V0dXAtPmNsaWVudF9jYXBz ID0gY2FwczsKKworCXN3aXRjaCAoYXZkdHBfc2VwX2dldF9zdGF0ZShzZXAtPnNlcCkpIHsKKwlj YXNlIEFWRFRQX1NUQVRFX0lETEU6CisJCWZvciAobCA9IHNlcnZlci0+c2lua3M7IGwgIT0gTlVM TDsgbCA9IGwtPm5leHQpIHsKKwkJCXRtcCA9IGwtPmRhdGE7CisKKwkJCWlmIChhdmR0cF9oYXNf c3RyZWFtKHNlc3Npb24sIHRtcC0+c3RyZWFtKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChs ICE9IE5VTEwpIHsKKwkJCXNldHVwLT5yZWNvbmZpZ3VyZSA9IFRSVUU7CisJCQlpZiAoYXZkdHBf Y2xvc2Uoc2Vzc2lvbiwgdG1wLT5zdHJlYW0pIDwgMCkgeworCQkJCWVycm9yKCJhdmR0cF9jbG9z ZSBmYWlsZWQiKTsKKwkJCQlnb3RvIGZhaWxlZDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJ aWYgKGF2ZHRwX2dldF9zZXBzKHNlc3Npb24sIEFWRFRQX1NFUF9UWVBFX1NPVVJDRSwKKwkJCQlj b2RlY19jYXAtPm1lZGlhX3R5cGUsCisJCQkJY29kZWNfY2FwLT5tZWRpYV9jb2RlY190eXBlLAor CQkJCSZsc2VwLCAmcnNlcCkgPCAwKSB7CisJCQllcnJvcigiTm8gbWF0Y2hpbmcgQUNQIGFuZCBJ TlQgU0VQcyBmb3VuZCIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlwb3NpeF9lcnIgPSBh dmR0cF9zZXRfY29uZmlndXJhdGlvbihzZXNzaW9uLCByc2VwLCBsc2VwLAorCQkJCQkJCWNhcHMs ICZzZXR1cC0+c3RyZWFtKTsKKwkJaWYgKHBvc2l4X2VyciA8IDApIHsKKwkJCWVycm9yKCJhdmR0 cF9zZXRfY29uZmlndXJhdGlvbjogJXMiLAorCQkJCXN0cmVycm9yKC1wb3NpeF9lcnIpKTsKKwkJ CWdvdG8gZmFpbGVkOworCQl9CisJCWJyZWFrOworCWNhc2UgQVZEVFBfU1RBVEVfT1BFTjoKKwlj YXNlIEFWRFRQX1NUQVRFX1NUUkVBTUlORzoKKwkJaWYgKGF2ZHRwX3N0cmVhbV9oYXNfY2FwYWJp bGl0aWVzKHNldHVwLT5zdHJlYW0sIGNhcHMpKSB7CisJCQlkZWJ1ZygiQ29uZmlndXJhdGlvbiBt YXRjaDogcmVzdW1pbmciKTsKKwkJCWdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKSBmaW5hbGl6ZV9j b25maWcsIHNldHVwKTsKKwkJfSBlbHNlIGlmICghc2V0dXAtPnJlY29uZmlndXJlKSB7CisJCQlz ZXR1cC0+cmVjb25maWd1cmUgPSBUUlVFOworCQkJaWYgKGF2ZHRwX2Nsb3NlKHNlc3Npb24sIHNl cC0+c3RyZWFtKSA8IDApIHsKKwkJCQllcnJvcigiYXZkdHBfY2xvc2UgZmFpbGVkIik7CisJCQkJ Z290byBmYWlsZWQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IoIlNF UCBpbiBiYWQgc3RhdGUgZm9yIHJlcXVlc3RpbmcgYSBuZXcgc3RyZWFtIik7CisJCWdvdG8gZmFp bGVkOworCX0KKworCXJldHVybiBjYl9kYXRhLT5pZDsKKworZmFpbGVkOgorCXNldHVwX3VucmVm KHNldHVwKTsKKwljYl9pZC0tOworCXJldHVybiAwOworfQorCiBnYm9vbGVhbiBhMmRwX3NlcF9s b2NrKHN0cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24pCiB7CiAJaWYg KHNlcC0+bG9ja2VkKQpkaWZmIC0tZ2l0IGEvYXVkaW8vYTJkcC5oIGIvYXVkaW8vYTJkcC5oCmlu ZGV4IGYwYTYxZTMuLjNiZTM4YTcgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2EyZHAuaAorKysgYi9hdWRp by9hMmRwLmgKQEAgLTE0NSw2ICsxNDUsOSBAQCBnYm9vbGVhbiBhMmRwX3NvdXJjZV9jYW5jZWwo c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaWQpOwogCiBzdHJ1Y3QgYTJk cF9zZXAgKmEyZHBfc2lua19nZXQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAogCQkJCXN0cnVjdCBh dmR0cF9yZW1vdGVfc2VwICpzZXApOwordW5zaWduZWQgaW50IGEyZHBfc2lua19jb25maWcoc3Ry dWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwKKwkJCQlhMmRwX2NvbmZp Z19jYl90IGNiLCBHU0xpc3QgKmNhcHMsCisJCQkJdm9pZCAqdXNlcl9kYXRhKTsKIGdib29sZWFu IGEyZHBfc2lua19jYW5jZWwoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg aWQpOwogCiBnYm9vbGVhbiBhMmRwX3NlcF9sb2NrKHN0cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1 Y3QgYXZkdHAgKnNlc3Npb24pOwotLSAKMS42LjAuNAoK --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0005-Create-a2dp_sink_resume.patch" Content-Disposition: attachment; filename="0005-Create-a2dp_sink_resume.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cfy5p4 RnJvbSAwZmNjYzY2ZGFlOTg0MjZlNDAxNjg3ZDliYjNkZTUxNzE1NDllMzUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBKdW4gMjAwOSAxNjowMDow NCAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBhMmRwX3NpbmtfcmVzdW1lKCkuCgotLS0K IGF1ZGlvL2EyZHAuYyB8ICAgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogYXVkaW8vYTJkcC5oIHwgICAgMiArCiAyIGZpbGVzIGNo YW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXVk aW8vYTJkcC5jIGIvYXVkaW8vYTJkcC5jCmluZGV4IGRjNGY2OTkuLjFjMDVmMjEgMTAwNjQ0Ci0t LSBhL2F1ZGlvL2EyZHAuYworKysgYi9hdWRpby9hMmRwLmMKQEAgLTE3NTIsNiArMTc1Miw2NSBA QCBmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9CiAKK3Vuc2lnbmVkIGludCBhMmRwX3NpbmtfcmVzdW1l KHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEyZHBfc2VwICpzZXAsCisJCQkJYTJkcF9z dHJlYW1fY2JfdCBjYiwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBhMmRwX3NldHVwX2Ni ICpjYl9kYXRhOworCXN0cnVjdCBhMmRwX3NldHVwICpzZXR1cDsKKworCWNiX2RhdGEgPSBnX25l dzAoc3RydWN0IGEyZHBfc2V0dXBfY2IsIDEpOworCWNiX2RhdGEtPnJlc3VtZV9jYiA9IGNiOwor CWNiX2RhdGEtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwljYl9kYXRhLT5pZCA9ICsrY2JfaWQ7 CisKKwlzZXR1cCA9IGZpbmRfc2V0dXBfYnlfc2Vzc2lvbihzZXNzaW9uKTsKKwlpZiAoIXNldHVw KSB7CisJCXNldHVwID0gZ19uZXcwKHN0cnVjdCBhMmRwX3NldHVwLCAxKTsKKwkJc2V0dXAtPnNl c3Npb24gPSBhdmR0cF9yZWYoc2Vzc2lvbik7CisJCXNldHVwLT5kZXYgPSBhMmRwX2dldF9kZXYo c2Vzc2lvbik7CisJCXNldHVwcyA9IGdfc2xpc3RfYXBwZW5kKHNldHVwcywgc2V0dXApOworCX0K KworCXNldHVwX3JlZihzZXR1cCk7CisJc2V0dXAtPmNiID0gZ19zbGlzdF9hcHBlbmQoc2V0dXAt PmNiLCBjYl9kYXRhKTsKKwlzZXR1cC0+c2VwID0gc2VwOworCXNldHVwLT5zdHJlYW0gPSBzZXAt PnN0cmVhbTsKKworCXN3aXRjaCAoYXZkdHBfc2VwX2dldF9zdGF0ZShzZXAtPnNlcCkpIHsKKwlj YXNlIEFWRFRQX1NUQVRFX0lETEU6CisJCWdvdG8gZmFpbGVkOworCQlicmVhazsKKwljYXNlIEFW RFRQX1NUQVRFX09QRU46CisJCWlmIChhdmR0cF9zdGFydChzZXNzaW9uLCBzZXAtPnN0cmVhbSkg PCAwKSB7CisJCQllcnJvcigiYXZkdHBfc3RhcnQgZmFpbGVkIik7CisJCQlnb3RvIGZhaWxlZDsK KwkJfQorCQlicmVhazsKKwljYXNlIEFWRFRQX1NUQVRFX1NUUkVBTUlORzoKKwkJaWYgKCFzZXAt PnN1c3BlbmRpbmcgJiYgc2VwLT5zdXNwZW5kX3RpbWVyKSB7CisJCQlnX3NvdXJjZV9yZW1vdmUo c2VwLT5zdXNwZW5kX3RpbWVyKTsKKwkJCXNlcC0+c3VzcGVuZF90aW1lciA9IDA7CisJCQlhdmR0 cF91bnJlZihzZXAtPnNlc3Npb24pOworCQkJc2VwLT5zZXNzaW9uID0gTlVMTDsKKwkJfQorCQlp ZiAoc2VwLT5zdXNwZW5kaW5nKQorCQkJc2V0dXAtPnN0YXJ0ID0gVFJVRTsKKwkJZWxzZQorCQkJ Z19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpIGZpbmFsaXplX3Jlc3VtZSwgc2V0dXApOworCQlicmVh azsKKwlkZWZhdWx0OgorCQllcnJvcigiU0VQIGluIGJhZCBzdGF0ZSBmb3IgcmVzdW1lIik7CisJ CWdvdG8gZmFpbGVkOworCX0KKworCXJldHVybiBjYl9kYXRhLT5pZDsKKworZmFpbGVkOgorCXNl dHVwX3VucmVmKHNldHVwKTsKKwljYl9pZC0tOworCXJldHVybiAwOworfQorCiBnYm9vbGVhbiBh MmRwX3NlcF9sb2NrKHN0cnVjdCBhMmRwX3NlcCAqc2VwLCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24p CiB7CiAJaWYgKHNlcC0+bG9ja2VkKQpkaWZmIC0tZ2l0IGEvYXVkaW8vYTJkcC5oIGIvYXVkaW8v YTJkcC5oCmluZGV4IDNiZTM4YTcuLmRiMzc4ZGEgMTAwNjQ0Ci0tLSBhL2F1ZGlvL2EyZHAuaAor KysgYi9hdWRpby9hMmRwLmgKQEAgLTE0OCw2ICsxNDgsOCBAQCBzdHJ1Y3QgYTJkcF9zZXAgKmEy ZHBfc2lua19nZXQoc3RydWN0IGF2ZHRwICpzZXNzaW9uLAogdW5zaWduZWQgaW50IGEyZHBfc2lu a19jb25maWcoc3RydWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwKIAkJ CQlhMmRwX2NvbmZpZ19jYl90IGNiLCBHU0xpc3QgKmNhcHMsCiAJCQkJdm9pZCAqdXNlcl9kYXRh KTsKK3Vuc2lnbmVkIGludCBhMmRwX3NpbmtfcmVzdW1lKHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwg c3RydWN0IGEyZHBfc2VwICpzZXAsCisJCQkJYTJkcF9zdHJlYW1fY2JfdCBjYiwgdm9pZCAqdXNl cl9kYXRhKTsKIGdib29sZWFuIGEyZHBfc2lua19jYW5jZWwoc3RydWN0IGF1ZGlvX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgaWQpOwogCiBnYm9vbGVhbiBhMmRwX3NlcF9sb2NrKHN0cnVjdCBh MmRwX3NlcCAqc2VwLCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24pOwotLSAKMS42LjAuNAoK --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0006-Create-a2dp_sink_suspend.patch" Content-Disposition: attachment; filename="0006-Create-a2dp_sink_suspend.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cg2p15 RnJvbSBiYjQyMjcyNjM0NTQ0ZmQ1MDg1ZTk5OWQ2ZDg4NjYyNjE5NGUyNDI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBKdW4gMjAwOSAyMDowMzox MSAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIENyZWF0ZSBhMmRwX3Npbmtfc3VzcGVuZCgpLgoKLS0t CiBhdWRpby9hMmRwLmMgfCAgIDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogYXVkaW8vYTJkcC5oIHwgICAgMiArKwogMiBmaWxlcyBjaGFuZ2Vk LCA1MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2F1ZGlvL2Ey ZHAuYyBiL2F1ZGlvL2EyZHAuYwppbmRleCAxYzA1ZjIxLi43MjFhZDE2IDEwMDY0NAotLS0gYS9h dWRpby9hMmRwLmMKKysrIGIvYXVkaW8vYTJkcC5jCkBAIC0xODExLDYgKzE4MTEsNTcgQEAgZmFp bGVkOgogCXJldHVybiAwOwogfQogCit1bnNpZ25lZCBpbnQgYTJkcF9zaW5rX3N1c3BlbmQoc3Ry dWN0IGF2ZHRwICpzZXNzaW9uLCBzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwKKwkJCQlhMmRwX3N0cmVh bV9jYl90IGNiLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGEyZHBfc2V0dXBfY2IgKmNi X2RhdGE7CisJc3RydWN0IGEyZHBfc2V0dXAgKnNldHVwOworCisJY2JfZGF0YSA9IGdfbmV3MChz dHJ1Y3QgYTJkcF9zZXR1cF9jYiwgMSk7CisJY2JfZGF0YS0+c3VzcGVuZF9jYiA9IGNiOworCWNi X2RhdGEtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwljYl9kYXRhLT5pZCA9ICsrY2JfaWQ7CisK KwlzZXR1cCA9IGZpbmRfc2V0dXBfYnlfc2Vzc2lvbihzZXNzaW9uKTsKKwlpZiAoIXNldHVwKSB7 CisJCXNldHVwID0gZ19uZXcwKHN0cnVjdCBhMmRwX3NldHVwLCAxKTsKKwkJc2V0dXAtPnNlc3Np b24gPSBhdmR0cF9yZWYoc2Vzc2lvbik7CisJCXNldHVwLT5kZXYgPSBhMmRwX2dldF9kZXYoc2Vz c2lvbik7CisJCXNldHVwcyA9IGdfc2xpc3RfYXBwZW5kKHNldHVwcywgc2V0dXApOworCX0KKwor CXNldHVwX3JlZihzZXR1cCk7CisJc2V0dXAtPmNiID0gZ19zbGlzdF9hcHBlbmQoc2V0dXAtPmNi LCBjYl9kYXRhKTsKKwlzZXR1cC0+c2VwID0gc2VwOworCXNldHVwLT5zdHJlYW0gPSBzZXAtPnN0 cmVhbTsKKworCXN3aXRjaCAoYXZkdHBfc2VwX2dldF9zdGF0ZShzZXAtPnNlcCkpIHsKKwljYXNl IEFWRFRQX1NUQVRFX0lETEU6CisJCWVycm9yKCJhMmRwX3Npbmtfc3VzcGVuZDogbm8gc3RyZWFt IHRvIHN1c3BlbmQiKTsKKwkJZ290byBmYWlsZWQ7CisJCWJyZWFrOworCWNhc2UgQVZEVFBfU1RB VEVfT1BFTjoKKwkJZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpIGZpbmFsaXplX3N1c3BlbmQsIHNl dHVwKTsKKwkJYnJlYWs7CisJY2FzZSBBVkRUUF9TVEFURV9TVFJFQU1JTkc6CisJCWlmIChhdmR0 cF9zdXNwZW5kKHNlc3Npb24sIHNlcC0+c3RyZWFtKSA8IDApIHsKKwkJCWVycm9yKCJhdmR0cF9z dXNwZW5kIGZhaWxlZCIpOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJZXJyb3IoIlNFUCBpbiBiYWQgc3RhdGUgZm9yIHN1c3BlbmQiKTsKKwkJZ290byBmYWls ZWQ7CisJfQorCisJcmV0dXJuIGNiX2RhdGEtPmlkOworCitmYWlsZWQ6CisJc2V0dXBfdW5yZWYo c2V0dXApOworCWNiX2lkLS07CisJcmV0dXJuIDA7Cit9CisKIGdib29sZWFuIGEyZHBfc2VwX2xv Y2soc3RydWN0IGEyZHBfc2VwICpzZXAsIHN0cnVjdCBhdmR0cCAqc2Vzc2lvbikKIHsKIAlpZiAo c2VwLT5sb2NrZWQpCmRpZmYgLS1naXQgYS9hdWRpby9hMmRwLmggYi9hdWRpby9hMmRwLmgKaW5k ZXggZGIzNzhkYS4uY2IxYmNiZCAxMDA2NDQKLS0tIGEvYXVkaW8vYTJkcC5oCisrKyBiL2F1ZGlv L2EyZHAuaApAQCAtMTUwLDYgKzE1MCw4IEBAIHVuc2lnbmVkIGludCBhMmRwX3NpbmtfY29uZmln KHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwgc3RydWN0IGEyZHBfc2VwICpzZXAsCiAJCQkJdm9pZCAq dXNlcl9kYXRhKTsKIHVuc2lnbmVkIGludCBhMmRwX3NpbmtfcmVzdW1lKHN0cnVjdCBhdmR0cCAq c2Vzc2lvbiwgc3RydWN0IGEyZHBfc2VwICpzZXAsCiAJCQkJYTJkcF9zdHJlYW1fY2JfdCBjYiwg dm9pZCAqdXNlcl9kYXRhKTsKK3Vuc2lnbmVkIGludCBhMmRwX3Npbmtfc3VzcGVuZChzdHJ1Y3Qg YXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhMmRwX3NlcCAqc2VwLAorCQkJCWEyZHBfc3RyZWFtX2Ni X3QgY2IsIHZvaWQgKnVzZXJfZGF0YSk7CiBnYm9vbGVhbiBhMmRwX3NpbmtfY2FuY2VsKHN0cnVj dCBhdWRpb19kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlkKTsKIAogZ2Jvb2xlYW4gYTJkcF9z ZXBfbG9jayhzdHJ1Y3QgYTJkcF9zZXAgKnNlcCwgc3RydWN0IGF2ZHRwICpzZXNzaW9uKTsKLS0g CjEuNi4wLjQKCg== --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0007-Create-A2DP-Source-interface.patch" Content-Disposition: attachment; filename="0007-Create-A2DP-Source-interface.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cg8o06 RnJvbSBiNDI5YWUwZDRlNTA3ZDIwNmQ2ODlmN2E5Y2IwOTg1MWM2Njk3YjNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTMgSnVuIDIwMDkgMDI6MzM6 MzMgLTAzMDAKU3ViamVjdDogW1BBVENIXSBDcmVhdGUgQTJEUCBTb3VyY2UgaW50ZXJmYWNlLgoK LS0tCiBhdWRpby9NYWtlZmlsZS5hbSB8ICAgIDMgKy0KIGF1ZGlvL21hbmFnZXIuYyAgIHwgICAg NSArCiBhdWRpby9zb3VyY2UuYyAgICB8ICA4NjggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIGF1ZGlvL3NvdXJjZS5oICAgIHwgICA0OCArKysK IDQgZmlsZXMgY2hhbmdlZCwgOTIzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgYXVkaW8vc291cmNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhdWRpby9z b3VyY2UuaAoKZGlmZiAtLWdpdCBhL2F1ZGlvL01ha2VmaWxlLmFtIGIvYXVkaW8vTWFrZWZpbGUu YW0KaW5kZXggY2JkYWQ5Zi4uMzE3MzZiNCAxMDA2NDQKLS0tIGEvYXVkaW8vTWFrZWZpbGUuYW0K KysrIGIvYXVkaW8vTWFrZWZpbGUuYW0KQEAgLTksNyArOSw4IEBAIHBsdWdpbl9MVExJQlJBUklF UyA9IGF1ZGlvLmxhCiBhdWRpb19sYV9TT1VSQ0VTID0gbWFpbi5jIFwKIAlpcGMuaCBpcGMuYyB1 bml4LmggdW5peC5jIG1hbmFnZXIuaCBtYW5hZ2VyLmMgdGVsZXBob255LmggXAogCWRldmljZS5o IGRldmljZS5jIGhlYWRzZXQuaCBoZWFkc2V0LmMgZ2F0ZXdheS5oIGdhdGV3YXkuYyBcCi0JYXZk dHAuaCBhdmR0cC5jIGEyZHAuaCBhMmRwLmMgc2luay5oIHNpbmsuYyBjb250cm9sLmggY29udHJv bC5jCisJYXZkdHAuaCBhdmR0cC5jIGEyZHAuaCBhMmRwLmMgc2luay5oIHNpbmsuYyBzb3VyY2Uu aCBzb3VyY2UuYyBcCisJY29udHJvbC5oIGNvbnRyb2wuYwogCiBub2Rpc3RfYXVkaW9fbGFfU09V UkNFUyA9ICQoQlVJTFRfU09VUkNFUykKIApkaWZmIC0tZ2l0IGEvYXVkaW8vbWFuYWdlci5jIGIv YXVkaW8vbWFuYWdlci5jCmluZGV4IGRjMGY2YTkuLmI2MGMzNGUgMTAwNjQ0Ci0tLSBhL2F1ZGlv L21hbmFnZXIuYworKysgYi9hdWRpby9tYW5hZ2VyLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNs dWRlICJoZWFkc2V0LmgiCiAjaW5jbHVkZSAiZ2F0ZXdheS5oIgogI2luY2x1ZGUgInNpbmsuaCIK KyNpbmNsdWRlICJzb3VyY2UuaCIKICNpbmNsdWRlICJjb250cm9sLmgiCiAjaW5jbHVkZSAibWFu YWdlci5oIgogI2luY2x1ZGUgInNkcGQuaCIKQEAgLTE0Miw2ICsxNDMsOCBAQCBnYm9vbGVhbiBz ZXJ2ZXJfaXNfZW5hYmxlZChiZGFkZHJfdCAqc3JjLCB1aW50MTZfdCBzdmMpCiAJCXJldHVybiBl bmFibGVkLmdhdGV3YXk7CiAJY2FzZSBBVURJT19TSU5LX1NWQ0xBU1NfSUQ6CiAJCXJldHVybiBl bmFibGVkLnNpbms7CisJY2FzZSBBVURJT19TT1VSQ0VfU1ZDTEFTU19JRDoKKwkJcmV0dXJuIGVu YWJsZWQuc291cmNlOwogCWNhc2UgQVZfUkVNT1RFX1RBUkdFVF9TVkNMQVNTX0lEOgogCWNhc2Ug QVZfUkVNT1RFX1NWQ0xBU1NfSUQ6CiAJCXJldHVybiBlbmFibGVkLmNvbnRyb2w7CkBAIC0yMDUs NiArMjA4LDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3V1aWQoY29uc3QgY2hhciAqdXVpZHN0ciwg c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlKQogCQlicmVhazsKIAljYXNlIEFVRElPX1NPVVJD RV9TVkNMQVNTX0lEOgogCQlkZWJ1ZygiRm91bmQgQXVkaW8gU291cmNlIik7CisJCWlmIChkZXZp Y2UtPnNvdXJjZSA9PSBOVUxMKQorCQkJZGV2aWNlLT5zb3VyY2UgPSBzb3VyY2VfaW5pdChkZXZp Y2UpOwogCQlicmVhazsKIAljYXNlIEFWX1JFTU9URV9TVkNMQVNTX0lEOgogCWNhc2UgQVZfUkVN T1RFX1RBUkdFVF9TVkNMQVNTX0lEOgpkaWZmIC0tZ2l0IGEvYXVkaW8vc291cmNlLmMgYi9hdWRp by9zb3VyY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZiODdiCi0t LSAvZGV2L251bGwKKysrIGIvYXVkaW8vc291cmNlLmMKQEAgLTAsMCArMSw4NjggQEAKKy8qCisg KgorICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICoKKyAq ICBDb3B5cmlnaHQgKEMpCisgKgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNp bmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVk ZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRl IDxibHVldG9vdGgvc2RwLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8ZGJ1cy9k YnVzLmg+CisjaW5jbHVkZSA8Z2RidXMuaD4KKworI2luY2x1ZGUgImxvZ2dpbmcuaCIKKworI2lu Y2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgImF2ZHRwLmgiCisjaW5jbHVkZSAiYTJkcC5oIgor I2luY2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAic291cmNlLmgiCisjaW5jbHVkZSAiZGJ1cy1j b21tb24uaCIKKyNpbmNsdWRlICIuLi9zcmMvYWRhcHRlci5oIgorI2luY2x1ZGUgIi4uL3NyYy9k ZXZpY2UuaCIKKworI2RlZmluZSBTVFJFQU1fU0VUVVBfUkVUUllfVElNRVIgMgorCitzdHJ1Y3Qg cGVuZGluZ19yZXF1ZXN0IHsKKwlEQnVzQ29ubmVjdGlvbiAqY29ubjsKKwlEQnVzTWVzc2FnZSAq bXNnOworCXVuc2lnbmVkIGludCBpZDsKK307CisKK3N0cnVjdCBzb3VyY2UgeworCXN0cnVjdCBh dWRpb19kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgYXZkdHAgKnNlc3Npb247CisJc3RydWN0IGF2ZHRw X3N0cmVhbSAqc3RyZWFtOworCXVuc2lnbmVkIGludCBjYl9pZDsKKwlndWludCBkY19pZDsKKwln dWludCByZXRyeV9pZDsKKwlhdmR0cF9zZXNzaW9uX3N0YXRlX3Qgc2Vzc2lvbl9zdGF0ZTsKKwlh dmR0cF9zdGF0ZV90IHN0cmVhbV9zdGF0ZTsKKwlzb3VyY2Vfc3RhdGVfdCBzdGF0ZTsKKwlzdHJ1 Y3QgcGVuZGluZ19yZXF1ZXN0ICpjb25uZWN0OworCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKmRp c2Nvbm5lY3Q7CisJREJ1c0Nvbm5lY3Rpb24gKmNvbm47Cit9OworCitzdHJ1Y3Qgc291cmNlX3N0 YXRlX2NhbGxiYWNrIHsKKwlzb3VyY2Vfc3RhdGVfY2IgY2I7CisJdm9pZCAqdXNlcl9kYXRhOwor CXVuc2lnbmVkIGludCBpZDsKK307CisKK3N0YXRpYyBHU0xpc3QgKnNvdXJjZV9jYWxsYmFja3Mg PSBOVUxMOworCitzdGF0aWMgdW5zaWduZWQgaW50IGF2ZHRwX2NhbGxiYWNrX2lkID0gMDsKKwor c3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlMnN0cihzb3VyY2Vfc3RhdGVfdCBzdGF0ZSkKK3sKKwlz d2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBTT1VSQ0VfU1RBVEVfRElTQ09OTkVDVEVEOgorCQlyZXR1 cm4gImRpc2Nvbm5lY3RlZCI7CisJY2FzZSBTT1VSQ0VfU1RBVEVfQ09OTkVDVElORzoKKwkJcmV0 dXJuICJjb25uZWN0aW5nIjsKKwljYXNlIFNPVVJDRV9TVEFURV9DT05ORUNURUQ6CisJCXJldHVy biAiY29ubmVjdGVkIjsKKwljYXNlIFNPVVJDRV9TVEFURV9QTEFZSU5HOgorCQlyZXR1cm4gInBs YXlpbmciOworCWRlZmF1bHQ6CisJCWVycm9yKCJJbnZhbGlkIHNvdXJjZSBzdGF0ZSAlZCIsIHN0 YXRlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBzb3VyY2Vfc2V0X3N0 YXRlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwgc291cmNlX3N0YXRlX3QgbmV3X3N0YXRlKQor eworCXN0cnVjdCBzb3VyY2UgKnNvdXJjZSA9IGRldi0+c291cmNlOworCWNvbnN0IGNoYXIgKnN0 YXRlX3N0cjsKKwlzb3VyY2Vfc3RhdGVfdCBvbGRfc3RhdGUgPSBzb3VyY2UtPnN0YXRlOworCUdT TGlzdCAqbDsKKworCXNvdXJjZS0+c3RhdGUgPSBuZXdfc3RhdGU7CisKKwlzdGF0ZV9zdHIgPSBz dGF0ZTJzdHIobmV3X3N0YXRlKTsKKwlpZiAoc3RhdGVfc3RyKQorCQllbWl0X3Byb3BlcnR5X2No YW5nZWQoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCUFVRElPX1NPVVJDRV9JTlRFUkZBQ0Us ICJTdGF0ZSIsCisJCQkJCURCVVNfVFlQRV9TVFJJTkcsICZzdGF0ZV9zdHIpOworCisJZm9yIChs ID0gc291cmNlX2NhbGxiYWNrczsgbCAhPSBOVUxMOyBsID0gbC0+bmV4dCkgeworCQlzdHJ1Y3Qg c291cmNlX3N0YXRlX2NhbGxiYWNrICpjYiA9IGwtPmRhdGE7CisJCWNiLT5jYihkZXYsIG9sZF9z dGF0ZSwgbmV3X3N0YXRlLCBjYi0+dXNlcl9kYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF2 ZHRwX3N0YXRlX2NhbGxiYWNrKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0 IGF2ZHRwICpzZXNzaW9uLAorCQkJCQlhdmR0cF9zZXNzaW9uX3N0YXRlX3Qgb2xkX3N0YXRlLAor CQkJCQlhdmR0cF9zZXNzaW9uX3N0YXRlX3QgbmV3X3N0YXRlLAorCQkJCQl2b2lkICp1c2VyX2Rh dGEpCit7CisJc3RydWN0IHNvdXJjZSAqc291cmNlID0gZGV2LT5zb3VyY2U7CisKKwlpZiAoc291 cmNlID09IE5VTEwpCisJCXJldHVybjsKKworCXN3aXRjaCAobmV3X3N0YXRlKSB7CisJY2FzZSBB VkRUUF9TRVNTSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKwkJaWYgKHNvdXJjZS0+c3RhdGUgIT0g U09VUkNFX1NUQVRFX0NPTk5FQ1RJTkcpIHsKKwkJCWdib29sZWFuIHZhbHVlID0gRkFMU0U7CisJ CQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCUFVRElPX1NP VVJDRV9JTlRFUkZBQ0UsICJEaXNjb25uZWN0ZWQiLAorCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7 CisJCQllbWl0X3Byb3BlcnR5X2NoYW5nZWQoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCUFV RElPX1NPVVJDRV9JTlRFUkZBQ0UsICJDb25uZWN0ZWQiLAorCQkJCQlEQlVTX1RZUEVfQk9PTEVB TiwgJnZhbHVlKTsKKwkJCWlmIChzb3VyY2UtPmRjX2lkKSB7CisJCQkJZGV2aWNlX3JlbW92ZV9k aXNjb25uZWN0X3dhdGNoKGRldi0+YnRkX2RldiwKKwkJCQkJCQkJc291cmNlLT5kY19pZCk7CisJ CQkJc291cmNlLT5kY19pZCA9IDA7CisJCQl9CisJCX0KKwkJc291cmNlX3NldF9zdGF0ZShkZXYs IFNPVVJDRV9TVEFURV9ESVNDT05ORUNURUQpOworCQlicmVhazsKKwljYXNlIEFWRFRQX1NFU1NJ T05fU1RBVEVfQ09OTkVDVElORzoKKwkJc291cmNlX3NldF9zdGF0ZShkZXYsIFNPVVJDRV9TVEFU RV9DT05ORUNUSU5HKTsKKwkJYnJlYWs7CisJY2FzZSBBVkRUUF9TRVNTSU9OX1NUQVRFX0NPTk5F Q1RFRDoKKwkJYnJlYWs7CisJfQorCisJc291cmNlLT5zZXNzaW9uX3N0YXRlID0gbmV3X3N0YXRl OworfQorCitzdGF0aWMgdm9pZCBwZW5kaW5nX3JlcXVlc3RfZnJlZShzdHJ1Y3QgYXVkaW9fZGV2 aWNlICpkZXYsCisJCQkJCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnBlbmRpbmcpCit7CisJaWYg KHBlbmRpbmctPmNvbm4pCisJCWRidXNfY29ubmVjdGlvbl91bnJlZihwZW5kaW5nLT5jb25uKTsK KwlpZiAocGVuZGluZy0+bXNnKQorCQlkYnVzX21lc3NhZ2VfdW5yZWYocGVuZGluZy0+bXNnKTsK KwlpZiAocGVuZGluZy0+aWQpCisJCWEyZHBfc2lua19jYW5jZWwoZGV2LCBwZW5kaW5nLT5pZCk7 CisKKwlnX2ZyZWUocGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2Nvbm5lY3RfY2Ioc3Ry dWN0IGJ0ZF9kZXZpY2UgKmJ0ZF9kZXYsIGdib29sZWFuIHJlbW92YWwsCisJCQkJdm9pZCAqdXNl cl9kYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IHVzZXJfZGF0YTsKKwlz dHJ1Y3Qgc291cmNlICpzb3VyY2UgPSBkZXZpY2UtPnNvdXJjZTsKKworCWRlYnVnKCJTb3VyY2U6 IGRpc2Nvbm5lY3QgJXMiLCBkZXZpY2UtPnBhdGgpOworCisJYXZkdHBfY2xvc2Uoc291cmNlLT5z ZXNzaW9uLCBzb3VyY2UtPnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVhbV9zdGF0ZV9j aGFuZ2VkKHN0cnVjdCBhdmR0cF9zdHJlYW0gKnN0cmVhbSwKKwkJCQkJYXZkdHBfc3RhdGVfdCBv bGRfc3RhdGUsCisJCQkJCWF2ZHRwX3N0YXRlX3QgbmV3X3N0YXRlLAorCQkJCQlzdHJ1Y3QgYXZk dHBfZXJyb3IgKmVyciwKKwkJCQkJdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBhdWRpb19k ZXZpY2UgKmRldiA9IHVzZXJfZGF0YTsKKwlzdHJ1Y3Qgc291cmNlICpzb3VyY2UgPSBkZXYtPnNv dXJjZTsKKwlnYm9vbGVhbiB2YWx1ZTsKKworCWlmIChlcnIpCisJCXJldHVybjsKKworCXN3aXRj aCAobmV3X3N0YXRlKSB7CisJY2FzZSBBVkRUUF9TVEFURV9JRExFOgorCQlpZiAoc291cmNlLT5k aXNjb25uZWN0KSB7CisJCQlEQnVzTWVzc2FnZSAqcmVwbHk7CisJCQlzdHJ1Y3QgcGVuZGluZ19y ZXF1ZXN0ICpwOworCisJCQlwID0gc291cmNlLT5kaXNjb25uZWN0OworCQkJc291cmNlLT5kaXNj b25uZWN0ID0gTlVMTDsKKworCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1 cm4ocC0+bXNnKTsKKwkJCWdfZGJ1c19zZW5kX21lc3NhZ2UocC0+Y29ubiwgcmVwbHkpOworCQkJ cGVuZGluZ19yZXF1ZXN0X2ZyZWUoZGV2LCBwKTsKKwkJfQorCisJCWlmIChzb3VyY2UtPmRjX2lk KSB7CisJCQlkZXZpY2VfcmVtb3ZlX2Rpc2Nvbm5lY3Rfd2F0Y2goZGV2LT5idGRfZGV2LAorCQkJ CQkJCXNvdXJjZS0+ZGNfaWQpOworCQkJc291cmNlLT5kY19pZCA9IDA7CisJCX0KKworCQlpZiAo c291cmNlLT5zZXNzaW9uKSB7CisJCQlhdmR0cF91bnJlZihzb3VyY2UtPnNlc3Npb24pOworCQkJ c291cmNlLT5zZXNzaW9uID0gTlVMTDsKKwkJfQorCQlzb3VyY2UtPnN0cmVhbSA9IE5VTEw7CisJ CXNvdXJjZS0+Y2JfaWQgPSAwOworCQlicmVhazsKKwljYXNlIEFWRFRQX1NUQVRFX09QRU46CisJ CWlmIChvbGRfc3RhdGUgPT0gQVZEVFBfU1RBVEVfQ09ORklHVVJFRCAmJgorCQkJCXNvdXJjZS0+ c3RhdGUgPT0gU09VUkNFX1NUQVRFX0NPTk5FQ1RJTkcpIHsKKwkJCXZhbHVlID0gVFJVRTsKKwkJ CWdfZGJ1c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwKKwkJCQkJCUFVRElPX1NP VVJDRV9JTlRFUkZBQ0UsCisJCQkJCQkiQ29ubmVjdGVkIiwKKwkJCQkJCURCVVNfVFlQRV9JTlZB TElEKTsKKwkJCWVtaXRfcHJvcGVydHlfY2hhbmdlZChkZXYtPmNvbm4sIGRldi0+cGF0aCwKKwkJ CQkJCUFVRElPX1NPVVJDRV9JTlRFUkZBQ0UsCisJCQkJCQkiQ29ubmVjdGVkIiwKKwkJCQkJCURC VVNfVFlQRV9CT09MRUFOLCAmdmFsdWUpOworCQkJc291cmNlLT5kY19pZCA9IGRldmljZV9hZGRf ZGlzY29ubmVjdF93YXRjaChkZXYtPmJ0ZF9kZXYsCisJCQkJCQkJCWRpc2Nvbm5lY3RfY2IsCisJ CQkJCQkJCWRldiwgTlVMTCk7CisJCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IEFWRFRQX1NUQVRF X1NUUkVBTUlORykgeworCQkJdmFsdWUgPSBGQUxTRTsKKwkJCWdfZGJ1c19lbWl0X3NpZ25hbChk ZXYtPmNvbm4sIGRldi0+cGF0aCwKKwkJCQkJCUFVRElPX1NPVVJDRV9JTlRFUkZBQ0UsCisJCQkJ CQkiU3RvcHBlZCIsCisJCQkJCQlEQlVTX1RZUEVfSU5WQUxJRCk7CisJCQllbWl0X3Byb3BlcnR5 X2NoYW5nZWQoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCQlBVURJT19TT1VSQ0VfSU5URVJG QUNFLAorCQkJCQkJIlBsYXlpbmciLAorCQkJCQkJREJVU19UWVBFX0JPT0xFQU4sICZ2YWx1ZSk7 CisJCX0KKwkJc291cmNlX3NldF9zdGF0ZShkZXYsIFNPVVJDRV9TVEFURV9DT05ORUNURUQpOwor CQlicmVhazsKKwljYXNlIEFWRFRQX1NUQVRFX1NUUkVBTUlORzoKKwkJdmFsdWUgPSBUUlVFOwor CQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsIEFVRElPX1NPVVJDRV9J TlRFUkZBQ0UsCisJCQkJCSJQbGF5aW5nIiwgREJVU19UWVBFX0lOVkFMSUQpOworCQllbWl0X3By b3BlcnR5X2NoYW5nZWQoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCUFVRElPX1NPVVJDRV9J TlRFUkZBQ0UsICJQbGF5aW5nIiwKKwkJCQkJREJVU19UWVBFX0JPT0xFQU4sICZ2YWx1ZSk7CisJ CXNvdXJjZV9zZXRfc3RhdGUoZGV2LCBTT1VSQ0VfU1RBVEVfUExBWUlORyk7CisJCWJyZWFrOwor CWNhc2UgQVZEVFBfU1RBVEVfQ09ORklHVVJFRDoKKwljYXNlIEFWRFRQX1NUQVRFX0NMT1NJTkc6 CisJY2FzZSBBVkRUUF9TVEFURV9BQk9SVElORzoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisK Kwlzb3VyY2UtPnN0cmVhbV9zdGF0ZSA9IG5ld19zdGF0ZTsKK30KKworc3RhdGljIERCdXNIYW5k bGVyUmVzdWx0IGVycm9yX2ZhaWxlZChEQnVzQ29ubmVjdGlvbiAqY29ubiwKKwkJCQkJREJ1c01l c3NhZ2UgKm1zZywgY29uc3QgY2hhciAqIGRlc2MpCit7CisJcmV0dXJuIGVycm9yX2NvbW1vbl9y ZXBseShjb25uLCBtc2csIEVSUk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIsIGRlc2MpOworfQorCitz dGF0aWMgZ2Jvb2xlYW4gc3RyZWFtX3NldHVwX3JldHJ5KGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK KwlzdHJ1Y3Qgc291cmNlICpzb3VyY2UgPSB1c2VyX2RhdGE7CisJc3RydWN0IHBlbmRpbmdfcmVx dWVzdCAqcGVuZGluZyA9IHNvdXJjZS0+Y29ubmVjdDsKKworCXNvdXJjZS0+cmV0cnlfaWQgPSAw OworCisJaWYgKHNvdXJjZS0+c3RyZWFtX3N0YXRlID49IEFWRFRQX1NUQVRFX09QRU4pIHsKKwkJ ZGVidWcoIlN0cmVhbSBzdWNjZXNzZnVsbHkgY3JlYXRlZCwgYWZ0ZXIgWENBU0UgY29ubmVjdDpj b25uZWN0Iik7CisJCWlmIChwZW5kaW5nLT5tc2cpIHsKKwkJCURCdXNNZXNzYWdlICpyZXBseTsK KwkJCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKHBlbmRpbmctPm1zZyk7 CisJCQlnX2RidXNfc2VuZF9tZXNzYWdlKHBlbmRpbmctPmNvbm4sIHJlcGx5KTsKKwkJfQorCX0g ZWxzZSB7CisJCWRlYnVnKCJTdHJlYW0gc2V0dXAgZmFpbGVkLCBhZnRlciBYQ0FTRSBjb25uZWN0 OmNvbm5lY3QiKTsKKwkJaWYgKHBlbmRpbmctPm1zZykKKwkJCWVycm9yX2ZhaWxlZChwZW5kaW5n LT5jb25uLCBwZW5kaW5nLT5tc2csICJTdHJlYW0gc2V0dXAgZmFpbGVkIik7CisJfQorCisJc291 cmNlLT5jb25uZWN0ID0gTlVMTDsKKwlwZW5kaW5nX3JlcXVlc3RfZnJlZShzb3VyY2UtPmRldiwg cGVuZGluZyk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVhbV9zZXR1 cF9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sIHN0cnVjdCBhMmRwX3NlcCAqc2VwLAor CQkJCQlzdHJ1Y3QgYXZkdHBfc3RyZWFtICpzdHJlYW0sCisJCQkJCXN0cnVjdCBhdmR0cF9lcnJv ciAqZXJyLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IHNvdXJjZSAqc291cmNlID0gdXNl cl9kYXRhOworCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnBlbmRpbmc7CisKKwlwZW5kaW5nID0g c291cmNlLT5jb25uZWN0OworCisJcGVuZGluZy0+aWQgPSAwOworCisJaWYgKHN0cmVhbSkgewor CQlkZWJ1ZygiU3RyZWFtIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIik7CisKKwkJaWYgKHBlbmRpbmct Pm1zZykgeworCQkJREJ1c01lc3NhZ2UgKnJlcGx5OworCQkJcmVwbHkgPSBkYnVzX21lc3NhZ2Vf bmV3X21ldGhvZF9yZXR1cm4ocGVuZGluZy0+bXNnKTsKKwkJCWdfZGJ1c19zZW5kX21lc3NhZ2Uo cGVuZGluZy0+Y29ubiwgcmVwbHkpOworCQl9CisKKwkJc291cmNlLT5jb25uZWN0ID0gTlVMTDsK KwkJcGVuZGluZ19yZXF1ZXN0X2ZyZWUoc291cmNlLT5kZXYsIHBlbmRpbmcpOworCisJCXJldHVy bjsKKwl9CisKKwlhdmR0cF91bnJlZihzb3VyY2UtPnNlc3Npb24pOworCXNvdXJjZS0+c2Vzc2lv biA9IE5VTEw7CisJaWYgKGF2ZHRwX2Vycm9yX3R5cGUoZXJyKSA9PSBBVkRUUF9FUlJPUl9FUlJO TworCQkJJiYgYXZkdHBfZXJyb3JfcG9zaXhfZXJybm8oZXJyKSAhPSBFSE9TVERPV04pIHsKKwkJ ZGVidWcoImNvbm5lY3Q6Y29ubmVjdCBYQ0FTRSBkZXRlY3RlZCIpOworCQlzb3VyY2UtPnJldHJ5 X2lkID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKFNUUkVBTV9TRVRVUF9SRVRSWV9USU1FUiwKKwkJ CQkJCQlzdHJlYW1fc2V0dXBfcmV0cnksCisJCQkJCQkJc291cmNlKTsKKwl9IGVsc2UgeworCQlp ZiAocGVuZGluZy0+bXNnKQorCQkJZXJyb3JfZmFpbGVkKHBlbmRpbmctPmNvbm4sIHBlbmRpbmct Pm1zZywgIlN0cmVhbSBzZXR1cCBmYWlsZWQiKTsKKwkJc291cmNlLT5jb25uZWN0ID0gTlVMTDsK KwkJcGVuZGluZ19yZXF1ZXN0X2ZyZWUoc291cmNlLT5kZXYsIHBlbmRpbmcpOworCQlkZWJ1Zygi U3RyZWFtIHNldHVwIGZhaWxlZCA6ICVzIiwgYXZkdHBfc3RyZXJyb3IoZXJyKSk7CisJfQorfQor CitzdGF0aWMgdWludDhfdCBkZWZhdWx0X2JpdHBvb2wodWludDhfdCBmcmVxLCB1aW50OF90IG1v ZGUpCit7CisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSBTQkNfU0FNUExJTkdfRlJFUV8xNjAwMDoK KwljYXNlIFNCQ19TQU1QTElOR19GUkVRXzMyMDAwOgorCQlyZXR1cm4gNTM7CisJY2FzZSBTQkNf U0FNUExJTkdfRlJFUV80NDEwMDoKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgU0JDX0NIQU5O RUxfTU9ERV9NT05POgorCQljYXNlIFNCQ19DSEFOTkVMX01PREVfRFVBTF9DSEFOTkVMOgorCQkJ cmV0dXJuIDMxOworCQljYXNlIFNCQ19DSEFOTkVMX01PREVfU1RFUkVPOgorCQljYXNlIFNCQ19D SEFOTkVMX01PREVfSk9JTlRfU1RFUkVPOgorCQkJcmV0dXJuIDUzOworCQlkZWZhdWx0OgorCQkJ ZXJyb3IoIkludmFsaWQgY2hhbm5lbCBtb2RlICV1IiwgbW9kZSk7CisJCQlyZXR1cm4gNTM7CisJ CX0KKwljYXNlIFNCQ19TQU1QTElOR19GUkVRXzQ4MDAwOgorCQlzd2l0Y2ggKG1vZGUpIHsKKwkJ Y2FzZSBTQkNfQ0hBTk5FTF9NT0RFX01PTk86CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9EVUFM X0NIQU5ORUw6CisJCQlyZXR1cm4gMjk7CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9TVEVSRU86 CisJCWNhc2UgU0JDX0NIQU5ORUxfTU9ERV9KT0lOVF9TVEVSRU86CisJCQlyZXR1cm4gNTE7CisJ CWRlZmF1bHQ6CisJCQllcnJvcigiSW52YWxpZCBjaGFubmVsIG1vZGUgJXUiLCBtb2RlKTsKKwkJ CXJldHVybiA1MTsKKwkJfQorCWRlZmF1bHQ6CisJCWVycm9yKCJJbnZhbGlkIHNhbXBsaW5nIGZy ZXEgJXUiLCBmcmVxKTsKKwkJcmV0dXJuIDUzOworCX0KK30KKworc3RhdGljIGdib29sZWFuIHNl bGVjdF9zYmNfcGFyYW1zKHN0cnVjdCBzYmNfY29kZWNfY2FwICpjYXAsCisJCQkJCXN0cnVjdCBz YmNfY29kZWNfY2FwICpzdXBwb3J0ZWQpCit7CisJdW5zaWduZWQgaW50IG1heF9iaXRwb29sLCBt aW5fYml0cG9vbDsKKworCW1lbXNldChjYXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2JjX2NvZGVjX2Nh cCkpOworCisJY2FwLT5jYXAubWVkaWFfdHlwZSA9IEFWRFRQX01FRElBX1RZUEVfQVVESU87CisJ Y2FwLT5jYXAubWVkaWFfY29kZWNfdHlwZSA9IEEyRFBfQ09ERUNfU0JDOworCisJaWYgKHN1cHBv cnRlZC0+ZnJlcXVlbmN5ICYgU0JDX1NBTVBMSU5HX0ZSRVFfNDQxMDApCisJCWNhcC0+ZnJlcXVl bmN5ID0gU0JDX1NBTVBMSU5HX0ZSRVFfNDQxMDA7CisJZWxzZSBpZiAoc3VwcG9ydGVkLT5mcmVx dWVuY3kgJiBTQkNfU0FNUExJTkdfRlJFUV80ODAwMCkKKwkJY2FwLT5mcmVxdWVuY3kgPSBTQkNf U0FNUExJTkdfRlJFUV80ODAwMDsKKwllbHNlIGlmIChzdXBwb3J0ZWQtPmZyZXF1ZW5jeSAmIFNC Q19TQU1QTElOR19GUkVRXzMyMDAwKQorCQljYXAtPmZyZXF1ZW5jeSA9IFNCQ19TQU1QTElOR19G UkVRXzMyMDAwOworCWVsc2UgaWYgKHN1cHBvcnRlZC0+ZnJlcXVlbmN5ICYgU0JDX1NBTVBMSU5H X0ZSRVFfMTYwMDApCisJCWNhcC0+ZnJlcXVlbmN5ID0gU0JDX1NBTVBMSU5HX0ZSRVFfMTYwMDA7 CisJZWxzZSB7CisJCWVycm9yKCJObyBzdXBwb3J0ZWQgZnJlcXVlbmNpZXMiKTsKKwkJcmV0dXJu IEZBTFNFOworCX0KKworCWlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9kZSAmIFNCQ19DSEFOTkVM X01PREVfSk9JTlRfU1RFUkVPKQorCQljYXAtPmNoYW5uZWxfbW9kZSA9IFNCQ19DSEFOTkVMX01P REVfSk9JTlRfU1RFUkVPOworCWVsc2UgaWYgKHN1cHBvcnRlZC0+Y2hhbm5lbF9tb2RlICYgU0JD X0NIQU5ORUxfTU9ERV9TVEVSRU8pCisJCWNhcC0+Y2hhbm5lbF9tb2RlID0gU0JDX0NIQU5ORUxf TU9ERV9TVEVSRU87CisJZWxzZSBpZiAoc3VwcG9ydGVkLT5jaGFubmVsX21vZGUgJiBTQkNfQ0hB Tk5FTF9NT0RFX0RVQUxfQ0hBTk5FTCkKKwkJY2FwLT5jaGFubmVsX21vZGUgPSBTQkNfQ0hBTk5F TF9NT0RFX0RVQUxfQ0hBTk5FTDsKKwllbHNlIGlmIChzdXBwb3J0ZWQtPmNoYW5uZWxfbW9kZSAm IFNCQ19DSEFOTkVMX01PREVfTU9OTykKKwkJY2FwLT5jaGFubmVsX21vZGUgPSBTQkNfQ0hBTk5F TF9NT0RFX01PTk87CisJZWxzZSB7CisJCWVycm9yKCJObyBzdXBwb3J0ZWQgY2hhbm5lbCBtb2Rl cyIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3Ro ICYgU0JDX0JMT0NLX0xFTkdUSF8xNikKKwkJY2FwLT5ibG9ja19sZW5ndGggPSBTQkNfQkxPQ0tf TEVOR1RIXzE2OworCWVsc2UgaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NL X0xFTkdUSF8xMikKKwkJY2FwLT5ibG9ja19sZW5ndGggPSBTQkNfQkxPQ0tfTEVOR1RIXzEyOwor CWVsc2UgaWYgKHN1cHBvcnRlZC0+YmxvY2tfbGVuZ3RoICYgU0JDX0JMT0NLX0xFTkdUSF84KQor CQljYXAtPmJsb2NrX2xlbmd0aCA9IFNCQ19CTE9DS19MRU5HVEhfODsKKwllbHNlIGlmIChzdXBw b3J0ZWQtPmJsb2NrX2xlbmd0aCAmIFNCQ19CTE9DS19MRU5HVEhfNCkKKwkJY2FwLT5ibG9ja19s ZW5ndGggPSBTQkNfQkxPQ0tfTEVOR1RIXzQ7CisJZWxzZSB7CisJCWVycm9yKCJObyBzdXBwb3J0 ZWQgYmxvY2sgbGVuZ3RocyIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKHN1cHBvcnRl ZC0+c3ViYmFuZHMgJiBTQkNfU1VCQkFORFNfOCkKKwkJY2FwLT5zdWJiYW5kcyA9IFNCQ19TVUJC QU5EU184OworCWVsc2UgaWYgKHN1cHBvcnRlZC0+c3ViYmFuZHMgJiBTQkNfU1VCQkFORFNfNCkK KwkJY2FwLT5zdWJiYW5kcyA9IFNCQ19TVUJCQU5EU180OworCWVsc2UgeworCQllcnJvcigiTm8g c3VwcG9ydGVkIHN1YmJhbmRzIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoc3VwcG9y dGVkLT5hbGxvY2F0aW9uX21ldGhvZCAmIFNCQ19BTExPQ0FUSU9OX0xPVURORVNTKQorCQljYXAt PmFsbG9jYXRpb25fbWV0aG9kID0gU0JDX0FMTE9DQVRJT05fTE9VRE5FU1M7CisJZWxzZSBpZiAo c3VwcG9ydGVkLT5hbGxvY2F0aW9uX21ldGhvZCAmIFNCQ19BTExPQ0FUSU9OX1NOUikKKwkJY2Fw LT5hbGxvY2F0aW9uX21ldGhvZCA9IFNCQ19BTExPQ0FUSU9OX1NOUjsKKworCW1pbl9iaXRwb29s ID0gTUFYKE1JTl9CSVRQT09MLCBzdXBwb3J0ZWQtPm1pbl9iaXRwb29sKTsKKwltYXhfYml0cG9v bCA9IE1JTihkZWZhdWx0X2JpdHBvb2woY2FwLT5mcmVxdWVuY3ksIGNhcC0+Y2hhbm5lbF9tb2Rl KSwKKwkJCQkJCQlzdXBwb3J0ZWQtPm1heF9iaXRwb29sKTsKKworCWNhcC0+bWluX2JpdHBvb2wg PSBtaW5fYml0cG9vbDsKKwljYXAtPm1heF9iaXRwb29sID0gbWF4X2JpdHBvb2w7CisKKwlyZXR1 cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHNlbGVjdF9jYXBhYmlsaXRpZXMoc3RydWN0 IGF2ZHRwICpzZXNzaW9uLAorCQkJCQlzdHJ1Y3QgYXZkdHBfcmVtb3RlX3NlcCAqcnNlcCwKKwkJ CQkJR1NMaXN0ICoqY2FwcykKK3sKKwlzdHJ1Y3QgYXZkdHBfc2VydmljZV9jYXBhYmlsaXR5ICpt ZWRpYV90cmFuc3BvcnQsICptZWRpYV9jb2RlYzsKKwlzdHJ1Y3Qgc2JjX2NvZGVjX2NhcCBzYmNf Y2FwOworCisJbWVkaWFfY29kZWMgPSBhdmR0cF9nZXRfY29kZWMocnNlcCk7CisJaWYgKCFtZWRp YV9jb2RlYykKKwkJcmV0dXJuIEZBTFNFOworCisJc2VsZWN0X3NiY19wYXJhbXMoJnNiY19jYXAs IChzdHJ1Y3Qgc2JjX2NvZGVjX2NhcCAqKSBtZWRpYV9jb2RlYy0+ZGF0YSk7CisKKwltZWRpYV90 cmFuc3BvcnQgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBfTUVESUFfVFJBTlNQT1JULAor CQkJCQkJTlVMTCwgMCk7CisKKwkqY2FwcyA9IGdfc2xpc3RfYXBwZW5kKCpjYXBzLCBtZWRpYV90 cmFuc3BvcnQpOworCisJbWVkaWFfY29kZWMgPSBhdmR0cF9zZXJ2aWNlX2NhcF9uZXcoQVZEVFBf TUVESUFfQ09ERUMsICZzYmNfY2FwLAorCQkJCQkJc2l6ZW9mKHNiY19jYXApKTsKKworCSpjYXBz ID0gZ19zbGlzdF9hcHBlbmQoKmNhcHMsIG1lZGlhX2NvZGVjKTsKKworCisJcmV0dXJuIFRSVUU7 Cit9CisKK3N0YXRpYyB2b2lkIGRpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgYXZkdHAgKnNlc3Np b24sIEdTTGlzdCAqc2Vwcywgc3RydWN0IGF2ZHRwX2Vycm9yICplcnIsCisJCQkJdm9pZCAqdXNl cl9kYXRhKQoreworCXN0cnVjdCBzb3VyY2UgKnNvdXJjZSA9IHVzZXJfZGF0YTsKKwlzdHJ1Y3Qg cGVuZGluZ19yZXF1ZXN0ICpwZW5kaW5nOworCXN0cnVjdCBhdmR0cF9sb2NhbF9zZXAgKmxzZXA7 CisJc3RydWN0IGF2ZHRwX3JlbW90ZV9zZXAgKnJzZXA7CisJc3RydWN0IGEyZHBfc2VwICpzZXA7 CisJR1NMaXN0ICpjYXBzID0gTlVMTDsKKwlpbnQgaWQ7CisKKwlwZW5kaW5nID0gc291cmNlLT5j b25uZWN0OworCisJaWYgKGVycikgeworCQlhdmR0cF91bnJlZihzb3VyY2UtPnNlc3Npb24pOwor CQlzb3VyY2UtPnNlc3Npb24gPSBOVUxMOworCQlpZiAoYXZkdHBfZXJyb3JfdHlwZShlcnIpID09 IEFWRFRQX0VSUk9SX0VSUk5PCisJCQkJJiYgYXZkdHBfZXJyb3JfcG9zaXhfZXJybm8oZXJyKSAh PSBFSE9TVERPV04pIHsKKwkJCWRlYnVnKCJjb25uZWN0OmNvbm5lY3QgWENBU0UgZGV0ZWN0ZWQi KTsKKwkJCXNvdXJjZS0+cmV0cnlfaWQgPQorCQkJCWdfdGltZW91dF9hZGRfc2Vjb25kcyhTVFJF QU1fU0VUVVBfUkVUUllfVElNRVIsCisJCQkJCQkJc3RyZWFtX3NldHVwX3JldHJ5LAorCQkJCQkJ CXNvdXJjZSk7CisJCX0gZWxzZQorCQkJZ290byBmYWlsZWQ7CisJCXJldHVybjsKKwl9CisKKwlk ZWJ1ZygiRGlzY292ZXJ5IGNvbXBsZXRlIik7CisKKwlpZiAoYXZkdHBfZ2V0X3NlcHMoc2Vzc2lv biwgQVZEVFBfU0VQX1RZUEVfU09VUkNFLCBBVkRUUF9NRURJQV9UWVBFX0FVRElPLAorCQkJCUEy RFBfQ09ERUNfU0JDLCAmbHNlcCwgJnJzZXApIDwgMCkgeworCQllcnJvcigiTm8gbWF0Y2hpbmcg QUNQIGFuZCBJTlQgU0VQcyBmb3VuZCIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlpZiAoIXNl bGVjdF9jYXBhYmlsaXRpZXMoc2Vzc2lvbiwgcnNlcCwgJmNhcHMpKSB7CisJCWVycm9yKCJVbmFi bGUgdG8gc2VsZWN0IHJlbW90ZSBTRVAgY2FwYWJpbGl0aWVzIik7CisJCWdvdG8gZmFpbGVkOwor CX0KKworCXNlcCA9IGEyZHBfc2lua19nZXQoc2Vzc2lvbiwgcnNlcCk7CisJaWYgKCFzZXApIHsK KwkJZXJyb3IoIlVuYWJsZSB0byBnZXQgYSBsb2NhbCBzaW5rIFNFUCIpOworCQlnb3RvIGZhaWxl ZDsKKwl9CisKKwlpZCA9IGEyZHBfc2lua19jb25maWcoc291cmNlLT5zZXNzaW9uLCBzZXAsIHN0 cmVhbV9zZXR1cF9jb21wbGV0ZSwKKwkJCQljYXBzLCBzb3VyY2UpOworCWlmIChpZCA9PSAwKQor CQlnb3RvIGZhaWxlZDsKKworCXBlbmRpbmctPmlkID0gaWQ7CisJcmV0dXJuOworCitmYWlsZWQ6 CisJaWYgKHBlbmRpbmctPm1zZykKKwkJZXJyb3JfZmFpbGVkKHBlbmRpbmctPmNvbm4sIHBlbmRp bmctPm1zZywgIlN0cmVhbSBzZXR1cCBmYWlsZWQiKTsKKwlwZW5kaW5nX3JlcXVlc3RfZnJlZShz b3VyY2UtPmRldiwgcGVuZGluZyk7CisJc291cmNlLT5jb25uZWN0ID0gTlVMTDsKKwlhdmR0cF91 bnJlZihzb3VyY2UtPnNlc3Npb24pOworCXNvdXJjZS0+c2Vzc2lvbiA9IE5VTEw7Cit9CisKK2di b29sZWFuIHNvdXJjZV9zZXR1cF9zdHJlYW0oc3RydWN0IHNvdXJjZSAqc291cmNlLCBzdHJ1Y3Qg YXZkdHAgKnNlc3Npb24pCit7CisJaWYgKHNvdXJjZS0+Y29ubmVjdCB8fCBzb3VyY2UtPmRpc2Nv bm5lY3QpCisJCXJldHVybiBGQUxTRTsKKworCWlmIChzZXNzaW9uICYmICFzb3VyY2UtPnNlc3Np b24pCisJCXNvdXJjZS0+c2Vzc2lvbiA9IGF2ZHRwX3JlZihzZXNzaW9uKTsKKworCWlmICghc291 cmNlLT5zZXNzaW9uKQorCQlyZXR1cm4gRkFMU0U7CisKKwlhdmR0cF9zZXRfYXV0b19kaXNjb25u ZWN0KHNvdXJjZS0+c2Vzc2lvbiwgRkFMU0UpOworCisJaWYgKGF2ZHRwX2Rpc2NvdmVyKHNvdXJj ZS0+c2Vzc2lvbiwgZGlzY292ZXJ5X2NvbXBsZXRlLCBzb3VyY2UpIDwgMCkKKwkJcmV0dXJuIEZB TFNFOworCisJc291cmNlLT5jb25uZWN0ID0gZ19uZXcwKHN0cnVjdCBwZW5kaW5nX3JlcXVlc3Qs IDEpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBEQnVzTWVzc2FnZSAqc291cmNlX2Nv bm5lY3QoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJREJ1c01lc3NhZ2UgKm1zZywgdm9pZCAq ZGF0YSkKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBzb3Vy Y2UgKnNvdXJjZSA9IGRldi0+c291cmNlOworCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnBlbmRp bmc7CisKKwlpZiAoIXNvdXJjZS0+c2Vzc2lvbikKKwkJc291cmNlLT5zZXNzaW9uID0gYXZkdHBf Z2V0KCZkZXYtPnNyYywgJmRldi0+ZHN0KTsKKworCWlmICghc291cmNlLT5zZXNzaW9uKQorCQly ZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIs CisJCQkJCQkiVW5hYmxlIHRvIGdldCBhIHNlc3Npb24iKTsKKworCWlmIChzb3VyY2UtPmNvbm5l Y3QgfHwgc291cmNlLT5kaXNjb25uZWN0KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvciht c2csIEVSUk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIsCisJCQkJCQkiJXMiLCBzdHJlcnJvcihFQlVT WSkpOworCisJaWYgKHNvdXJjZS0+c3RyZWFtX3N0YXRlID49IEFWRFRQX1NUQVRFX09QRU4pCisJ CXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCisJCQkJCQki LkFscmVhZHlDb25uZWN0ZWQiLAorCQkJCQkJIkRldmljZSBBbHJlYWR5IENvbm5lY3RlZCIpOwor CisJaWYgKCFzb3VyY2Vfc2V0dXBfc3RyZWFtKHNvdXJjZSwgTlVMTCkpCisJCXJldHVybiBnX2Ri dXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFICIuRmFpbGVkIiwKKwkJCQkJCSJG YWlsZWQgdG8gY3JlYXRlIGEgc3RyZWFtIik7CisKKwlkZXYtPmF1dG9fY29ubmVjdCA9IEZBTFNF OworCisJcGVuZGluZyA9IHNvdXJjZS0+Y29ubmVjdDsKKworCXBlbmRpbmctPmNvbm4gPSBkYnVz X2Nvbm5lY3Rpb25fcmVmKGNvbm4pOworCXBlbmRpbmctPm1zZyA9IGRidXNfbWVzc2FnZV9yZWYo bXNnKTsKKworCWRlYnVnKCJzdHJlYW0gY3JlYXRpb24gaW4gcHJvZ3Jlc3MiKTsKKworCXJldHVy biBOVUxMOworfQorCitzdGF0aWMgREJ1c01lc3NhZ2UgKnNvdXJjZV9kaXNjb25uZWN0KERCdXND b25uZWN0aW9uICpjb25uLAorCQkJCQlEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQorewor CXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0IHNvdXJjZSAqc291 cmNlID0gZGV2aWNlLT5zb3VyY2U7CisJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcGVuZGluZzsK KwlpbnQgZXJyOworCisJaWYgKCFzb3VyY2UtPnNlc3Npb24pCisJCXJldHVybiBnX2RidXNfY3Jl YXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJGQUNFCisJCQkJCQkiLk5vdENvbm5lY3RlZCIsCisJ CQkJCQkiRGV2aWNlIG5vdCBDb25uZWN0ZWQiKTsKKworCWlmIChzb3VyY2UtPmNvbm5lY3QgfHwg c291cmNlLT5kaXNjb25uZWN0KQorCQlyZXR1cm4gZ19kYnVzX2NyZWF0ZV9lcnJvcihtc2csIEVS Uk9SX0lOVEVSRkFDRSAiLkZhaWxlZCIsCisJCQkJCQkiJXMiLCBzdHJlcnJvcihFQlVTWSkpOwor CisJaWYgKHNvdXJjZS0+c3RyZWFtX3N0YXRlIDwgQVZEVFBfU1RBVEVfT1BFTikgeworCQlEQnVz TWVzc2FnZSAqcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwkJ aWYgKCFyZXBseSkKKwkJCXJldHVybiBOVUxMOworCQlhdmR0cF91bnJlZihzb3VyY2UtPnNlc3Np b24pOworCQlzb3VyY2UtPnNlc3Npb24gPSBOVUxMOworCQlyZXR1cm4gcmVwbHk7CisJfQorCisJ ZXJyID0gYXZkdHBfY2xvc2Uoc291cmNlLT5zZXNzaW9uLCBzb3VyY2UtPnN0cmVhbSk7CisJaWYg KGVyciA8IDApCisJCXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1zZywgRVJST1JfSU5URVJG QUNFICIuRmFpbGVkIiwKKwkJCQkJCSIlcyIsIHN0cmVycm9yKC1lcnIpKTsKKworCXBlbmRpbmcg PSBnX25ldzAoc3RydWN0IHBlbmRpbmdfcmVxdWVzdCwgMSk7CisJcGVuZGluZy0+Y29ubiA9IGRi dXNfY29ubmVjdGlvbl9yZWYoY29ubik7CisJcGVuZGluZy0+bXNnID0gZGJ1c19tZXNzYWdlX3Jl Zihtc2cpOworCXNvdXJjZS0+ZGlzY29ubmVjdCA9IHBlbmRpbmc7CisKKwlyZXR1cm4gTlVMTDsK K30KKworc3RhdGljIERCdXNNZXNzYWdlICpzb3VyY2VfaXNfY29ubmVjdGVkKERCdXNDb25uZWN0 aW9uICpjb25uLAorCQkJCQlEQnVzTWVzc2FnZSAqbXNnLAorCQkJCQl2b2lkICpkYXRhKQorewor CXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0IHNvdXJjZSAqc291 cmNlID0gZGV2aWNlLT5zb3VyY2U7CisJREJ1c01lc3NhZ2UgKnJlcGx5OworCWRidXNfYm9vbF90 IGNvbm5lY3RlZDsKKworCXJlcGx5ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1z Zyk7CisJaWYgKCFyZXBseSkKKwkJcmV0dXJuIE5VTEw7CisKKwljb25uZWN0ZWQgPSAoc291cmNl LT5zdHJlYW1fc3RhdGUgPj0gQVZEVFBfU1RBVEVfQ09ORklHVVJFRCk7CisKKwlkYnVzX21lc3Nh Z2VfYXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9CT09MRUFOLCAmY29ubmVjdGVkLAorCQkJ CQlEQlVTX1RZUEVfSU5WQUxJRCk7CisKKwlyZXR1cm4gcmVwbHk7Cit9CisKK3N0YXRpYyBEQnVz TWVzc2FnZSAqc291cmNlX2dldF9wcm9wZXJ0aWVzKERCdXNDb25uZWN0aW9uICpjb25uLAorCQkJ CQlEQnVzTWVzc2FnZSAqbXNnLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2Ug KmRldmljZSA9IGRhdGE7CisJc3RydWN0IHNvdXJjZSAqc291cmNlID0gZGV2aWNlLT5zb3VyY2U7 CisJREJ1c01lc3NhZ2UgKnJlcGx5OworCURCdXNNZXNzYWdlSXRlciBpdGVyOworCURCdXNNZXNz YWdlSXRlciBkaWN0OworCWNvbnN0IGNoYXIgKnN0YXRlOworCWdib29sZWFuIHZhbHVlOworCisJ cmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X21ldGhvZF9yZXR1cm4obXNnKTsKKwlpZiAoIXJlcGx5 KQorCQlyZXR1cm4gTlVMTDsKKworCWRidXNfbWVzc2FnZV9pdGVyX2luaXRfYXBwZW5kKHJlcGx5 LCAmaXRlcik7CisKKwlkYnVzX21lc3NhZ2VfaXRlcl9vcGVuX2NvbnRhaW5lcigmaXRlciwgREJV U19UWVBFX0FSUkFZLAorCQkJREJVU19ESUNUX0VOVFJZX0JFR0lOX0NIQVJfQVNfU1RSSU5HCisJ CQlEQlVTX1RZUEVfU1RSSU5HX0FTX1NUUklORyBEQlVTX1RZUEVfVkFSSUFOVF9BU19TVFJJTkcK KwkJCURCVVNfRElDVF9FTlRSWV9FTkRfQ0hBUl9BU19TVFJJTkcsICZkaWN0KTsKKworCS8qIFBs YXlpbmcgKi8KKwl2YWx1ZSA9IChzb3VyY2UtPnN0cmVhbV9zdGF0ZSA9PSBBVkRUUF9TVEFURV9T VFJFQU1JTkcpOworCWRpY3RfYXBwZW5kX2VudHJ5KCZkaWN0LCAiUGxheWluZyIsIERCVVNfVFlQ RV9CT09MRUFOLCAmdmFsdWUpOworCisJLyogQ29ubmVjdGVkICovCisJdmFsdWUgPSAoc291cmNl LT5zdHJlYW1fc3RhdGUgPj0gQVZEVFBfU1RBVEVfQ09ORklHVVJFRCk7CisJZGljdF9hcHBlbmRf ZW50cnkoJmRpY3QsICJDb25uZWN0ZWQiLCBEQlVTX1RZUEVfQk9PTEVBTiwgJnZhbHVlKTsKKwor CS8qIFN0YXRlICovCisJc3RhdGUgPSBzdGF0ZTJzdHIoc291cmNlLT5zdGF0ZSk7CisJaWYgKHN0 YXRlKQorCQlkaWN0X2FwcGVuZF9lbnRyeSgmZGljdCwgIlN0YXRlIiwgREJVU19UWVBFX1NUUklO RywgJnN0YXRlKTsKKworCWRidXNfbWVzc2FnZV9pdGVyX2Nsb3NlX2NvbnRhaW5lcigmaXRlciwg JmRpY3QpOworCisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgR0RCdXNNZXRob2RUYWJsZSBz b3VyY2VfbWV0aG9kc1tdID0geworCXsgIkNvbm5lY3QiLAkJIiIsCSIiLAlzb3VyY2VfY29ubmVj dCwKKwkJCQkJCUdfREJVU19NRVRIT0RfRkxBR19BU1lOQyB9LAorCXsgIkRpc2Nvbm5lY3QiLAkJ IiIsCSIiLAlzb3VyY2VfZGlzY29ubmVjdCwKKwkJCQkJCUdfREJVU19NRVRIT0RfRkxBR19BU1lO QyB9LAorCXsgIklzQ29ubmVjdGVkIiwJIiIsCSJiIiwJc291cmNlX2lzX2Nvbm5lY3RlZCwKKwkJ CQkJCUdfREJVU19NRVRIT0RfRkxBR19ERVBSRUNBVEVEIH0sCisJeyAiR2V0UHJvcGVydGllcyIs CSIiLAkiYXtzdn0iLHNvdXJjZV9nZXRfcHJvcGVydGllcyB9LAorCXsgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCB9Cit9OworCitzdGF0aWMgR0RCdXNTaWduYWxUYWJsZSBzb3VyY2Vfc2lnbmFsc1td ID0geworCXsgIkNvbm5lY3RlZCIsCQkJIiIsCUdfREJVU19TSUdOQUxfRkxBR19ERVBSRUNBVEVE IH0sCisJeyAiRGlzY29ubmVjdGVkIiwJCSIiLAlHX0RCVVNfU0lHTkFMX0ZMQUdfREVQUkVDQVRF RCB9LAorCXsgIlBsYXlpbmciLAkJCSIiLAlHX0RCVVNfU0lHTkFMX0ZMQUdfREVQUkVDQVRFRCB9 LAorCXsgIlN0b3BwZWQiLAkJCSIiLAlHX0RCVVNfU0lHTkFMX0ZMQUdfREVQUkVDQVRFRCB9LAor CXsgIlByb3BlcnR5Q2hhbmdlZCIsCQkic3YiCX0sCisJeyBOVUxMLCBOVUxMIH0KK307CisKK3N0 YXRpYyB2b2lkIHNvdXJjZV9mcmVlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3Qgc291cmNlICpzb3VyY2UgPSBkZXYtPnNvdXJjZTsKKworCWlmIChzb3VyY2UtPmNiX2lkKQor CQlhdmR0cF9zdHJlYW1fcmVtb3ZlX2NiKHNvdXJjZS0+c2Vzc2lvbiwgc291cmNlLT5zdHJlYW0s CisJCQkJCXNvdXJjZS0+Y2JfaWQpOworCisJaWYgKHNvdXJjZS0+ZGNfaWQpCisJCWRldmljZV9y ZW1vdmVfZGlzY29ubmVjdF93YXRjaChkZXYtPmJ0ZF9kZXYsIHNvdXJjZS0+ZGNfaWQpOworCisJ aWYgKHNvdXJjZS0+c2Vzc2lvbikKKwkJYXZkdHBfdW5yZWYoc291cmNlLT5zZXNzaW9uKTsKKwor CWlmIChzb3VyY2UtPmNvbm5lY3QpCisJCXBlbmRpbmdfcmVxdWVzdF9mcmVlKGRldiwgc291cmNl LT5jb25uZWN0KTsKKworCWlmIChzb3VyY2UtPmRpc2Nvbm5lY3QpCisJCXBlbmRpbmdfcmVxdWVz dF9mcmVlKGRldiwgc291cmNlLT5kaXNjb25uZWN0KTsKKworCWlmIChzb3VyY2UtPnJldHJ5X2lk KQorCQlnX3NvdXJjZV9yZW1vdmUoc291cmNlLT5yZXRyeV9pZCk7CisKKwlnX2ZyZWUoc291cmNl KTsKKwlkZXYtPnNvdXJjZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGhfdW5yZWdpc3Rl cih2b2lkICpkYXRhKQoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiA9IGRhdGE7CisKKwlk ZWJ1ZygiVW5yZWdpc3RlcmVkIGludGVyZmFjZSAlcyBvbiBwYXRoICVzIiwKKwkJQVVESU9fU09V UkNFX0lOVEVSRkFDRSwgZGV2LT5wYXRoKTsKKworCXNvdXJjZV9mcmVlKGRldik7Cit9CisKK3Zv aWQgc291cmNlX3VucmVnaXN0ZXIoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQoreworCWdfZGJ1 c191bnJlZ2lzdGVyX2ludGVyZmFjZShkZXYtPmNvbm4sIGRldi0+cGF0aCwKKwkJQVVESU9fU09V UkNFX0lOVEVSRkFDRSk7Cit9CisKK3N0cnVjdCBzb3VyY2UgKnNvdXJjZV9pbml0KHN0cnVjdCBh dWRpb19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc291cmNlICpzb3VyY2U7CisKKwlpZiAoIWdf ZGJ1c19yZWdpc3Rlcl9pbnRlcmZhY2UoZGV2LT5jb25uLCBkZXYtPnBhdGgsCisJCQkJCUFVRElP X1NPVVJDRV9JTlRFUkZBQ0UsCisJCQkJCXNvdXJjZV9tZXRob2RzLCBzb3VyY2Vfc2lnbmFscywg TlVMTCwKKwkJCQkJZGV2LCBwYXRoX3VucmVnaXN0ZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCWRl YnVnKCJSZWdpc3RlcmVkIGludGVyZmFjZSAlcyBvbiBwYXRoICVzIiwKKwkJQVVESU9fU09VUkNF X0lOVEVSRkFDRSwgZGV2LT5wYXRoKTsKKworCWlmIChhdmR0cF9jYWxsYmFja19pZCA9PSAwKQor CQlhdmR0cF9jYWxsYmFja19pZCA9IGF2ZHRwX2FkZF9zdGF0ZV9jYihhdmR0cF9zdGF0ZV9jYWxs YmFjaywKKwkJCQkJCQkJCU5VTEwpOworCisJc291cmNlID0gZ19uZXcwKHN0cnVjdCBzb3VyY2Us IDEpOworCisJc291cmNlLT5kZXYgPSBkZXY7CisKKwlyZXR1cm4gc291cmNlOworfQorCitnYm9v bGVhbiBzb3VyY2VfaXNfYWN0aXZlKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3Qgc291cmNlICpzb3VyY2UgPSBkZXYtPnNvdXJjZTsKKworCWlmIChzb3VyY2UtPnNlc3Npb24p CisJCXJldHVybiBUUlVFOworCisJcmV0dXJuIEZBTFNFOworfQorCithdmR0cF9zdGF0ZV90IHNv dXJjZV9nZXRfc3RhdGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzb3Vy Y2UgKnNvdXJjZSA9IGRldi0+c291cmNlOworCisJcmV0dXJuIHNvdXJjZS0+c3RyZWFtX3N0YXRl OworfQorCitnYm9vbGVhbiBzb3VyY2VfbmV3X3N0cmVhbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXYsIHN0cnVjdCBhdmR0cCAqc2Vzc2lvbiwKKwkJCQlzdHJ1Y3QgYXZkdHBfc3RyZWFtICpzdHJl YW0pCit7CisJc3RydWN0IHNvdXJjZSAqc291cmNlID0gZGV2LT5zb3VyY2U7CisKKwlpZiAoc291 cmNlLT5zdHJlYW0pCisJCXJldHVybiBGQUxTRTsKKworCWlmICghc291cmNlLT5zZXNzaW9uKQor CQlzb3VyY2UtPnNlc3Npb24gPSBhdmR0cF9yZWYoc2Vzc2lvbik7CisKKwlzb3VyY2UtPnN0cmVh bSA9IHN0cmVhbTsKKworCXNvdXJjZS0+Y2JfaWQgPSBhdmR0cF9zdHJlYW1fYWRkX2NiKHNlc3Np b24sIHN0cmVhbSwKKwkJCQkJCXN0cmVhbV9zdGF0ZV9jaGFuZ2VkLCBkZXYpOworCisJcmV0dXJu IFRSVUU7Cit9CisKK2dib29sZWFuIHNvdXJjZV9zaHV0ZG93bihzdHJ1Y3Qgc291cmNlICpzb3Vy Y2UpCit7CisJaWYgKCFzb3VyY2UtPnN0cmVhbSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKGF2 ZHRwX2Nsb3NlKHNvdXJjZS0+c2Vzc2lvbiwgc291cmNlLT5zdHJlYW0pIDwgMCkKKwkJcmV0dXJu IEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3Vuc2lnbmVkIGludCBzb3VyY2VfYWRkX3N0 YXRlX2NiKHNvdXJjZV9zdGF0ZV9jYiBjYiwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBz b3VyY2Vfc3RhdGVfY2FsbGJhY2sgKnN0YXRlX2NiOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgaWQg PSAwOworCisJc3RhdGVfY2IgPSBnX25ldyhzdHJ1Y3Qgc291cmNlX3N0YXRlX2NhbGxiYWNrLCAx KTsKKwlzdGF0ZV9jYi0+Y2IgPSBjYjsKKwlzdGF0ZV9jYi0+dXNlcl9kYXRhID0gdXNlcl9kYXRh OworCXN0YXRlX2NiLT5pZCA9ICsraWQ7CisKKwlzb3VyY2VfY2FsbGJhY2tzID0gZ19zbGlzdF9h cHBlbmQoc291cmNlX2NhbGxiYWNrcywgc3RhdGVfY2IpOworCisJcmV0dXJuIHN0YXRlX2NiLT5p ZDsKK30KKworZ2Jvb2xlYW4gc291cmNlX3JlbW92ZV9zdGF0ZV9jYih1bnNpZ25lZCBpbnQgaWQp Cit7CisJR1NMaXN0ICpsOworCisJZm9yIChsID0gc291cmNlX2NhbGxiYWNrczsgbCAhPSBOVUxM OyBsID0gbC0+bmV4dCkgeworCQlzdHJ1Y3Qgc291cmNlX3N0YXRlX2NhbGxiYWNrICpjYiA9IGwt PmRhdGE7CisJCWlmIChjYiAmJiBjYi0+aWQgPT0gaWQpIHsKKwkJCXNvdXJjZV9jYWxsYmFja3Mg PSBnX3NsaXN0X3JlbW92ZShzb3VyY2VfY2FsbGJhY2tzLCBjYik7CisJCQlnX2ZyZWUoY2IpOwor CQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQg YS9hdWRpby9zb3VyY2UuaCBiL2F1ZGlvL3NvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmQ3ZGJmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hdWRpby9zb3VyY2UuaApA QCAtMCwwICsxLDQ4IEBACisvKgorICoKKyAqICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBz dGFjayBmb3IgTGludXgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5CisgKgorICoKKyAqICBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K KworI2RlZmluZSBBVURJT19TSU5LX0lOVEVSRkFDRSAib3JnLmJsdWV6LkF1ZGlvU291cmNlIgor Cit0eXBlZGVmIGVudW0geworCVNPVVJDRV9TVEFURV9ESVNDT05ORUNURUQsCisJU09VUkNFX1NU QVRFX0NPTk5FQ1RJTkcsCisJU09VUkNFX1NUQVRFX0NPTk5FQ1RFRCwKKwlTT1VSQ0VfU1RBVEVf UExBWUlORywKK30gc291cmNlX3N0YXRlX3Q7CisKK3R5cGVkZWYgdm9pZCAoKnNvdXJjZV9zdGF0 ZV9jYikgKHN0cnVjdCBhdWRpb19kZXZpY2UgKmRldiwKKwkJCQlzb3VyY2Vfc3RhdGVfdCBvbGRf c3RhdGUsCisJCQkJc291cmNlX3N0YXRlX3QgbmV3X3N0YXRlLAorCQkJCXZvaWQgKnVzZXJfZGF0 YSk7CisKK3Vuc2lnbmVkIGludCBzb3VyY2VfYWRkX3N0YXRlX2NiKHNvdXJjZV9zdGF0ZV9jYiBj Yiwgdm9pZCAqdXNlcl9kYXRhKTsKK2dib29sZWFuIHNvdXJjZV9yZW1vdmVfc3RhdGVfY2IodW5z aWduZWQgaW50IGlkKTsKKworc3RydWN0IHNvdXJjZSAqc291cmNlX2luaXQoc3RydWN0IGF1ZGlv X2RldmljZSAqZGV2KTsKK3ZvaWQgc291cmNlX3VucmVnaXN0ZXIoc3RydWN0IGF1ZGlvX2Rldmlj ZSAqZGV2KTsKK2dib29sZWFuIHNvdXJjZV9pc19hY3RpdmUoc3RydWN0IGF1ZGlvX2RldmljZSAq ZGV2KTsKK2F2ZHRwX3N0YXRlX3Qgc291cmNlX2dldF9zdGF0ZShzdHJ1Y3QgYXVkaW9fZGV2aWNl ICpkZXYpOworZ2Jvb2xlYW4gc291cmNlX25ld19zdHJlYW0oc3RydWN0IGF1ZGlvX2RldmljZSAq ZGV2LCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24sCisJCQkJc3RydWN0IGF2ZHRwX3N0cmVhbSAqc3Ry ZWFtKTsKK2dib29sZWFuIHNvdXJjZV9zZXR1cF9zdHJlYW0oc3RydWN0IHNvdXJjZSAqc291cmNl LCBzdHJ1Y3QgYXZkdHAgKnNlc3Npb24pOworZ2Jvb2xlYW4gc291cmNlX3NodXRkb3duKHN0cnVj dCBzb3VyY2UgKnNvdXJjZSk7Ci0tIAoxLjYuMC40Cgo= --0022150488fb388e68046cf18edd Content-Type: text/x-patch; charset=US-ASCII; name="0008-Create-one-SBC-Sink-when-registering-A2DP-server.patch" Content-Disposition: attachment; filename="0008-Create-one-SBC-Sink-when-registering-A2DP-server.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fw9cgdk67 RnJvbSA3NzFmMjhhNTI5NWM5Mjg1MTM4MDM4ZmRiOGVlM2FlZWRhZmMzNDk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P3V0Zi04P3E/Sm89QzM9QTNvPTIwUGF1bG89MjBSZWNoaT0y MFZpdGE/PSA8anBydml0YUBnbWFpbC5jb20+CkRhdGU6IFNhdCwgMTMgSnVuIDIwMDkgMDI6Mzg6 MjIgLTAzMDAKU3ViamVjdDogW1BBVENIXSBDcmVhdGUgb25lIFNCQyBTaW5rIHdoZW4gcmVnaXN0 ZXJpbmcgQTJEUCBzZXJ2ZXIuCgotLS0KIGF1ZGlvL2EyZHAuYyB8ICAgIDIgKy0KIDEgZmlsZXMg Y2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2F1 ZGlvL2EyZHAuYyBiL2F1ZGlvL2EyZHAuYwppbmRleCA3MjFhZDE2Li41OTkzMmNkIDEwMDY0NAot LS0gYS9hdWRpby9hMmRwLmMKKysrIGIvYXVkaW8vYTJkcC5jCkBAIC0xMTI5LDcgKzExMjksNyBA QCBzdGF0aWMgc3RydWN0IGEyZHBfc2VydmVyICpmaW5kX3NlcnZlcihHU0xpc3QgKmxpc3QsIGNv bnN0IGJkYWRkcl90ICpzcmMpCiAKIGludCBhMmRwX3JlZ2lzdGVyKERCdXNDb25uZWN0aW9uICpj b25uLCBjb25zdCBiZGFkZHJfdCAqc3JjLCBHS2V5RmlsZSAqY29uZmlnKQogewotCWludCBzYmNf c3JjcyA9IDEsIHNiY19zaW5rcyA9IDA7CisJaW50IHNiY19zcmNzID0gMSwgc2JjX3NpbmtzID0g MTsKIAlpbnQgbXBlZzEyX3NyY3MgPSAwLCBtcGVnMTJfc2lua3MgPSAwOwogCWdib29sZWFuIHNv dXJjZSA9IFRSVUUsIHNpbmsgPSBUUlVFOwogCWNoYXIgKnN0cjsKLS0gCjEuNi4wLjQKCg== --0022150488fb388e68046cf18edd--