From owner-freebsd-wireless@FreeBSD.ORG Sat Feb 4 04:26:03 2012 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4CA57106566C for ; Sat, 4 Feb 2012 04:26:03 +0000 (UTC) (envelope-from adrian.chadd@gmail.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id 052048FC08 for ; Sat, 4 Feb 2012 04:26:02 +0000 (UTC) Received: by vbbfa15 with SMTP id fa15so4641029vbb.13 for ; Fri, 03 Feb 2012 20:26:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=dc07scrBAXrKMucDk6BOthm5u5wqTrwLRvTc4gb6XV8=; b=sIFwuO1vHYCxGl5q+5Cr5PW7/htKZHf+UQvHQcqxFjofhrheIYCJ5U3C3IBqaNFP8o oNkHFJE6IF/H2UPBlD3gDFlYWDkBe6oAEDpcWXbNub9rmFau7WBvkwGCw9p0I0VawqxF PaCwlmi5+SdLus/kFTRvenReCovwZuNnJzEZg= MIME-Version: 1.0 Received: by 10.52.66.166 with SMTP id g6mr5133940vdt.34.1328329562275; Fri, 03 Feb 2012 20:26:02 -0800 (PST) Sender: adrian.chadd@gmail.com Received: by 10.52.172.37 with HTTP; Fri, 3 Feb 2012 20:26:02 -0800 (PST) Date: Fri, 3 Feb 2012 20:26:02 -0800 X-Google-Sender-Auth: xMNkvz8Z71JwLgWDGjhuFQQD9pI Message-ID: From: Adrian Chadd To: freebsd-wireless@freebsd.org Content-Type: multipart/mixed; boundary=20cf307f3092b43fc504b81bd36f Subject: [net80211] support vendor bitmap entries; teach if_ath to export PHY error code in error frames X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Feb 2012 04:26:03 -0000 --20cf307f3092b43fc504b81bd36f Content-Type: text/plain; charset=ISO-8859-1 Hi, As part of my radar project, I'm going to try and teach the BSD/Linux ath driver and radiotap API about vendor extensions and implement a (reasonably) well documented way to expose what I need. The driver already exports the whole PHY error frame payload via radiotap and you can select which PHY error types are passed up by setting bits in the dev.ath.X.monpass sysctl. The trouble is the PHY error code isn't exposed so it currently isn't possible to know whether its a data or a PHY error frame. This patch is a WIP and implements what I need. In short: * The net80211 radiotap code doesn't know about vendor extension bitmap(s), so there's currently no way to take those into account when calculating the channel state offset in the header. Since the radiotap code directly writes into that (rather than have the driver do it per frame), adding any vendor bitmaps does mess things up quite a bit. * define a vendor attribute in if_athioctl.h - this should move to ieee80211_radiotap.h at some point. * Add fields to the ath RX radiotap struct, which includes the vendor bitmap, vendor attribute and the vendor payload. * Add a vendor payload, which includes the Atheros OUI and the RX status + PHY error code. With this, userland tools can be built to read the radar and spectral scan PHY error frames in userland. It makes prototyping code much, much easier. What I'm going to do to this: * Move the vendor attribute definition into ieee80211_radiotap.h; * Finalise on the Atheros vendor attribute layout. It doesn't match what is used in the reference driver but I'll use different vendor bitmap/namespace bytes, so things won't clash. * Document the new ieee80211_radiotap_attachv() and why it exists. I'd appreciate some feedback. Thanks! Adrian --20cf307f3092b43fc504b81bd36f Content-Type: text/x-patch; charset=US-ASCII; name="net80211-ath-radiotap-phyerr.diff" Content-Disposition: attachment; filename="net80211-ath-radiotap-phyerr.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gy8545hf0 SW5kZXg6IG5ldDgwMjExL2llZWU4MDIxMV92YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBuZXQ4MDIxMS9p ZWVlODAyMTFfdmFyLmgJKHJldmlzaW9uIDIzMDg1NSkKKysrIG5ldDgwMjExL2llZWU4MDIxMV92 YXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAwLDYgKzcwMCwxMSBAQAogCQl1aW50MzJfdCB0eF9y YWRpb3RhcCwKIAkgICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJoLCBpbnQg cmxlbiwKIAkJdWludDMyX3QgcnhfcmFkaW90YXApOwordm9pZAlpZWVlODAyMTFfcmFkaW90YXBf YXR0YWNodihzdHJ1Y3QgaWVlZTgwMjExY29tICosCisJICAgIHN0cnVjdCBpZWVlODAyMTFfcmFk aW90YXBfaGVhZGVyICp0aCwKKwkgICAgaW50IHRsZW4sIGludCBuX3R4X3YsIHVpbnQzMl90IHR4 X3JhZGlvdGFwLAorCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmgsCisJ ICAgIGludCBybGVuLCBpbnQgbl9yeF92LCB1aW50MzJfdCByeF9yYWRpb3RhcCk7CiB2b2lkCWll ZWU4MDIxMV9yYWRpb3RhcF9kZXRhY2goc3RydWN0IGllZWU4MDIxMWNvbSAqKTsKIHZvaWQJaWVl ZTgwMjExX3JhZGlvdGFwX3ZhdHRhY2goc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKIHZvaWQJaWVl ZTgwMjExX3JhZGlvdGFwX3ZkZXRhY2goc3RydWN0IGllZWU4MDIxMXZhcCAqKTsKSW5kZXg6IG5l dDgwMjExL2llZWU4MDIxMV9yYWRpb3RhcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldDgwMjExL2llZWU4 MDIxMV9yYWRpb3RhcC5jCShyZXZpc2lvbiAyMzA4NTUpCisrKyBuZXQ4MDIxMS9pZWVlODAyMTFf cmFkaW90YXAuYwkod29ya2luZyBjb3B5KQpAQCAtNDcsMTMgKzQ3LDI0IEBACiAKICNpbmNsdWRl IDxuZXQ4MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAKLXN0YXRpYyBpbnQgcmFkaW90YXBfb2Zmc2V0 KHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICosIGludCk7CitzdGF0aWMgaW50IHJh ZGlvdGFwX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqLCBpbnQsIGlu dCk7CiAKIHZvaWQKIGllZWU4MDIxMV9yYWRpb3RhcF9hdHRhY2goc3RydWN0IGllZWU4MDIxMWNv bSAqaWMsCiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnRoLCBpbnQgdGxlbiwg dWludDMyX3QgdHhfcmFkaW90YXAsCiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIg KnJoLCBpbnQgcmxlbiwgdWludDMyX3QgcnhfcmFkaW90YXApCiB7CisJaWVlZTgwMjExX3JhZGlv dGFwX2F0dGFjaHYoaWMsIHRoLCB0bGVuLCAwLCB0eF9yYWRpb3RhcCwKKwkgICAgcmgsIHJsZW4s IDAsIHJ4X3JhZGlvdGFwKTsKK30KKwordm9pZAoraWVlZTgwMjExX3JhZGlvdGFwX2F0dGFjaHYo c3RydWN0IGllZWU4MDIxMWNvbSAqaWMsCisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFk ZXIgKnRoLAorCWludCB0bGVuLCBpbnQgbl90eF92LCB1aW50MzJfdCB0eF9yYWRpb3RhcCwKKwlz dHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmgsCisJaW50IHJsZW4sIGludCBuX3J4 X3YsIHVpbnQzMl90IHJ4X3JhZGlvdGFwKQorewogI2RlZmluZQlCKF92KQkoMTw8KF92KSkKIAlp bnQgb2ZmOwogCkBAIC02Myw5ICs3NCw5IEBACiAJLyogY2FsY3VsYXRlIG9mZnNldCB0byBjaGFu bmVsIGRhdGEgKi8KIAlvZmYgPSAtMTsKIAlpZiAodHhfcmFkaW90YXAgJiBCKElFRUU4MDIxMV9S QURJT1RBUF9DSEFOTkVMKSkKLQkJb2ZmID0gcmFkaW90YXBfb2Zmc2V0KHRoLCBJRUVFODAyMTFf UkFESU9UQVBfQ0hBTk5FTCk7CisJCW9mZiA9IHJhZGlvdGFwX29mZnNldCh0aCwgbl90eF92LCBJ RUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCk7CiAJZWxzZSBpZiAodHhfcmFkaW90YXAgJiBCKElF RUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCkpCi0JCW9mZiA9IHJhZGlvdGFwX29mZnNldCh0aCwg SUVFRTgwMjExX1JBRElPVEFQX1hDSEFOTkVMKTsKKwkJb2ZmID0gcmFkaW90YXBfb2Zmc2V0KHRo LCBuX3R4X3YsIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCk7CiAJaWYgKG9mZiA9PSAtMSkg ewogCQlpZl9wcmludGYoaWMtPmljX2lmcCwgIiVzOiBubyB0eCBjaGFubmVsLCByYWRpb3RhcCAw eCV4IiwKIAkJICAgIF9fZnVuY19fLCB0eF9yYWRpb3RhcCk7CkBAIC03OSw5ICs5MCw5IEBACiAJ LyogY2FsY3VsYXRlIG9mZnNldCB0byBjaGFubmVsIGRhdGEgKi8KIAlvZmYgPSAtMTsKIAlpZiAo cnhfcmFkaW90YXAgJiBCKElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSkKLQkJb2ZmID0gcmFk aW90YXBfb2Zmc2V0KHJoLCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCk7CisJCW9mZiA9IHJh ZGlvdGFwX29mZnNldChyaCwgbl9yeF92LCBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCk7CiAJ ZWxzZSBpZiAocnhfcmFkaW90YXAgJiBCKElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCkpCi0J CW9mZiA9IHJhZGlvdGFwX29mZnNldChyaCwgSUVFRTgwMjExX1JBRElPVEFQX1hDSEFOTkVMKTsK KwkJb2ZmID0gcmFkaW90YXBfb2Zmc2V0KHJoLCBuX3J4X3YsIElFRUU4MDIxMV9SQURJT1RBUF9Y Q0hBTk5FTCk7CiAJaWYgKG9mZiA9PSAtMSkgewogCQlpZl9wcmludGYoaWMtPmljX2lmcCwgIiVz OiBubyByeCBjaGFubmVsLCByYWRpb3RhcCAweCV4IiwKIAkJICAgIF9fZnVuY19fLCByeF9yYWRp b3RhcCk7CkBAIC0yNjAsNyArMjcxLDggQEAKICAqIGtub3duIC0xIGlzIHJldHVybmVkLgogICov CiBzdGF0aWMgaW50Ci1yYWRpb3RhcF9vZmZzZXQoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9o ZWFkZXIgKnJoLCBpbnQgaXRlbSkKK3JhZGlvdGFwX29mZnNldChzdHJ1Y3QgaWVlZTgwMjExX3Jh ZGlvdGFwX2hlYWRlciAqcmgsCisgICAgaW50IG5fdmVuZG9yX2F0dHJpYnV0ZXMsIGludCBpdGVt KQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCQlzaXplX3QJYWxpZ24sIHdpZHRoOwpAQCAt MzM0LDYgKzM0Niw4IEBACiAJaW50IG9mZiwgaTsKIAogCW9mZiA9IHNpemVvZihzdHJ1Y3QgaWVl ZTgwMjExX3JhZGlvdGFwX2hlYWRlcik7CisJb2ZmICs9IG5fdmVuZG9yX2F0dHJpYnV0ZXMgKiAo c2l6ZW9mKHVpbnQzMl90KSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1JBRElPVEFQ X0VYVDsgaSsrKSB7CiAJCWlmICgocHJlc2VudCAmICgxPDxpKSkgPT0gMCkKIAkJCWNvbnRpbnVl OwpJbmRleDogZGV2L2F0aC9hdGhfaGFsL2FyNTQxNi9hcjU0MTZfbWlzYy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGRldi9hdGgvYXRoX2hhbC9hcjU0MTYvYXI1NDE2X21pc2MuYwkocmV2aXNpb24gMjMwODU1 KQorKysgZGV2L2F0aC9hdGhfaGFsL2FyNTQxNi9hcjU0MTZfbWlzYy5jCSh3b3JraW5nIGNvcHkp CkBAIC03NzAsNiArNzcwLDcgQEAKIAogCU9TX1JFR19XUklURShhaCwgQVJfUEhZX1JBREFSXzAs IHZhbCB8IEFSX1BIWV9SQURBUl8wX0VOQSk7CiAKKwkvKiBYWFggaXMgdGhpcyBhcm91bmQgdGhl IGNvcnJlY3Qgd2F5PyEgKi8KIAlpZiAocGUtPnBlX3VzZWZpcjEyOCA9PSAxKQogCQlPU19SRUdf Q0xSX0JJVChhaCwgQVJfUEhZX1JBREFSXzEsIEFSX1BIWV9SQURBUl8xX1VTRV9GSVIxMjgpOwog CWVsc2UgaWYgKHBlLT5wZV91c2VmaXIxMjggPT0gMCkKSW5kZXg6IGRldi9hdGgvaWZfYXRoaW9j dGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRoL2lmX2F0aGlvY3RsLmgJKHJldmlzaW9uIDIzMDg1 NSkKKysrIGRldi9hdGgvaWZfYXRoaW9jdGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDEwICsx ODgsNTQgQEAKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkJfCBcCiAJ KDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSkJfCBcCiAJKDEgPDwgSUVFRTgw MjExX1JBRElPVEFQX1hDSEFOTkVMKQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVkVO RE9SRVhUKQl8IFwKKwkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfRVhUKQkJfCBcCiAJMCkKIAor LyoKKyAqIFRoaXMgaXMgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZCB0byB0d28gYnl0ZXMuCisgKi8K K3N0cnVjdCB2ZW5kb3Jfc3BhY2UgeworCXVfaW50OF90CW91aVszXTsKKwl1X2ludDhfdAlzdWJf bmFtZXNwYWNlOworCXVfaW50MTZfdAlza2lwX2xlbmd0aDsKK30gX19wYWNrZWQ7CisKKy8qCisg KiBUaGlzIGlzIGhpZ2hlciB0aGFuIHRoZSB2ZW5kb3IgYml0bWFwIHVzZWQgaW5zaWRlCisgKiB0 aGUgQXRoZXJvcyByZWZlcmVuY2UgY29kZWJhc2UuCisgKi8KKworLyogQml0IDggKi8KKyNkZWZp bmUJQVRIX1JBRElPVEFQX1ZFTkRPUl9IRUFERVIJOAorCisvKgorICogQVRIX1JBRElPVEFQX1ZF TkRPUl9IRUFERVIKKyAqCisgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGFsaWduZWQgdG8gZm91 ciBieXRlcy4KKyAqLworc3RydWN0IGF0aF9yYWRpb3RhcF92ZW5kb3JfaGRyIHsKKwl1X2ludDhf dAl2aF92ZXJzaW9uOwkvKiAxICovCisJdV9pbnQ4X3QJdmhfcGh5ZXJyX2NvZGU7CisJdV9pbnQ4 X3QJdmhfcnN0YXR1czsKKwl1X2ludDhfdAl2aF9wYWQxWzFdOworfSBfX3BhY2tlZDsKKwogc3Ry dWN0IGF0aF9yeF9yYWRpb3RhcF9oZWFkZXIgewotCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBf aGVhZGVyIHdyX2loZHI7CisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgd3JfaWhk cjsJLyogOCAqLworCS8qIFZlbmRvciBleHRlbnNpb24gaGVhZGVyIGJpdG1hcCAqLworCXVfaW50 MzJfdAl3cl9leHRfYml0bWFwOwkJLyogNCAqLworCisJLyoKKwkgKiBUaGlzIHBhZGRpbmcgaXMg bmVlZGVkIGJlY2F1c2U6CisJICogKyB0aGUgcmFkaW90YXAgaGVhZGVyIGlzIDggYnl0ZXM7CisJ ICogKyB0aGUgZXh0ZW5zaW9uIGJpdG1hcCBpcyA0IGJ5dGVzOworCSAqICsgdGhlIHRzZiBpcyA4 IGJ5dGVzLCBzbyBpdCBtdXN0IHN0YXJ0IG9uIGFuIDggYnl0ZQorCSAqICAgYm91bmRhcnkuCisJ ICovCisJdV9pbnQzMl90CXdyX3BhZDE7CisKKwkvKiBOb3JtYWwgcmFkaW90YXAgZmllbGRzICov CiAJdV9pbnQ2NF90CXdyX3RzZjsKIAl1X2ludDhfdAl3cl9mbGFnczsKIAl1X2ludDhfdAl3cl9y YXRlOwpAQCAtMjAzLDYgKzI0NywxNyBAQAogCXVfaW50MTZfdAl3cl9jaGFuX2ZyZXE7CiAJdV9p bnQ4X3QJd3JfY2hhbl9pZWVlOwogCWludDhfdAkJd3JfY2hhbl9tYXhwb3c7CisKKwkvKgorCSAq IFZlbmRvciBoZWFkZXIgc2VjdGlvbiwgYXMgcmVxdWlyZWQgYnkgdGhlCisJICogcHJlc2VuY2Ug b2YgdGhlIHZlbmRvciBleHRlbnNpb24gYml0IGFuZCBiaXRtYXAKKwkgKiBlbnRyeS4KKwkgKi8K KwlzdHJ1Y3QgdmVuZG9yX3NwYWNlCQl3cl92aDsJLyogNiBieXRlcyAqLworCisJc3RydWN0IGF0 aF9yYWRpb3RhcF92ZW5kb3JfaGRyCXdyX3Y7CS8qIDQgYnl0ZXMgKi8KKworCS8qIFhYWCBwYWRk aW5nIG5lZWRlZD8gKi8KIH0gX19wYWNrZWQ7CiAKICNkZWZpbmUgQVRIX1RYX1JBRElPVEFQX1BS RVNFTlQgKAkJXApJbmRleDogZGV2L2F0aC9pZl9hdGguYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkZXYvYXRo L2lmX2F0aC5jCShyZXZpc2lvbiAyMzA4NTUpCisrKyBkZXYvYXRoL2lmX2F0aC5jCSh3b3JraW5n IGNvcHkpCkBAIC03NjYsMTAgKzc2NiwxNCBAQAogCWljLT5pY19hZGRiYV9zdG9wID0gYXRoX2Fk ZGJhX3N0b3A7CiAJaWMtPmljX2Jhcl9yZXNwb25zZSA9IGF0aF9iYXJfcmVzcG9uc2U7CiAKLQlp ZWVlODAyMTFfcmFkaW90YXBfYXR0YWNoKGljLAotCSAgICAmc2MtPnNjX3R4X3RoLnd0X2loZHIs IHNpemVvZihzYy0+c2NfdHhfdGgpLAorCS8qCisJICogVGhlcmUncyBvbmUgdmVuZG9yIGJpdG1h cCBlbnRyeSBpbiB0aGUgUlggcmFkaW90YXAKKwkgKiBoZWFkZXI7IG1ha2Ugc3VyZSB0aGF0J3Mg dGFrZW4gaW50byBhY2NvdW50LgorCSAqLworCWllZWU4MDIxMV9yYWRpb3RhcF9hdHRhY2h2KGlj LAorCSAgICAmc2MtPnNjX3R4X3RoLnd0X2loZHIsIHNpemVvZihzYy0+c2NfdHhfdGgpLCAwLAog CQlBVEhfVFhfUkFESU9UQVBfUFJFU0VOVCwKLQkgICAgJnNjLT5zY19yeF90aC53cl9paGRyLCBz aXplb2Yoc2MtPnNjX3J4X3RoKSwKKwkgICAgJnNjLT5zY19yeF90aC53cl9paGRyLCBzaXplb2Yo c2MtPnNjX3J4X3RoKSwgMSwKIAkJQVRIX1JYX1JBRElPVEFQX1BSRVNFTlQpOwogCiAJLyoKQEAg LTM4ODQsNiArMzg4OCwzNCBAQAogfQogCiBzdGF0aWMgdm9pZAorYXRoX3J4X3RhcF92ZW5kb3Io c3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBtYnVmICptLAorICAgIGNvbnN0IHN0cnVjdCBhdGhf cnhfc3RhdHVzICpycywgdV9pbnQ2NF90IHRzZiwgaW50MTZfdCBuZikKK3sKKwlzdHJ1Y3QgYXRo X3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisKKwkvKiBGaWxsIGluIHRoZSBleHRlbnNpb24g Yml0bWFwICovCisJc2MtPnNjX3J4X3RoLndyX2V4dF9iaXRtYXAgPSBodG9sZTMyKDEgPDwgQVRI X1JBRElPVEFQX1ZFTkRPUl9IRUFERVIpOworCisJLyogRmlsbCBpbiB0aGUgdmVuZG9yIGhlYWRl ciAqLworCXNjLT5zY19yeF90aC53cl92aC5vdWlbMF0gPSAweDdmOworCXNjLT5zY19yeF90aC53 cl92aC5vdWlbMV0gPSAweDAzOworCXNjLT5zY19yeF90aC53cl92aC5vdWlbMl0gPSAweDAwOwor CisJLyogWFhYIHdoYXQgc2hvdWxkIHRoaXMgYmU/ICovCisJc2MtPnNjX3J4X3RoLndyX3ZoLnN1 Yl9uYW1lc3BhY2UgPSAwOworCXNjLT5zY19yeF90aC53cl92aC5za2lwX2xlbmd0aCA9CisJICAg IGh0b2xlMTYoc2l6ZW9mKHN0cnVjdCBhdGhfcmFkaW90YXBfdmVuZG9yX2hkcikpOworCisJLyog cGh5ZXJyIGluZm8gKi8KKwlzYy0+c2NfcnhfdGgud3Jfdi52aF92ZXJzaW9uID0gMTsKKwlzYy0+ c2NfcnhfdGgud3Jfdi52aF9yc3RhdHVzID0gcnMtPnJzX3N0YXR1czsKKwlpZiAocnMtPnJzX3N0 YXR1cyAmIEhBTF9SWEVSUl9QSFkpCisJCXNjLT5zY19yeF90aC53cl92LnZoX3BoeWVycl9jb2Rl ID0gcnMtPnJzX3BoeWVycjsKKwllbHNlCisJCXNjLT5zY19yeF90aC53cl92LnZoX3BoeWVycl9j b2RlID0gMDsKK30KKworc3RhdGljIHZvaWQKIGF0aF9yeF90YXAoc3RydWN0IGlmbmV0ICppZnAs IHN0cnVjdCBtYnVmICptLAogCWNvbnN0IHN0cnVjdCBhdGhfcnhfc3RhdHVzICpycywgdV9pbnQ2 NF90IHRzZiwgaW50MTZfdCBuZikKIHsKQEAgLTQxNTYsNiArNDE4OCw3IEBACiAJCQkJbS0+bV9w a3RoZHIubGVuID0gbS0+bV9sZW4gPSBsZW47CiAJCQkJYmYtPmJmX20gPSBOVUxMOwogCQkJCWF0 aF9yeF90YXAoaWZwLCBtLCBycywgcnN0YW1wLCBuZik7CisJCQkJYXRoX3J4X3RhcF92ZW5kb3Io aWZwLCBtLCBycywgcnN0YW1wLCBuZik7CiAJCQkJaWVlZTgwMjExX3JhZGlvdGFwX3J4X2FsbChp YywgbSk7CiAJCQkJbV9mcmVlbShtKTsKIAkJCX0K --20cf307f3092b43fc504b81bd36f--