From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E142CC4363D for ; Mon, 12 Oct 2020 12:56:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 86B6021BE5 for ; Mon, 12 Oct 2020 12:56:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="d9VVJNEh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730246AbgJLM4P (ORCPT ); Mon, 12 Oct 2020 08:56:15 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:53174 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726769AbgJLM4O (ORCPT ); Mon, 12 Oct 2020 08:56:14 -0400 X-UUID: 5360bc61ef4e4157b74828ac9253249c-20201012 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=HtPG+lg+u0TnPb4iEJYLRcPdOAgzljb2iTR7oz5/DLo=; b=d9VVJNEhMU5Tzfcw5D3ug3+uQWo1RzY7CnZoUBq/KjIYobnwKjXonVml7svjNOHJwwE+pLiLn+QsZfeHj18rIr9SWFdlEr3J3JL4I4m2qwtoVWc+tEgB1aMgEi8nximc8tH3tiIDR2wVgOwYwP51YVUiyQotmCAx7pD9A8RCFFg=; X-UUID: 5360bc61ef4e4157b74828ac9253249c-20201012 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1531893866; Mon, 12 Oct 2020 20:56:00 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 20:55:56 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 12 Oct 2020 20:55:56 +0800 From: Shayne Chen To: Felix Fietkau CC: linux-wireless , Lorenzo Bianconi , Ryder Lee , Evelyn Tsai , linux-mediatek , Shayne Chen Subject: [PATCH v3 08/10] mt76: mt7915: implement testmode rx support Date: Mon, 12 Oct 2020 20:54:01 +0800 Message-ID: <20201012125403.8608-8-shayne.chen@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20201012125403.8608-1-shayne.chen@mediatek.com> References: <20201012125403.8608-1-shayne.chen@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 76F146419BF2D9F78B941CD21DB1EA2E304AB2D10C496131551B51E19DFFF3942000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org U3VwcG9ydCB0ZXN0bW9kZSByeCBhbmQgZGlzcGxheSByeCBzdGF0aXN0aWMgYnkgcGFyc2luZyBS WFYgcGFja2V0DQp0eXBlLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBlbmFibGVkIGluIHRlc3Rt b2RlLg0KDQpSZXZpZXdlZC1ieTogUnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0K U2lnbmVkLW9mZi1ieTogU2hheW5lIENoZW4gPHNoYXluZS5jaGVuQG1lZGlhdGVrLmNvbT4NCi0t LQ0KdjI6IGNoYW5nZSBsYXN0X3NuciB0byB1OA0KdjM6IHVzZSBubGFfcHV0X3U4IGZvciBNVDc2 X1RNX1JYX0FUVFJfU05SDQogICAgY2hhbmdlIHNuciB2YXJpYWJsZSB0eXBlIHRvIHU4IGluIG10 NzkxNV9tYWNfZmlsbF9yeF92ZWN0b3INCg0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvZG1hLmMgICB8ICAzICsNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L21hYy5jICAgfCAzOCArKysrKysrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvbWFjLmggICB8ICA1ICsNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L21jdS5oICAgfCAgMSArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L210NzkxNS5oICAgIHwgIDcgKysNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvdGVzdG1vZGUuYyAgfCA5NyArKysrKysrKysrKysrKysrKysrDQogLi4uL3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3OTE1L3Rlc3Rtb2RlLmggIHwgMzAgKysrKysrDQogNyBmaWxlcyBjaGFu Z2VkLCAxODEgaW5zZXJ0aW9ucygrKQ0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9kbWEuYw0KaW5kZXggY2ZhMTJjNC4uZTE0ODE0ZCAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RtYS5jDQorKysg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9kbWEuYw0KQEAgLTYx LDYgKzYxLDkgQEAgdm9pZCBtdDc5MTVfcXVldWVfcnhfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRl diwgZW51bSBtdDc2X3J4cV9pZCBxLA0KIAljYXNlIFBLVF9UWVBFX1JYX0VWRU5UOg0KIAkJbXQ3 OTE1X21jdV9yeF9ldmVudChkZXYsIHNrYik7DQogCQlicmVhazsNCisJY2FzZSBQS1RfVFlQRV9U WFJYVjoNCisJCW10NzkxNV9tYWNfZmlsbF9yeF92ZWN0b3IoZGV2LCBza2IpOw0KKwkJYnJlYWs7 DQogCWNhc2UgUEtUX1RZUEVfTk9STUFMOg0KIAkJaWYgKCFtdDc5MTVfbWFjX2ZpbGxfcngoZGV2 LCBza2IpKSB7DQogCQkJbXQ3Nl9yeCgmZGV2LT5tdDc2LCBxLCBza2IpOw0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5jIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMNCmluZGV4IGUwM2UxMmYu LjdiZmRmNTQgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2 L210NzkxNS9tYWMuYw0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9t dDc5MTUvbWFjLmMNCkBAIC01NjIsNiArNTYyLDQ0IEBAIGludCBtdDc5MTVfbWFjX2ZpbGxfcngo c3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCiAJcmV0dXJuIDA7 DQogfQ0KIA0KK3ZvaWQgbXQ3OTE1X21hY19maWxsX3J4X3ZlY3RvcihzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisjaWZkZWYgQ09ORklHX05MODAyMTFf VEVTVE1PREUNCisJX19sZTMyICpyeGQgPSAoX19sZTMyICopc2tiLT5kYXRhOw0KKwlfX2xlMzIg KnJ4diA9IHJ4ZCArIDQ7DQorCXUzMiByY3BpLCBpYl9yc3NpLCB3Yl9yc3NpLCB2MjAsIHYyMTsN CisJczMyIGZvZTsNCisJdTggc25yOw0KKwlpbnQgaTsNCisNCisJcmNwaSA9IGxlMzJfdG9fY3B1 KHJ4dls2XSk7DQorCWliX3Jzc2kgPSBsZTMyX3RvX2NwdShyeHZbN10pOw0KKwl3Yl9yc3NpID0g bGUzMl90b19jcHUocnh2WzhdKSA+PiA1Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBy Y3BpID4+PSA4LCBpYl9yc3NpID4+PSA4LCB3Yl9yc3NpID4+PSA5KSB7DQorCQlpZiAoaSA9PSAz KQ0KKwkJCXdiX3Jzc2kgPSBsZTMyX3RvX2NwdShyeHZbOV0pOw0KKw0KKwkJZGV2LT50ZXN0Lmxh c3RfcmNwaVtpXSA9IHJjcGkgJiAweGZmOw0KKwkJZGV2LT50ZXN0Lmxhc3RfaWJfcnNzaVtpXSA9 IGliX3Jzc2kgJiAweGZmOw0KKwkJZGV2LT50ZXN0Lmxhc3Rfd2JfcnNzaVtpXSA9IHdiX3Jzc2kg JiAweGZmOw0KKwl9DQorDQorCXYyMCA9IGxlMzJfdG9fY3B1KHJ4dlsyMF0pOw0KKwl2MjEgPSBs ZTMyX3RvX2NwdShyeHZbMjFdKTsNCisNCisJZm9lID0gRklFTERfR0VUKE1UX0NSWFZfRk9FX0xP LCB2MjApIHwNCisJICAgICAgKEZJRUxEX0dFVChNVF9DUlhWX0ZPRV9ISSwgdjIxKSA8PCBNVF9D UlhWX0ZPRV9TSElGVCk7DQorDQorCXNuciA9IEZJRUxEX0dFVChNVF9DUlhWX1NOUiwgdjIwKSAt IDE2Ow0KKw0KKwlkZXYtPnRlc3QubGFzdF9mcmVxX29mZnNldCA9IGZvZTsNCisJZGV2LT50ZXN0 Lmxhc3Rfc25yID0gc25yOw0KKw0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7DQorI2VuZGlmDQorfQ0K Kw0KIHN0YXRpYyB1MTYNCiBtdDc5MTVfbWFjX3R4X3JhdGVfdmFsKHN0cnVjdCBtdDc2X3BoeSAq bXBoeSwgdTggbW9kZSwgdTggcmF0ZV9pZHgsDQogCQkgICAgICAgdTggbnNzLCB1OCBzdGJjLCB1 OCAqYncpDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9t dDc5MTUvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9t YWMuaA0KaW5kZXggMDkyMWI2Zi4uZDQyMDM5MiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5oDQorKysgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWMuaA0KQEAgLTEyOCw2ICsxMjgsMTEgQEAgZW51 bSByeF9wa3RfdHlwZSB7DQogI2RlZmluZSBNVF9DUlhWX0hFX0JFQU1fQ0hORwkJQklUKDEzKQ0K ICNkZWZpbmUgTVRfQ1JYVl9IRV9ET1BQTEVSCQlCSVQoMTYpDQogDQorI2RlZmluZSBNVF9DUlhW X1NOUgkJR0VOTUFTSygxOCwgMTMpDQorI2RlZmluZSBNVF9DUlhWX0ZPRV9MTwkJR0VOTUFTSygz MSwgMTkpDQorI2RlZmluZSBNVF9DUlhWX0ZPRV9ISQkJR0VOTUFTSyg2LCAwKQ0KKyNkZWZpbmUg TVRfQ1JYVl9GT0VfU0hJRlQJMTMNCisNCiBlbnVtIHR4X2hlYWRlcl9mb3JtYXQgew0KIAlNVF9I RFJfRk9STUFUXzgwMl8zLA0KIAlNVF9IRFJfRk9STUFUX0NNRCwNCmRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuaCBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oDQppbmRleCAwYTdlOWQyLi44OTQ1 M2E2IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvbWN1LmgNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L21jdS5oDQpAQCAtNDgsNiArNDgsNyBAQCBlbnVtIHsNCiANCiBlbnVtIHsNCiAJTUNVX0FURV9T RVRfVFJYID0gMHgxLA0KKwlNQ1VfQVRFX1NFVF9SWF9GSUxURVIgPSAweDMsDQogfTsNCiANCiBz dHJ1Y3QgbXQ3OTE1X21jdV9yeGQgew0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvbXQ3OTE1L210NzkxNS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvbXQ3OTE1LmgNCmluZGV4IDY3MzU5MTUuLmZkN2RlNzkgMTAwNjQ0 DQotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUu aA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbXQ3OTE1 LmgNCkBAIC0xNjUsNiArMTY1LDEyIEBAIHN0cnVjdCBtdDc5MTVfZGV2IHsNCiAJc3RydWN0IHsN CiAJCXUzMiAqcmVnX2JhY2t1cDsNCiANCisJCXMzMiBsYXN0X2ZyZXFfb2Zmc2V0Ow0KKwkJdTgg bGFzdF9yY3BpWzRdOw0KKwkJczggbGFzdF9pYl9yc3NpWzRdOw0KKwkJczggbGFzdF93Yl9yc3Np WzRdOw0KKwkJdTggbGFzdF9zbnI7DQorDQogCQl1OCBzcGVfaWR4Ow0KIAl9IHRlc3Q7DQogI2Vu ZGlmDQpAQCAtNDM2LDYgKzQ0Miw3IEBAIHZvaWQgbXQ3OTE1X21hY193cml0ZV90eHdpKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIF9fbGUzMiAqdHh3aSwNCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjEx X2tleV9jb25mICprZXksIGJvb2wgYmVhY29uKTsNCiB2b2lkIG10NzkxNV9tYWNfc2V0X3RpbWlu ZyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KTsNCiBpbnQgbXQ3OTE1X21hY19maWxsX3J4KHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgbXQ3OTE1X21h Y19maWxsX3J4X3ZlY3RvcihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsNCiB2b2lkIG10NzkxNV9tYWNfdHhfZnJlZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCiBpbnQgbXQ3OTE1X21hY19zdGFfYWRkKHN0cnVjdCBtdDc2 X2RldiAqbWRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCiAJCSAgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9t ZWRpYXRlay9tdDc2L210NzkxNS90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvdGVzdG1vZGUuYw0KaW5kZXggNWQ5NTc2Ni4uYWNhYjI2OCAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3Rlc3Rt b2RlLmMNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3Rl c3Rtb2RlLmMNCkBAIC0xMTMsNiArMTEzLDMxIEBAIG10NzkxNV90bV9yZWdfYmFja3VwX3Jlc3Rv cmUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCiAJbXQ3 Nl9jbGVhcihkZXYsIE1UX1RNQUNfVENSMCgwKSwgTVRfVE1BQ19UQ1IwX1RCVFRfU1RPUF9DVFJM KTsNCiB9DQogDQorc3RhdGljIGludA0KK210NzkxNV90bV9jb25maWdfcnhfZmlsdGVyKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIGJvb2wgZW4pDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3RtX2NtZCBy ZXEgPSB7DQorCQkudGVzdG1vZGVfZW4gPSAxLA0KKwkJLnBhcmFtX2lkeCA9IE1DVV9BVEVfU0VU X1JYX0ZJTFRFUiwNCisJCS5wYXJhbS5maWx0ZXIucmVwb3J0X2VuID0gZW4sDQorCQkucGFyYW0u ZmlsdGVyLmJhbmQgPSAwLAkvKiBUT0RPOiBzdXBwb3J0IGRiZGMgKi8NCisJfTsNCisJX19sZTMy IG1hc2sgPSBSWF9GSUxURVJfTk9UX09XTl9CVElNIHwNCisJCSAgICAgIFJYX0ZJTFRFUl9OT1Rf T1dOX1VDQVNUIHwNCisJCSAgICAgIFJYX0ZJTFRFUl9SVFMgfCBSWF9GSUxURVJfQ1RTIHwNCisJ CSAgICAgIFJYX0ZJTFRFUl9DVFJMX1JTViB8DQorCQkgICAgICBSWF9GSUxURVJfQkNfTUNfQlNT SURfQTIgfA0KKwkJICAgICAgUlhfRklMVEVSX0JDX01DX0JTU0lEX0EzIHwNCisJCSAgICAgIFJY X0ZJTFRFUl9CQ19NQ19PTUFDX0EzIHwNCisJCSAgICAgIFJYX0ZJTFRFUl9QUk9UT0NPTF9WRVJT SU9OIHwNCisJCSAgICAgIFJYX0ZJTFRFUl9GQ1NfRVJSOw0KKw0KKwlyZXEucGFyYW0uZmlsdGVy Lm1hc2sgPSBjcHVfdG9fbGUzMihtYXNrKTsNCisNCisJcmV0dXJuIG10NzZfbWN1X3NlbmRfbXNn KCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX0FURV9DVFJMLCAmcmVxLA0KKwkJCQkgc2l6ZW9mKHJl cSksIGZhbHNlKTsNCit9DQorDQogc3RhdGljIHZvaWQNCiBtdDc5MTVfdG1faW5pdChzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2KQ0KIHsNCkBAIC0xMjQsNiArMTQ5LDcgQEAgbXQ3OTE1X3RtX2luaXQo c3RydWN0IG10NzkxNV9kZXYgKmRldikNCiAJbXQ3OTE1X3RtX21vZGVfY3RybChkZXYsIGVuKTsN CiAJbXQ3OTE1X3RtX3JlZ19iYWNrdXBfcmVzdG9yZShkZXYsICZkZXYtPnBoeSk7DQogCW10Nzkx NV90bV9zZXRfdHJ4KGRldiwgJmRldi0+cGh5LCBUTV9NQUNfVFhSWCwgIWVuKTsNCisJbXQ3OTE1 X3RtX2NvbmZpZ19yeF9maWx0ZXIoZGV2LCBlbik7DQogfQ0KIA0KIHN0YXRpYyB2b2lkDQpAQCAt MTU2LDYgKzE4MiwyMCBAQCBtdDc5MTVfdG1fc2V0X3R4X2ZyYW1lcyhzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCBib29sIGVuKQ0KIAlpbmZvLT5jb250cm9sLnZpZiA9IGRldi0+cGh5Lm1vbml0b3Jf dmlmOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK210NzkxNV90bV9zZXRfcnhfZnJhbWVzKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIGJvb2wgZW4pDQorew0KKwlpZiAoZW4pIHsNCisJCW11dGV4X3Vu bG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisJCW10NzkxNV9zZXRfY2hhbm5lbCgmZGV2LT5waHkp Ow0KKwkJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJCW10NzkxNV9tY3Vfc2V0 X2NoYW5faW5mbygmZGV2LT5waHksIE1DVV9FWFRfQ01EX1NFVF9SWF9QQVRIKTsNCisJfQ0KKw0K KwltdDc5MTVfdG1fc2V0X3RyeChkZXYsICZkZXYtPnBoeSwgVE1fTUFDX1JYX1JYViwgZW4pOw0K K30NCisNCiBzdGF0aWMgaW50DQogbXQ3OTE1X3RtX3NldF9zdGF0ZShzdHJ1Y3QgbXQ3Nl9kZXYg Km1kZXYsIGVudW0gbXQ3Nl90ZXN0bW9kZV9zdGF0ZSBzdGF0ZSkNCiB7DQpAQCAtMTY5LDEyICsy MDksNjkgQEAgbXQ3OTE1X3RtX3NldF9zdGF0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0g bXQ3Nl90ZXN0bW9kZV9zdGF0ZSBzdGF0ZSkNCiAJCW10NzkxNV90bV9zZXRfdHhfZnJhbWVzKGRl diwgZmFsc2UpOw0KIAllbHNlIGlmIChzdGF0ZSA9PSBNVDc2X1RNX1NUQVRFX1RYX0ZSQU1FUykN CiAJCW10NzkxNV90bV9zZXRfdHhfZnJhbWVzKGRldiwgdHJ1ZSk7DQorCWVsc2UgaWYgKHByZXZf c3RhdGUgPT0gTVQ3Nl9UTV9TVEFURV9SWF9GUkFNRVMpDQorCQltdDc5MTVfdG1fc2V0X3J4X2Zy YW1lcyhkZXYsIGZhbHNlKTsNCisJZWxzZSBpZiAoc3RhdGUgPT0gTVQ3Nl9UTV9TVEFURV9SWF9G UkFNRVMpDQorCQltdDc5MTVfdG1fc2V0X3J4X2ZyYW1lcyhkZXYsIHRydWUpOw0KIAllbHNlIGlm IChwcmV2X3N0YXRlID09IE1UNzZfVE1fU1RBVEVfT0ZGIHx8IHN0YXRlID09IE1UNzZfVE1fU1RB VEVfT0ZGKQ0KIAkJbXQ3OTE1X3RtX2luaXQoZGV2KTsNCiANCiAJcmV0dXJuIDA7DQogfQ0KIA0K K3N0YXRpYyBpbnQNCittdDc5MTVfdG1fZHVtcF9zdGF0cyhzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYs IHN0cnVjdCBza19idWZmICptc2cpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29u dGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJdm9pZCAqcngsICpy c3NpOw0KKwlpbnQgaTsNCisNCisJcnggPSBubGFfbmVzdF9zdGFydChtc2csIE1UNzZfVE1fU1RB VFNfQVRUUl9MQVNUX1JYKTsNCisJaWYgKCFyeCkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlp ZiAobmxhX3B1dF9zMzIobXNnLCBNVDc2X1RNX1JYX0FUVFJfRlJFUV9PRkZTRVQsIGRldi0+dGVz dC5sYXN0X2ZyZXFfb2Zmc2V0KSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlyc3NpID0gbmxh X25lc3Rfc3RhcnQobXNnLCBNVDc2X1RNX1JYX0FUVFJfUkNQSSk7DQorCWlmICghcnNzaSkNCisJ CXJldHVybiAtRU5PTUVNOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPnRl c3QubGFzdF9yY3BpKTsgaSsrKQ0KKwkJaWYgKG5sYV9wdXRfdTgobXNnLCBpLCBkZXYtPnRlc3Qu bGFzdF9yY3BpW2ldKSkNCisJCQlyZXR1cm4gLUVOT01FTTsNCisNCisJbmxhX25lc3RfZW5kKG1z ZywgcnNzaSk7DQorDQorCXJzc2kgPSBubGFfbmVzdF9zdGFydChtc2csIE1UNzZfVE1fUlhfQVRU Ul9JQl9SU1NJKTsNCisJaWYgKCFyc3NpKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+dGVzdC5sYXN0X2liX3Jzc2kpOyBpKyspDQorCQlp ZiAobmxhX3B1dF9zOChtc2csIGksIGRldi0+dGVzdC5sYXN0X2liX3Jzc2lbaV0pKQ0KKwkJCXJl dHVybiAtRU5PTUVNOw0KKw0KKwlubGFfbmVzdF9lbmQobXNnLCByc3NpKTsNCisNCisJcnNzaSA9 IG5sYV9uZXN0X3N0YXJ0KG1zZywgTVQ3Nl9UTV9SWF9BVFRSX1dCX1JTU0kpOw0KKwlpZiAoIXJz c2kpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo ZGV2LT50ZXN0Lmxhc3Rfd2JfcnNzaSk7IGkrKykNCisJCWlmIChubGFfcHV0X3M4KG1zZywgaSwg ZGV2LT50ZXN0Lmxhc3Rfd2JfcnNzaVtpXSkpDQorCQkJcmV0dXJuIC1FTk9NRU07DQorDQorCW5s YV9uZXN0X2VuZChtc2csIHJzc2kpOw0KKw0KKwlpZiAobmxhX3B1dF91OChtc2csIE1UNzZfVE1f UlhfQVRUUl9TTlIsIGRldi0+dGVzdC5sYXN0X3NucikpDQorCQlyZXR1cm4gLUVOT01FTTsNCisN CisJbmxhX25lc3RfZW5kKG1zZywgcngpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQogY29uc3Qg c3RydWN0IG10NzZfdGVzdG1vZGVfb3BzIG10NzkxNV90ZXN0bW9kZV9vcHMgPSB7DQogCS5zZXRf c3RhdGUgPSBtdDc5MTVfdG1fc2V0X3N0YXRlLA0KKwkuZHVtcF9zdGF0cyA9IG10NzkxNV90bV9k dW1wX3N0YXRzLA0KIH07DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc5MTUvdGVzdG1vZGUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L3Rlc3Rtb2RlLmgNCmluZGV4IDA0ZjRhMmMuLmIzNDRhNjQgMTAwNjQ0DQot LS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS90ZXN0bW9kZS5o DQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS90ZXN0bW9k ZS5oDQpAQCAtMTEsNiArMTEsMTUgQEAgc3RydWN0IG10NzkxNV90bV90cnggew0KIAl1OCByc3Y7 DQogfTsNCiANCitzdHJ1Y3QgbXQ3OTE1X3RtX3J4X2ZpbHRlciB7DQorCXU4IHByb21pc2N1b3Vz Ow0KKwl1OCByZXBvcnRfZW47DQorCXU4IGJhbmQ7DQorCXU4IF9yc3Y7DQorCV9fbGUzMiBtYXNr Ow0KKwl1OCBfcnN2MVs0XTsNCit9Ow0KKw0KIHN0cnVjdCBtdDc5MTVfdG1fY21kIHsNCiAJdTgg dGVzdG1vZGVfZW47DQogCXU4IHBhcmFtX2lkeDsNCkBAIC0xOCw2ICsyNyw3IEBAIHN0cnVjdCBt dDc5MTVfdG1fY21kIHsNCiAJdW5pb24gew0KIAkJX19sZTMyIGRhdGE7DQogCQlzdHJ1Y3QgbXQ3 OTE1X3RtX3RyeCB0cng7DQorCQlzdHJ1Y3QgbXQ3OTE1X3RtX3J4X2ZpbHRlciBmaWx0ZXI7DQog CQl1OCB0ZXN0WzcyXTsNCiAJfSBwYXJhbTsNCiB9IF9fcGFja2VkOw0KQEAgLTMxLDQgKzQxLDI0 IEBAIGVudW0gew0KIAlUTV9NQUNfUlhfUlhWLA0KIH07DQogDQorI2RlZmluZSBSWF9GSUxURVJf U1RCQ19CQ05fQkNfTUMJQklUKDApDQorI2RlZmluZSBSWF9GSUxURVJfRkNTX0VSUgkJQklUKDEp DQorI2RlZmluZSBSWF9GSUxURVJfUFJPVE9DT0xfVkVSU0lPTglCSVQoMikNCisjZGVmaW5lIFJY X0ZJTFRFUl9QUk9CX1JFUQkJQklUKDMpDQorI2RlZmluZSBSWF9GSUxURVJfTUNBU1QJCQlCSVQo NCkNCisjZGVmaW5lIFJYX0ZJTFRFUl9CQ0FTVAkJCUJJVCg1KQ0KKyNkZWZpbmUgUlhfRklMVEVS X01DQVNUX1RBQkxFCQlCSVQoNikNCisjZGVmaW5lIFJYX0ZJTFRFUl9CQ19NQ19PTUFDX0EzCQlC SVQoNykNCisjZGVmaW5lIFJYX0ZJTFRFUl9CQ19NQ19CU1NJRF9BMwlCSVQoOCkNCisjZGVmaW5l IFJYX0ZJTFRFUl9CQ19NQ19CU1NJRF9BMglCSVQoOSkNCisjZGVmaW5lIFJYX0ZJTFRFUl9CQ05f QlNTSUQJCUJJVCgxMCkNCisjZGVmaW5lIFJYX0ZJTFRFUl9DVFJMX1JTVgkJQklUKDExKQ0KKyNk ZWZpbmUgUlhfRklMVEVSX0NUUwkJCUJJVCgxMikNCisjZGVmaW5lIFJYX0ZJTFRFUl9SVFMJCQlC SVQoMTMpDQorI2RlZmluZSBSWF9GSUxURVJfRFVQTElDQVRFCQlCSVQoMTQpDQorI2RlZmluZSBS WF9GSUxURVJfTk9UX09XTl9CU1NJRAkJQklUKDE1KQ0KKyNkZWZpbmUgUlhfRklMVEVSX05PVF9P V05fVUNBU1QJCUJJVCgxNikNCisjZGVmaW5lIFJYX0ZJTFRFUl9OT1RfT1dOX0JUSU0JCUJJVCgx NykNCisjZGVmaW5lIFJYX0ZJTFRFUl9ORFBBCQkJQklUKDE4KQ0KKw0KICNlbmRpZg0KLS0gDQoy LjE3LjENCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11770C43457 for ; Mon, 12 Oct 2020 12:56:34 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 978CC21BE5 for ; Mon, 12 Oct 2020 12:56:33 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Sd6G/vrH"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="qiMDbqnx" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 978CC21BE5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=NtP/aBJlZ6oP4vcu6NHoduvgyp83mJW5JgsPJJoQO5U=; b=Sd6G/vrH8xz22dyJeOIry3Lga hWuY6mIAy+mh4cyDiwi8VoiFrFxMkOsmfkSI9bzIdwWNLWavKrI2Jghl9KxlBHjkzxrJ0BGJ1sP0L yErmxPLPNOIUBclBb+gk6cmZP7fmZhqROaCdW1UEILSIGHfg+ZSA/8T7VIi8n6QPHdp0XBnXkbLv5 1nxWZCOzBcErtppVL7bv4RLUy+ZmRliuF5jsBsiwAG5ElvUW9+qkWNIQCIqUvNeVjHYpouVPT0i30 ZYKfSDBqskR4s0zmuYH4oI2GCQ8RwRAyASLxyBSg2C3uOnk8TB0TpH8BpYnfO5+dXVqml9fxqlzUk Z9NihuTsQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kRxNI-0000TB-UJ; Mon, 12 Oct 2020 12:56:24 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kRxN8-0000II-3B for linux-mediatek@lists.infradead.org; Mon, 12 Oct 2020 12:56:19 +0000 X-UUID: 569b40b07b884f57bb53a9fdfd38bb2e-20201012 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=HtPG+lg+u0TnPb4iEJYLRcPdOAgzljb2iTR7oz5/DLo=; b=qiMDbqnxWRNVoJkppDnbMcX/7RTBU4OSqtQuE0HsKdfu/JI4qu859DLVpwFUdSXYjAqppZWiQI8gj5rXwnky9B+9fcUIACjKHzVSDNTVQ8o9z7V1r5R4ZmAjrRvf2pJpomB4Y8llsVe8L0u6LuUqWhQLZS1Yy/TRXKRM2kT3Tb8=; X-UUID: 569b40b07b884f57bb53a9fdfd38bb2e-20201012 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 42958656; Mon, 12 Oct 2020 04:56:07 -0800 Received: from MTKMBS02N2.mediatek.inc (172.21.101.101) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 05:56:05 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 12 Oct 2020 20:55:56 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 12 Oct 2020 20:55:56 +0800 From: Shayne Chen To: Felix Fietkau Subject: [PATCH v3 08/10] mt76: mt7915: implement testmode rx support Date: Mon, 12 Oct 2020 20:54:01 +0800 Message-ID: <20201012125403.8608-8-shayne.chen@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20201012125403.8608-1-shayne.chen@mediatek.com> References: <20201012125403.8608-1-shayne.chen@mediatek.com> MIME-Version: 1.0 X-TM-SNTS-SMTP: 76F146419BF2D9F78B941CD21DB1EA2E304AB2D10C496131551B51E19DFFF3942000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201012_085614_351844_E63247C3 X-CRM114-Status: GOOD ( 19.08 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ryder Lee , Evelyn Tsai , linux-wireless , linux-mediatek , Lorenzo Bianconi , Shayne Chen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Support testmode rx and display rx statistic by parsing RXV packet type, which is currently only enabled in testmode. Reviewed-by: Ryder Lee Signed-off-by: Shayne Chen --- v2: change last_snr to u8 v3: use nla_put_u8 for MT76_TM_RX_ATTR_SNR change snr variable type to u8 in mt7915_mac_fill_rx_vector .../net/wireless/mediatek/mt76/mt7915/dma.c | 3 + .../net/wireless/mediatek/mt76/mt7915/mac.c | 38 ++++++++ .../net/wireless/mediatek/mt76/mt7915/mac.h | 5 + .../net/wireless/mediatek/mt76/mt7915/mcu.h | 1 + .../wireless/mediatek/mt76/mt7915/mt7915.h | 7 ++ .../wireless/mediatek/mt76/mt7915/testmode.c | 97 +++++++++++++++++++ .../wireless/mediatek/mt76/mt7915/testmode.h | 30 ++++++ 7 files changed, 181 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/dma.c b/drivers/net/wireless/mediatek/mt76/mt7915/dma.c index cfa12c4..e14814d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/dma.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/dma.c @@ -61,6 +61,9 @@ void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q, case PKT_TYPE_RX_EVENT: mt7915_mcu_rx_event(dev, skb); break; + case PKT_TYPE_TXRXV: + mt7915_mac_fill_rx_vector(dev, skb); + break; case PKT_TYPE_NORMAL: if (!mt7915_mac_fill_rx(dev, skb)) { mt76_rx(&dev->mt76, q, skb); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c index e03e12f..7bfdf54 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c @@ -562,6 +562,44 @@ int mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) return 0; } +void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb) +{ +#ifdef CONFIG_NL80211_TESTMODE + __le32 *rxd = (__le32 *)skb->data; + __le32 *rxv = rxd + 4; + u32 rcpi, ib_rssi, wb_rssi, v20, v21; + s32 foe; + u8 snr; + int i; + + rcpi = le32_to_cpu(rxv[6]); + ib_rssi = le32_to_cpu(rxv[7]); + wb_rssi = le32_to_cpu(rxv[8]) >> 5; + + for (i = 0; i < 4; i++, rcpi >>= 8, ib_rssi >>= 8, wb_rssi >>= 9) { + if (i == 3) + wb_rssi = le32_to_cpu(rxv[9]); + + dev->test.last_rcpi[i] = rcpi & 0xff; + dev->test.last_ib_rssi[i] = ib_rssi & 0xff; + dev->test.last_wb_rssi[i] = wb_rssi & 0xff; + } + + v20 = le32_to_cpu(rxv[20]); + v21 = le32_to_cpu(rxv[21]); + + foe = FIELD_GET(MT_CRXV_FOE_LO, v20) | + (FIELD_GET(MT_CRXV_FOE_HI, v21) << MT_CRXV_FOE_SHIFT); + + snr = FIELD_GET(MT_CRXV_SNR, v20) - 16; + + dev->test.last_freq_offset = foe; + dev->test.last_snr = snr; + + dev_kfree_skb(skb); +#endif +} + static u16 mt7915_mac_tx_rate_val(struct mt76_phy *mphy, u8 mode, u8 rate_idx, u8 nss, u8 stbc, u8 *bw) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.h b/drivers/net/wireless/mediatek/mt76/mt7915/mac.h index 0921b6f..d420392 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.h @@ -128,6 +128,11 @@ enum rx_pkt_type { #define MT_CRXV_HE_BEAM_CHNG BIT(13) #define MT_CRXV_HE_DOPPLER BIT(16) +#define MT_CRXV_SNR GENMASK(18, 13) +#define MT_CRXV_FOE_LO GENMASK(31, 19) +#define MT_CRXV_FOE_HI GENMASK(6, 0) +#define MT_CRXV_FOE_SHIFT 13 + enum tx_header_format { MT_HDR_FORMAT_802_3, MT_HDR_FORMAT_CMD, diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h index 0a7e9d2..89453a6 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h @@ -48,6 +48,7 @@ enum { enum { MCU_ATE_SET_TRX = 0x1, + MCU_ATE_SET_RX_FILTER = 0x3, }; struct mt7915_mcu_rxd { diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h index 6735915..fd7de79 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h @@ -165,6 +165,12 @@ struct mt7915_dev { struct { u32 *reg_backup; + s32 last_freq_offset; + u8 last_rcpi[4]; + s8 last_ib_rssi[4]; + s8 last_wb_rssi[4]; + u8 last_snr; + u8 spe_idx; } test; #endif @@ -436,6 +442,7 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi, struct ieee80211_key_conf *key, bool beacon); void mt7915_mac_set_timing(struct mt7915_phy *phy); int mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb); +void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb); void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb); int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct ieee80211_sta *sta); diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c index 5d95766..acab268 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c @@ -113,6 +113,31 @@ mt7915_tm_reg_backup_restore(struct mt7915_dev *dev, struct mt7915_phy *phy) mt76_clear(dev, MT_TMAC_TCR0(0), MT_TMAC_TCR0_TBTT_STOP_CTRL); } +static int +mt7915_tm_config_rx_filter(struct mt7915_dev *dev, bool en) +{ + struct mt7915_tm_cmd req = { + .testmode_en = 1, + .param_idx = MCU_ATE_SET_RX_FILTER, + .param.filter.report_en = en, + .param.filter.band = 0, /* TODO: support dbdc */ + }; + __le32 mask = RX_FILTER_NOT_OWN_BTIM | + RX_FILTER_NOT_OWN_UCAST | + RX_FILTER_RTS | RX_FILTER_CTS | + RX_FILTER_CTRL_RSV | + RX_FILTER_BC_MC_BSSID_A2 | + RX_FILTER_BC_MC_BSSID_A3 | + RX_FILTER_BC_MC_OMAC_A3 | + RX_FILTER_PROTOCOL_VERSION | + RX_FILTER_FCS_ERR; + + req.param.filter.mask = cpu_to_le32(mask); + + return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_ATE_CTRL, &req, + sizeof(req), false); +} + static void mt7915_tm_init(struct mt7915_dev *dev) { @@ -124,6 +149,7 @@ mt7915_tm_init(struct mt7915_dev *dev) mt7915_tm_mode_ctrl(dev, en); mt7915_tm_reg_backup_restore(dev, &dev->phy); mt7915_tm_set_trx(dev, &dev->phy, TM_MAC_TXRX, !en); + mt7915_tm_config_rx_filter(dev, en); } static void @@ -156,6 +182,20 @@ mt7915_tm_set_tx_frames(struct mt7915_dev *dev, bool en) info->control.vif = dev->phy.monitor_vif; } +static void +mt7915_tm_set_rx_frames(struct mt7915_dev *dev, bool en) +{ + if (en) { + mutex_unlock(&dev->mt76.mutex); + mt7915_set_channel(&dev->phy); + mutex_lock(&dev->mt76.mutex); + + mt7915_mcu_set_chan_info(&dev->phy, MCU_EXT_CMD_SET_RX_PATH); + } + + mt7915_tm_set_trx(dev, &dev->phy, TM_MAC_RX_RXV, en); +} + static int mt7915_tm_set_state(struct mt76_dev *mdev, enum mt76_testmode_state state) { @@ -169,12 +209,69 @@ mt7915_tm_set_state(struct mt76_dev *mdev, enum mt76_testmode_state state) mt7915_tm_set_tx_frames(dev, false); else if (state == MT76_TM_STATE_TX_FRAMES) mt7915_tm_set_tx_frames(dev, true); + else if (prev_state == MT76_TM_STATE_RX_FRAMES) + mt7915_tm_set_rx_frames(dev, false); + else if (state == MT76_TM_STATE_RX_FRAMES) + mt7915_tm_set_rx_frames(dev, true); else if (prev_state == MT76_TM_STATE_OFF || state == MT76_TM_STATE_OFF) mt7915_tm_init(dev); return 0; } +static int +mt7915_tm_dump_stats(struct mt76_dev *mdev, struct sk_buff *msg) +{ + struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76); + void *rx, *rssi; + int i; + + rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX); + if (!rx) + return -ENOMEM; + + if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, dev->test.last_freq_offset)) + return -ENOMEM; + + rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI); + if (!rssi) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(dev->test.last_rcpi); i++) + if (nla_put_u8(msg, i, dev->test.last_rcpi[i])) + return -ENOMEM; + + nla_nest_end(msg, rssi); + + rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_IB_RSSI); + if (!rssi) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(dev->test.last_ib_rssi); i++) + if (nla_put_s8(msg, i, dev->test.last_ib_rssi[i])) + return -ENOMEM; + + nla_nest_end(msg, rssi); + + rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_WB_RSSI); + if (!rssi) + return -ENOMEM; + + for (i = 0; i < ARRAY_SIZE(dev->test.last_wb_rssi); i++) + if (nla_put_s8(msg, i, dev->test.last_wb_rssi[i])) + return -ENOMEM; + + nla_nest_end(msg, rssi); + + if (nla_put_u8(msg, MT76_TM_RX_ATTR_SNR, dev->test.last_snr)) + return -ENOMEM; + + nla_nest_end(msg, rx); + + return 0; +} + const struct mt76_testmode_ops mt7915_testmode_ops = { .set_state = mt7915_tm_set_state, + .dump_stats = mt7915_tm_dump_stats, }; diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h index 04f4a2c..b344a64 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h @@ -11,6 +11,15 @@ struct mt7915_tm_trx { u8 rsv; }; +struct mt7915_tm_rx_filter { + u8 promiscuous; + u8 report_en; + u8 band; + u8 _rsv; + __le32 mask; + u8 _rsv1[4]; +}; + struct mt7915_tm_cmd { u8 testmode_en; u8 param_idx; @@ -18,6 +27,7 @@ struct mt7915_tm_cmd { union { __le32 data; struct mt7915_tm_trx trx; + struct mt7915_tm_rx_filter filter; u8 test[72]; } param; } __packed; @@ -31,4 +41,24 @@ enum { TM_MAC_RX_RXV, }; +#define RX_FILTER_STBC_BCN_BC_MC BIT(0) +#define RX_FILTER_FCS_ERR BIT(1) +#define RX_FILTER_PROTOCOL_VERSION BIT(2) +#define RX_FILTER_PROB_REQ BIT(3) +#define RX_FILTER_MCAST BIT(4) +#define RX_FILTER_BCAST BIT(5) +#define RX_FILTER_MCAST_TABLE BIT(6) +#define RX_FILTER_BC_MC_OMAC_A3 BIT(7) +#define RX_FILTER_BC_MC_BSSID_A3 BIT(8) +#define RX_FILTER_BC_MC_BSSID_A2 BIT(9) +#define RX_FILTER_BCN_BSSID BIT(10) +#define RX_FILTER_CTRL_RSV BIT(11) +#define RX_FILTER_CTS BIT(12) +#define RX_FILTER_RTS BIT(13) +#define RX_FILTER_DUPLICATE BIT(14) +#define RX_FILTER_NOT_OWN_BSSID BIT(15) +#define RX_FILTER_NOT_OWN_UCAST BIT(16) +#define RX_FILTER_NOT_OWN_BTIM BIT(17) +#define RX_FILTER_NDPA BIT(18) + #endif -- 2.17.1 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek