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=-9.8 required=3.0 tests=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 003E4C352BE for ; Tue, 14 Apr 2020 21:03:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B88192076A for ; Tue, 14 Apr 2020 21:03:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="dwiKAWpf" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2633613AbgDNVDM (ORCPT ); Tue, 14 Apr 2020 17:03:12 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:3408 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2633578AbgDNVB6 (ORCPT ); Tue, 14 Apr 2020 17:01:58 -0400 X-UUID: 61a8cbdc1f624fc083017a1fb4c4014a-20200415 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=YJoiPmA/XtxnEu5157ASSB7WKmR2A9Yoz73nkh5jgPg=; b=dwiKAWpf2rb1klal9qySqFA3j06dByTWFJ5DvFYqBfbtX+Iy9sO1hPqMhpRiklrJQwu6674JUTUsP5fdaIlGBJ98If8VbnPxZbCkcyPmz0kcLG5a4XLWamSt/zRfwigYxnNwWyysEuI9cj36nJNmtBhOXcjbKemurvOtOOe+yHU=; X-UUID: 61a8cbdc1f624fc083017a1fb4c4014a-20200415 Received: from mtkcas06.mediatek.inc [(172.21.101.30)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1701283352; Wed, 15 Apr 2020 05:01:34 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 15 Apr 2020 05:01:32 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 15 Apr 2020 05:01:30 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Shayne Chen , YF Luo , Yiwei Chung , Chih-Min Chen , Evelyn Tsai , Sean Wang , , , Ryder Lee Subject: [PATCH v2 11/18] mt76: mt7915: add HE capabilities support for peers Date: Wed, 15 Apr 2020 05:01:09 +0800 Message-ID: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 39A99E82BC2614AB1E0F2EA5289078CE600204031E007E30EA9CE0361CAFEA6E2000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org U2V0IHBlZXIncyBic2ljIEhFIGNhcGFiaWxpdGllcyB0aHJvdWdoIHN0YXJlYy4NCg0KU2lnbmVk LW9mZi1ieTogUnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KU3VnZ2VzdGVkLWJ5 OiBTaGlod2VpIExpbiA8c2hpaHdlaS5saW5AbWVkaWF0ZWsuY29tPg0KVGVzdGVkLWJ5OiBTaGF5 bmUgQ2hlbiA8c2hheW5lLmNoZW5AbWVkaWF0ZWsuY29tPg0KVGVzdGVkLWJ5OiBDaGloLU1pbiBD aGVuIDxjaGloLW1pbi5jaGVuQG1lZGlhdGVrLmNvbT4NClRlc3RlZC1ieTogRXZlbHluIFRzYWkg PGV2ZWx5bi50c2FpQG1lZGlhdGVrLmNvbT4NCkFja2VkLWJ5OiBZaXdlaSBDaHVuZyA8eWl3ZWku Y2h1bmdAbWVkaWF0ZWsuY29tPg0KQWNrZWQtYnk6IFlGIEx1byA8eWYubHVvQG1lZGlhdGVrLmNv bT4NCi0tLQ0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMgICB8 IDE5NyArKysrKysrKysrKysrKysrKysNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L21jdS5oICAgfCAxMDAgKysrKysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCAyOTcgaW5z ZXJ0aW9ucygrKQ0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvbWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9tY3UuYw0KaW5kZXggNzgzMWQ0ZjcwMGQwLi5lMTkxYzc5YzI1MGUgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYw0KKysrIGIv ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmMNCkBAIC04NSw2 ICs4NSw5IEBAIHN0cnVjdCBtdDc5MTVfZndfcmVnaW9uIHsNCiAjZGVmaW5lIHRvX3djaWRfbG8o aWQpCQkJRklFTERfR0VUKEdFTk1BU0soNywgMCksICh1MTYpaWQpDQogI2RlZmluZSB0b193Y2lk X2hpKGlkKQkJCUZJRUxEX0dFVChHRU5NQVNLKDksIDgpLCAodTE2KWlkKQ0KIA0KKyNkZWZpbmUg SEVfUEhZKHAsIGMpCQkJdThfZ2V0X2JpdHMoYywgSUVFRTgwMjExX0hFX1BIWV8jI3ApDQorI2Rl ZmluZSBIRV9NQUMobSwgYykJCQl1OF9nZXRfYml0cyhjLCBJRUVFODAyMTFfSEVfTUFDXyMjbSkN CisNCiBzdGF0aWMgZW51bSBtdDc5MTVfY2lwaGVyX3R5cGUNCiBtdDc5MTVfbWN1X2dldF9jaXBo ZXIoaW50IGNpcGhlcikNCiB7DQpAQCAtMTIzNCw2ICsxMjM3LDE4NyBAQCBtdDc5MTVfbWN1X3N0 YV9iYXNpY190bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiwNCiAJYmFzaWMtPnFvcyA9IHN0YS0+d21lOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK210Nzkx NV9tY3Vfc3RhX2hlX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9zdGFfaGVfY2FwICpoZV9jYXAgPSAmc3Rh LT5oZV9jYXA7DQorCXN0cnVjdCBpZWVlODAyMTFfaGVfY2FwX2VsZW0gKmVsZW0gPSAmaGVfY2Fw LT5oZV9jYXBfZWxlbTsNCisJc3RydWN0IHN0YV9yZWNfaGUgKmhlOw0KKwlzdHJ1Y3QgdGx2ICp0 bHY7DQorCXUzMiBjYXAgPSAwOw0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBT VEFfUkVDX0hFLCBzaXplb2YoKmhlKSk7DQorDQorCWhlID0gKHN0cnVjdCBzdGFfcmVjX2hlICop dGx2Ow0KKw0KKwlpZiAoZWxlbS0+bWFjX2NhcF9pbmZvWzBdICYgSUVFRTgwMjExX0hFX01BQ19D QVAwX0hUQ19IRSkNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9IVEM7DQorDQorCWlmIChlbGVt LT5tYWNfY2FwX2luZm9bMl0gJiBJRUVFODAyMTFfSEVfTUFDX0NBUDJfQlNSKQ0KKwkJY2FwIHw9 IFNUQV9SRUNfSEVfQ0FQX0JTUjsNCisNCisJaWYgKGVsZW0tPm1hY19jYXBfaW5mb1szXSAmIElF RUU4MDIxMV9IRV9NQUNfQ0FQM19PTUlfQ09OVFJPTCkNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NB UF9PTTsNCisNCisJaWYgKGVsZW0tPm1hY19jYXBfaW5mb1s0XSAmIElFRUU4MDIxMV9IRV9NQUNf Q0FQNF9BTURTVV9JTl9BTVBEVSkNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9BTVNEVV9JTl9B TVBEVTsNCisNCisJaWYgKGVsZW0tPm1hY19jYXBfaW5mb1s0XSAmIElFRUU4MDIxMV9IRV9NQUNf Q0FQNF9CUVIpDQorCQljYXAgfD0gU1RBX1JFQ19IRV9DQVBfQlFSOw0KKw0KKwlpZiAoZWxlbS0+ cGh5X2NhcF9pbmZvWzBdICYNCisJICAgIChJRUVFODAyMTFfSEVfUEhZX0NBUDBfQ0hBTk5FTF9X SURUSF9TRVRfUlVfTUFQUElOR19JTl8yRyB8DQorCSAgICAgSUVFRTgwMjExX0hFX1BIWV9DQVAw X0NIQU5ORUxfV0lEVEhfU0VUX1JVX01BUFBJTkdfSU5fNUcpKQ0KKwkJY2FwIHw9IFNUQV9SRUNf SEVfQ0FQX0JXMjBfUlUyNDJfU1VQUE9SVDsNCisNCisJaWYgKGVsZW0tPnBoeV9jYXBfaW5mb1sx XSAmDQorCSAgICBJRUVFODAyMTFfSEVfUEhZX0NBUDFfTERQQ19DT0RJTkdfSU5fUEFZTE9BRCkN CisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9MRFBDOw0KKw0KKwlpZiAoZWxlbS0+cGh5X2NhcF9p bmZvWzFdICYNCisJICAgIElFRUU4MDIxMV9IRV9QSFlfQ0FQMV9IRV9MVEZfQU5EX0dJX0ZPUl9I RV9QUERVU18wXzhVUykNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9TVV9QUERVXzFMVEZfOFVT X0dJOw0KKw0KKwlpZiAoZWxlbS0+cGh5X2NhcF9pbmZvWzJdICYNCisJICAgIElFRUU4MDIxMV9I RV9QSFlfQ0FQMl9ORFBfNHhfTFRGX0FORF8zXzJVUykNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NB UF9ORFBfNExURl8zRE9UMk1TX0dJOw0KKw0KKwlpZiAoZWxlbS0+cGh5X2NhcF9pbmZvWzJdICYN CisJICAgIElFRUU4MDIxMV9IRV9QSFlfQ0FQMl9TVEJDX1RYX1VOREVSXzgwTUhaKQ0KKwkJY2Fw IHw9IFNUQV9SRUNfSEVfQ0FQX0xFX0VRXzgwTV9UWF9TVEJDOw0KKw0KKwlpZiAoZWxlbS0+cGh5 X2NhcF9pbmZvWzJdICYNCisJICAgIElFRUU4MDIxMV9IRV9QSFlfQ0FQMl9TVEJDX1JYX1VOREVS XzgwTUhaKQ0KKwkJY2FwIHw9IFNUQV9SRUNfSEVfQ0FQX0xFX0VRXzgwTV9SWF9TVEJDOw0KKw0K KwlpZiAoZWxlbS0+cGh5X2NhcF9pbmZvWzZdICYNCisJICAgIElFRUU4MDIxMV9IRV9QSFlfQ0FQ Nl9QQVJUSUFMX0JXX0VYVF9SQU5HRSkNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9QQVJUSUFM X0JXX0VYVF9SQU5HRTsNCisNCisJaWYgKGVsZW0tPnBoeV9jYXBfaW5mb1s3XSAmDQorCSAgICBJ RUVFODAyMTFfSEVfUEhZX0NBUDdfSEVfU1VfTVVfUFBEVV80WExURl9BTkRfMDhfVVNfR0kpDQor CQljYXAgfD0gU1RBX1JFQ19IRV9DQVBfU1VfTVVfUFBEVV80TFRGXzhVU19HSTsNCisNCisJaWYg KGVsZW0tPnBoeV9jYXBfaW5mb1s3XSAmDQorCSAgICBJRUVFODAyMTFfSEVfUEhZX0NBUDdfU1RC Q19UWF9BQk9WRV84ME1IWikNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9HVF84ME1fVFhfU1RC QzsNCisNCisJaWYgKGVsZW0tPnBoeV9jYXBfaW5mb1s3XSAmDQorCSAgICBJRUVFODAyMTFfSEVf UEhZX0NBUDdfU1RCQ19SWF9BQk9WRV84ME1IWikNCisJCWNhcCB8PSBTVEFfUkVDX0hFX0NBUF9H VF84ME1fUlhfU1RCQzsNCisNCisJaWYgKGVsZW0tPnBoeV9jYXBfaW5mb1s4XSAmDQorCSAgICBJ RUVFODAyMTFfSEVfUEhZX0NBUDhfSEVfRVJfU1VfUFBEVV80WExURl9BTkRfMDhfVVNfR0kpDQor CQljYXAgfD0gU1RBX1JFQ19IRV9DQVBfRVJfU1VfUFBEVV80TFRGXzhVU19HSTsNCisNCisJaWYg KGVsZW0tPnBoeV9jYXBfaW5mb1s4XSAmDQorCSAgICBJRUVFODAyMTFfSEVfUEhZX0NBUDhfSEVf RVJfU1VfMVhMVEZfQU5EXzA4X1VTX0dJKQ0KKwkJY2FwIHw9IFNUQV9SRUNfSEVfQ0FQX0VSX1NV X1BQRFVfMUxURl84VVNfR0k7DQorDQorCWlmIChlbGVtLT5waHlfY2FwX2luZm9bOV0gJg0KKwkg ICAgSUVFRTgwMjExX0hFX1BIWV9DQVA5X05PTl9UUklHR0VSRURfQ1FJX0ZFRURCQUNLKQ0KKwkJ Y2FwIHw9IFNUQV9SRUNfSEVfQ0FQX1RSSUdfQ1FJX0ZLOw0KKw0KKwlpZiAoZWxlbS0+cGh5X2Nh cF9pbmZvWzldICYNCisJICAgIElFRUU4MDIxMV9IRV9QSFlfQ0FQOV9UWF8xMDI0X1FBTV9MRVNT X1RIQU5fMjQyX1RPTkVfUlUpDQorCQljYXAgfD0gU1RBX1JFQ19IRV9DQVBfVFhfMTAyNFFBTV9V TkRFUl9SVTI0MjsNCisNCisJaWYgKGVsZW0tPnBoeV9jYXBfaW5mb1s5XSAmDQorCSAgICBJRUVF ODAyMTFfSEVfUEhZX0NBUDlfUlhfMTAyNF9RQU1fTEVTU19USEFOXzI0Ml9UT05FX1JVKQ0KKwkJ Y2FwIHw9IFNUQV9SRUNfSEVfQ0FQX1JYXzEwMjRRQU1fVU5ERVJfUlUyNDI7DQorDQorCWhlLT5o ZV9jYXAgPSBjcHVfdG9fbGUzMihjYXApOw0KKw0KKwlzd2l0Y2ggKHN0YS0+YmFuZHdpZHRoKSB7 DQorCWNhc2UgSUVFRTgwMjExX1NUQV9SWF9CV18xNjA6DQorCQlpZiAoZWxlbS0+cGh5X2NhcF9p bmZvWzBdICYNCisJCSAgICBJRUVFODAyMTFfSEVfUEhZX0NBUDBfQ0hBTk5FTF9XSURUSF9TRVRf ODBQTFVTODBfTUhaX0lOXzVHKQ0KKwkJCWhlLT5tYXhfbnNzX21jc1tDTURfSEVfTUNTX0JXODA4 MF0gPQ0KKwkJCQloZV9jYXAtPmhlX21jc19uc3Nfc3VwcC5yeF9tY3NfODBwODA7DQorDQorCQlo ZS0+bWF4X25zc19tY3NbQ01EX0hFX01DU19CVzE2MF0gPQ0KKwkJCQloZV9jYXAtPmhlX21jc19u c3Nfc3VwcC5yeF9tY3NfMTYwOw0KKwkJLyogZmFsbCB0aHJvdWdoICovDQorCWRlZmF1bHQ6DQor CQloZS0+bWF4X25zc19tY3NbQ01EX0hFX01DU19CVzgwXSA9DQorCQkJCWhlX2NhcC0+aGVfbWNz X25zc19zdXBwLnJ4X21jc184MDsNCisJCWJyZWFrOw0KKwl9DQorDQorCWhlLT50X2ZyYW1lX2R1 ciA9DQorCQlIRV9NQUMoQ0FQMV9URl9NQUNfUEFEX0RVUl9NQVNLLCBlbGVtLT5tYWNfY2FwX2lu Zm9bMV0pOw0KKwloZS0+bWF4X2FtcGR1X2V4cCA9DQorCQlIRV9NQUMoQ0FQM19NQVhfQU1QRFVf TEVOX0VYUF9NQVNLLCBlbGVtLT5tYWNfY2FwX2luZm9bM10pOw0KKw0KKwloZS0+Yndfc2V0ID0N CisJCUhFX1BIWShDQVAwX0NIQU5ORUxfV0lEVEhfU0VUX01BU0ssIGVsZW0tPnBoeV9jYXBfaW5m b1swXSk7DQorCWhlLT5kZXZpY2VfY2xhc3MgPQ0KKwkJSEVfUEhZKENBUDFfREVWSUNFX0NMQVNT X0EsIGVsZW0tPnBoeV9jYXBfaW5mb1sxXSk7DQorCWhlLT5wdW5jX3ByZWFtX3J4ID0NCisJCUhF X1BIWShDQVAxX1BSRUFNQkxFX1BVTkNfUlhfTUFTSywgZWxlbS0+cGh5X2NhcF9pbmZvWzFdKTsN CisNCisJaGUtPmRjbV90eF9tb2RlID0NCisJCUhFX1BIWShDQVAzX0RDTV9NQVhfQ09OU1RfVFhf TUFTSywgZWxlbS0+cGh5X2NhcF9pbmZvWzNdKTsNCisJaGUtPmRjbV90eF9tYXhfbnNzID0NCisJ CUhFX1BIWShDQVAzX0RDTV9NQVhfVFhfTlNTXzIsIGVsZW0tPnBoeV9jYXBfaW5mb1szXSk7DQor CWhlLT5kY21fcnhfbW9kZSA9DQorCQlIRV9QSFkoQ0FQM19EQ01fTUFYX0NPTlNUX1JYX01BU0ss IGVsZW0tPnBoeV9jYXBfaW5mb1szXSk7DQorCWhlLT5kY21fcnhfbWF4X25zcyA9DQorCQlIRV9Q SFkoQ0FQM19EQ01fTUFYX1JYX05TU18yLCBlbGVtLT5waHlfY2FwX2luZm9bM10pOw0KKwloZS0+ ZGNtX3J4X21heF9uc3MgPQ0KKwkJSEVfUEhZKENBUDhfRENNX01BWF9SVV9NQVNLLCBlbGVtLT5w aHlfY2FwX2luZm9bOF0pOw0KKw0KKwloZS0+cGt0X2V4dCA9IDI7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorbXQ3OTE1X21jdV9zdGFfbXVydV90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhX2hlX2NhcCAq aGVfY2FwID0gJnN0YS0+aGVfY2FwOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hlX2NhcF9lbGVtICpl bGVtID0gJmhlX2NhcC0+aGVfY2FwX2VsZW07DQorCXN0cnVjdCBzdGFfcmVjX211cnUgKm11cnU7 DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwg U1RBX1JFQ19NVVJVLCBzaXplb2YoKm11cnUpKTsNCisNCisJbXVydSA9IChzdHJ1Y3Qgc3RhX3Jl Y19tdXJ1ICopdGx2Ow0KKwltdXJ1LT5jZmcub2ZkbWFfZGxfZW4gPSB0cnVlOw0KKwltdXJ1LT5j Zmcub2ZkbWFfdWxfZW4gPSB0cnVlOw0KKwltdXJ1LT5jZmcubWltb19kbF9lbiA9IHRydWU7DQor CW11cnUtPmNmZy5taW1vX3VsX2VuID0gdHJ1ZTsNCisNCisJbXVydS0+b2ZkbWFfZGwucHVuY19w cmVhbV9yeCA9DQorCQlIRV9QSFkoQ0FQMV9QUkVBTUJMRV9QVU5DX1JYX01BU0ssIGVsZW0tPnBo eV9jYXBfaW5mb1sxXSk7DQorCW11cnUtPm9mZG1hX2RsLmhlXzIwbV9pbl80MG1fMmcgPQ0KKwkJ SEVfUEhZKENBUDhfMjBNSFpfSU5fNDBNSFpfSEVfUFBEVV9JTl8yRywgZWxlbS0+cGh5X2NhcF9p bmZvWzhdKTsNCisJbXVydS0+b2ZkbWFfZGwuaGVfMjBtX2luXzE2MG0gPQ0KKwkJSEVfUEhZKENB UDhfMjBNSFpfSU5fMTYwTUhaX0hFX1BQRFUsIGVsZW0tPnBoeV9jYXBfaW5mb1s4XSk7DQorCW11 cnUtPm9mZG1hX2RsLmhlXzgwbV9pbl8xNjBtID0NCisJCUhFX1BIWShDQVA4XzgwTUhaX0lOXzE2 ME1IWl9IRV9QUERVLCBlbGVtLT5waHlfY2FwX2luZm9bOF0pOw0KKwltdXJ1LT5vZmRtYV9kbC5s dDE2X3NpZ2IgPSAwOw0KKwltdXJ1LT5vZmRtYV9kbC5yeF9zdV9jb21wX3NpZ2IgPSAwOw0KKwlt dXJ1LT5vZmRtYV9kbC5yeF9zdV9ub25fY29tcF9zaWdiID0gMDsNCisNCisJbXVydS0+b2ZkbWFf dWwudF9mcmFtZV9kdXIgPQ0KKwkJSEVfTUFDKENBUDFfVEZfTUFDX1BBRF9EVVJfTUFTSywgZWxl bS0+bWFjX2NhcF9pbmZvWzFdKTsNCisJbXVydS0+b2ZkbWFfdWwubXVfY2FzY2FkaW5nID0NCisJ CUhFX01BQyhDQVAyX01VX0NBU0NBRElORywgZWxlbS0+bWFjX2NhcF9pbmZvWzJdKTsNCisJbXVy dS0+b2ZkbWFfdWwudW9fcmEgPQ0KKwkJSEVfTUFDKENBUDNfT0ZETUFfUkEsIGVsZW0tPm1hY19j YXBfaW5mb1szXSk7DQorCW11cnUtPm9mZG1hX3VsLmhlXzJ4OTk2X3RvbmUgPSAwOw0KKwltdXJ1 LT5vZmRtYV91bC5yeF90X2ZyYW1lXzExYWMgPSAwOw0KKw0KKwltdXJ1LT5taW1vX2RsLnZodF9t dV9iZmVlID0NCisJCSEhKHN0YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9NVV9C RUFNRk9STUVFX0NBUEFCTEUpOw0KKwltdXJ1LT5taW1vX2RsLnBhcnRpYWxfYndfZGxfbWltbyA9 DQorCQlIRV9QSFkoQ0FQNl9QQVJUSUFMX0JBTkRXSURUSF9ETF9NVU1JTU8sIGVsZW0tPnBoeV9j YXBfaW5mb1s2XSk7DQorDQorCW11cnUtPm1pbW9fdWwuZnVsbF91bF9taW1vID0NCisJCUhFX1BI WShDQVAyX1VMX01VX0ZVTExfTVVfTUlNTywgZWxlbS0+cGh5X2NhcF9pbmZvWzJdKTsNCisJbXVy dS0+bWltb191bC5wYXJ0aWFsX3VsX21pbW8gPQ0KKwkJSEVfUEhZKENBUDJfVUxfTVVfUEFSVElB TF9NVV9NSU1PLCBlbGVtLT5waHlfY2FwX2luZm9bMl0pOw0KK30NCisNCiBzdGF0aWMgdm9pZA0K IG10NzkxNV9tY3Vfc3RhX3RsdihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLA0KIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCkBAIC0xMjU5LDYgKzE0 NDMsMTQgQEAgbXQ3OTE1X21jdV9zdGFfdGx2KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVj dCBza19idWZmICpza2IsDQogCQl2aHQtPnZodF9yeF9tY3NfbWFwID0gc3RhLT52aHRfY2FwLnZo dF9tY3MucnhfbWNzX21hcDsNCiAJCXZodC0+dmh0X3R4X21jc19tYXAgPSBzdGEtPnZodF9jYXAu dmh0X21jcy50eF9tY3NfbWFwOw0KIAl9DQorDQorCS8qIHN0YXJlYyBoZSAqLw0KKwlpZiAoc3Rh LT5oZV9jYXAuaGFzX2hlKQ0KKwkJbXQ3OTE1X21jdV9zdGFfaGVfdGx2KHNrYiwgc3RhKTsNCisN CisJLyogc3RhcmVjIG11cnUgKi8NCisJaWYgKHN0YS0+aGVfY2FwLmhhc19oZSB8fCBzdGEtPnZo dF9jYXAudmh0X3N1cHBvcnRlZCkNCisJCW10NzkxNV9tY3Vfc3RhX211cnVfdGx2KHNrYiwgc3Rh KTsNCiB9DQogDQogc3RhdGljIHZvaWQNCkBAIC0xNDYwLDYgKzE2NTIsMTEgQEAgbXQ3OTE1X21j dV9zdGFfcmF0ZV9jdHJsX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LA0KIAkJfQ0KIAl9DQogDQorCWlmIChzdGEtPmhlX2NhcC5oYXNfaGUpIHsNCisJCXJh LT5zdXBwX21vZGUgfD0gTU9ERV9IRTsNCisJCWNhcCB8PSBTVEFfQ0FQX0hFOw0KKwl9DQorDQog CXJhLT5zdGFfc3RhdHVzID0gY3B1X3RvX2xlMzIoY2FwKTsNCiANCiAJc3dpdGNoIChCSVQoZmxz KHJhLT5zdXBwX21vZGUpIC0gMSkpIHsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlh dGVrL210NzYvbXQ3OTE1L21jdS5oDQppbmRleCA4NWVmMWIzNWIyNjUuLmNjMGUyNzczMGFhYiAx MDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21j dS5oDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3Uu aA0KQEAgLTY1OCw2ICs2NTgsNzUgQEAgc3RydWN0IHN0YV9yZWNfdmh0IHsNCiAJdTggcnN2WzNd Ow0KIH0gX19wYWNrZWQ7DQogDQorc3RydWN0IHN0YV9yZWNfbXVydSB7DQorCV9fbGUxNiB0YWc7 DQorCV9fbGUxNiBsZW47DQorDQorCXN0cnVjdCB7DQorCQlib29sIG9mZG1hX2RsX2VuOw0KKwkJ Ym9vbCBvZmRtYV91bF9lbjsNCisJCWJvb2wgbWltb19kbF9lbjsNCisJCWJvb2wgbWltb191bF9l bjsNCisJCWJvb2wgcnN2WzRdOw0KKwl9IGNmZzsNCisNCisJc3RydWN0IHsNCisJCXU4IHB1bmNf cHJlYW1fcng7DQorCQlib29sIGhlXzIwbV9pbl80MG1fMmc7DQorCQlib29sIGhlXzIwbV9pbl8x NjBtOw0KKwkJYm9vbCBoZV84MG1faW5fMTYwbTsNCisJCWJvb2wgbHQxNl9zaWdiOw0KKwkJYm9v bCByeF9zdV9jb21wX3NpZ2I7DQorCQlib29sIHJ4X3N1X25vbl9jb21wX3NpZ2I7DQorCQlib29s IHJzdjsNCisJfSBvZmRtYV9kbDsNCisNCisJc3RydWN0IHsNCisJCXU4IHRfZnJhbWVfZHVyOw0K KwkJdTggbXVfY2FzY2FkaW5nOw0KKwkJdTggdW9fcmE7DQorCQl1OCBoZV8yeDk5Nl90b25lOw0K KwkJdTggcnhfdF9mcmFtZV8xMWFjOw0KKwkJdTggcnN2WzNdOw0KKwl9IG9mZG1hX3VsOw0KKw0K KwlzdHJ1Y3Qgew0KKwkJYm9vbCB2aHRfbXVfYmZlZTsNCisJCWJvb2wgcGFydGlhbF9id19kbF9t aW1vOw0KKwkJdTggcnN2WzJdOw0KKwl9IG1pbW9fZGw7DQorDQorCXN0cnVjdCB7DQorCQlib29s IGZ1bGxfdWxfbWltbzsNCisJCWJvb2wgcGFydGlhbF91bF9taW1vOw0KKwkJdTggcnN2WzJdOw0K Kwl9IG1pbW9fdWw7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY19oZSB7DQorCV9f bGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorDQorCV9fbGUzMiBoZV9jYXA7DQorDQorCXU4IHRf ZnJhbWVfZHVyOw0KKwl1OCBtYXhfYW1wZHVfZXhwOw0KKwl1OCBid19zZXQ7DQorCXU4IGRldmlj ZV9jbGFzczsNCisJdTggZGNtX3R4X21vZGU7DQorCXU4IGRjbV90eF9tYXhfbnNzOw0KKwl1OCBk Y21fcnhfbW9kZTsNCisJdTggZGNtX3J4X21heF9uc3M7DQorCXU4IGRjbV9tYXhfcnU7DQorCXU4 IHB1bmNfcHJlYW1fcng7DQorCXU4IHBrdF9leHQ7DQorCXU4IHJzdjE7DQorDQorCV9fbGUxNiBt YXhfbnNzX21jc1tDTURfSEVfTUNTX0JXX05VTV07DQorDQorCXU4IHJzdjJbMl07DQorfSBfX3Bh Y2tlZDsNCisNCiBzdHJ1Y3Qgc3RhX3JlY19iYSB7DQogCV9fbGUxNiB0YWc7DQogCV9fbGUxNiBs ZW47DQpAQCAtODAzLDkgKzg3MiwxMSBAQCBlbnVtIHsNCiAjZGVmaW5lIE1UNzkxNV9TVEFfVVBE QVRFX01BWF9TSVpFCShzaXplb2Yoc3RydWN0IHN0YV9yZXFfaGRyKSArCVwNCiAJCQkJCSBzaXpl b2Yoc3RydWN0IHN0YV9yZWNfYmFzaWMpICsJXA0KIAkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3Jl Y19odCkgKwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCBzdGFfcmVjX2hlKSArCVwNCiAJCQkJCSBz aXplb2Yoc3RydWN0IHN0YV9yZWNfYmEpICsJXA0KIAkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3Jl Y192aHQpICsJXA0KIAkJCQkJIHNpemVvZihzdHJ1Y3QgdGx2KSArCQlcDQorCQkJCQkgc2l6ZW9m KHN0cnVjdCBzdGFfcmVjX211cnUpICsJXA0KIAkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3JlY19z ZWMpICsJXA0KIAkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3JlY19yYSkgKwlcDQogCQkJCQkgTVQ3 OTE1X1dUQkxfVVBEQVRFX01BWF9TSVpFKQ0KQEAgLTgzMyw2ICs5MDQsNyBAQCBlbnVtIHsNCiAj ZGVmaW5lIE1PREVfT0ZETQkJCUJJVCgxKQ0KICNkZWZpbmUgTU9ERV9IVAkJCQlCSVQoMikNCiAj ZGVmaW5lIE1PREVfVkhUCQkJQklUKDMpDQorI2RlZmluZSBNT0RFX0hFCQkJCUJJVCg0KQ0KIA0K ICNkZWZpbmUgU1RBX0NBUF9XTU0JCQlCSVQoMCkNCiAjZGVmaW5lIFNUQV9DQVBfU0dJXzIwCQkJ QklUKDQpDQpAQCAtODQ3LDUgKzkxOSwzMyBAQCBlbnVtIHsNCiAjZGVmaW5lIFNUQV9DQVBfTERQ QwkJCUJJVCgyNCkNCiAjZGVmaW5lIFNUQV9DQVBfSFQJCQlCSVQoMjYpDQogI2RlZmluZSBTVEFf Q0FQX1ZIVAkJCUJJVCgyNykNCisjZGVmaW5lIFNUQV9DQVBfSEUJCQlCSVQoMjgpDQorDQorLyog SEUgTUFDICovDQorI2RlZmluZSBTVEFfUkVDX0hFX0NBUF9IVEMJCQlCSVQoMCkNCisjZGVmaW5l IFNUQV9SRUNfSEVfQ0FQX0JRUgkJCUJJVCgxKQ0KKyNkZWZpbmUgU1RBX1JFQ19IRV9DQVBfQlNS CQkJQklUKDIpDQorI2RlZmluZSBTVEFfUkVDX0hFX0NBUF9PTQkJCUJJVCgzKQ0KKyNkZWZpbmUg U1RBX1JFQ19IRV9DQVBfQU1TRFVfSU5fQU1QRFUJCUJJVCg0KQ0KKy8qIEhFIFBIWSAqLw0KKyNk ZWZpbmUgU1RBX1JFQ19IRV9DQVBfRFVBTF9CQU5ECQlCSVQoNSkNCisjZGVmaW5lIFNUQV9SRUNf SEVfQ0FQX0xEUEMJCQlCSVQoNikNCisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX1RSSUdfQ1FJX0ZL CQlCSVQoNykNCisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX1BBUlRJQUxfQldfRVhUX1JBTkdFCUJJ VCg4KQ0KKy8qIFNUQkMgKi8NCisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX0xFX0VRXzgwTV9UWF9T VEJDCUJJVCg5KQ0KKyNkZWZpbmUgU1RBX1JFQ19IRV9DQVBfTEVfRVFfODBNX1JYX1NUQkMJQklU KDEwKQ0KKyNkZWZpbmUgU1RBX1JFQ19IRV9DQVBfR1RfODBNX1RYX1NUQkMJCUJJVCgxMSkNCisj ZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX0dUXzgwTV9SWF9TVEJDCQlCSVQoMTIpDQorLyogR0kgKi8N CisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX1NVX1BQRFVfMUxURl84VVNfR0kJQklUKDEzKQ0KKyNk ZWZpbmUgU1RBX1JFQ19IRV9DQVBfU1VfTVVfUFBEVV80TFRGXzhVU19HSQlCSVQoMTQpDQorI2Rl ZmluZSBTVEFfUkVDX0hFX0NBUF9FUl9TVV9QUERVXzFMVEZfOFVTX0dJCUJJVCgxNSkNCisjZGVm aW5lIFNUQV9SRUNfSEVfQ0FQX0VSX1NVX1BQRFVfNExURl84VVNfR0kJQklUKDE2KQ0KKyNkZWZp bmUgU1RBX1JFQ19IRV9DQVBfTkRQXzRMVEZfM0RPVDJNU19HSQlCSVQoMTcpDQorLyogMjQyIFRP TkUgKi8NCisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX0JXMjBfUlUyNDJfU1VQUE9SVAlCSVQoMTgp DQorI2RlZmluZSBTVEFfUkVDX0hFX0NBUF9UWF8xMDI0UUFNX1VOREVSX1JVMjQyCUJJVCgxOSkN CisjZGVmaW5lIFNUQV9SRUNfSEVfQ0FQX1JYXzEwMjRRQU1fVU5ERVJfUlUyNDIJQklUKDIwKQ0K IA0KICNlbmRpZg0KLS0gDQoyLjE4LjANCg== 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=-9.8 required=3.0 tests=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 AE805C2BB85 for ; Tue, 14 Apr 2020 21:12:08 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 7AA752074D for ; Tue, 14 Apr 2020 21:12:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ORZODNhU"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="kbkDsSoE" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7AA752074D 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=bombadil.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=8rWzHjnqZJfuVJ+AsTB+Dex1bMQx4bb1m503pjzgLUc=; b=ORZODNhUg9fr2N NLwyzWimkDAda1U3RTkrWvB6nXIga9emwg6FeEj+e0EgtIQSVS4qA/9KEqLT6Nmv8mMAbGr/xjj9a JwnSoILTIzp+L0VV7Zf2tjM8v5M88JFoJ9YiW+beUq1SvxqGnMQQIXFfLVuWhfboYqHS7WGeZlxgl 9tnCyCWDYeSsJVgVPyiCF3Y2T4JBxWm3QaQc/Pd2AoAULlCIUaRJ/oZmXNLjpZKcoaOYRJCftJGiY 2F39OF+EMlpOGEL+VsJ0RLxasHfgldo/YE2wfurOdxSnnu4wKK4GG7/rNQBDQmOIjcV3LDY5hhCAD H1t5YOk1wtE2ZeYYKFYw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jOSqg-0005ok-B9; Tue, 14 Apr 2020 21:12:02 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jOSqV-0005Gb-8O for linux-mediatek@lists.infradead.org; Tue, 14 Apr 2020 21:11:54 +0000 X-UUID: 76f106a07a9f4f2fbad44e29ec300045-20200414 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=YJoiPmA/XtxnEu5157ASSB7WKmR2A9Yoz73nkh5jgPg=; b=kbkDsSoEjbIq2LLinw09xuHFvZxheXQAX8GmbKi42Y63L9okBLX5MZMSWPAUqQvWYAkrKXzsupwmceN2sznDY53lpO8k9lcl8r0zUwfbQETGGNLw+XNJDNUoKPvIE+ZwdPLavX9I+Uwvg2JuByidW9RSaxdHS3SEaRveBkH5SDE=; X-UUID: 76f106a07a9f4f2fbad44e29ec300045-20200414 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 360552315; Tue, 14 Apr 2020 13:11:43 -0800 Received: from MTKMBS02N2.mediatek.inc (172.21.101.101) by MTKMBS62N2.mediatek.inc (172.29.193.42) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 14 Apr 2020 14:01:39 -0700 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 15 Apr 2020 05:01:32 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 15 Apr 2020 05:01:30 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi Subject: [PATCH v2 11/18] mt76: mt7915: add HE capabilities support for peers Date: Wed, 15 Apr 2020 05:01:09 +0800 Message-ID: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 X-TM-SNTS-SMTP: 39A99E82BC2614AB1E0F2EA5289078CE600204031E007E30EA9CE0361CAFEA6E2000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200414_141151_323398_03A6E5DA X-CRM114-Status: UNSURE ( 9.00 ) X-CRM114-Notice: Please train this message. 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: YF Luo , Evelyn Tsai , linux-wireless@vger.kernel.org, Sean Wang , Chih-Min Chen , Ryder Lee , Yiwei Chung , linux-mediatek@lists.infradead.org, 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 Set peer's bsic HE capabilities through starec. Signed-off-by: Ryder Lee Suggested-by: Shihwei Lin Tested-by: Shayne Chen Tested-by: Chih-Min Chen Tested-by: Evelyn Tsai Acked-by: Yiwei Chung Acked-by: YF Luo --- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 197 ++++++++++++++++++ .../net/wireless/mediatek/mt76/mt7915/mcu.h | 100 +++++++++ 2 files changed, 297 insertions(+) diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c index 7831d4f700d0..e191c79c250e 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c @@ -85,6 +85,9 @@ struct mt7915_fw_region { #define to_wcid_lo(id) FIELD_GET(GENMASK(7, 0), (u16)id) #define to_wcid_hi(id) FIELD_GET(GENMASK(9, 8), (u16)id) +#define HE_PHY(p, c) u8_get_bits(c, IEEE80211_HE_PHY_##p) +#define HE_MAC(m, c) u8_get_bits(c, IEEE80211_HE_MAC_##m) + static enum mt7915_cipher_type mt7915_mcu_get_cipher(int cipher) { @@ -1234,6 +1237,187 @@ mt7915_mcu_sta_basic_tlv(struct sk_buff *skb, struct ieee80211_vif *vif, basic->qos = sta->wme; } +static void +mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta) +{ + struct ieee80211_sta_he_cap *he_cap = &sta->he_cap; + struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem; + struct sta_rec_he *he; + struct tlv *tlv; + u32 cap = 0; + + tlv = mt7915_mcu_add_tlv(skb, STA_REC_HE, sizeof(*he)); + + he = (struct sta_rec_he *)tlv; + + if (elem->mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_HTC_HE) + cap |= STA_REC_HE_CAP_HTC; + + if (elem->mac_cap_info[2] & IEEE80211_HE_MAC_CAP2_BSR) + cap |= STA_REC_HE_CAP_BSR; + + if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL) + cap |= STA_REC_HE_CAP_OM; + + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU) + cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU; + + if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR) + cap |= STA_REC_HE_CAP_BQR; + + if (elem->phy_cap_info[0] & + (IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G | + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G)) + cap |= STA_REC_HE_CAP_BW20_RU242_SUPPORT; + + if (elem->phy_cap_info[1] & + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD) + cap |= STA_REC_HE_CAP_LDPC; + + if (elem->phy_cap_info[1] & + IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US) + cap |= STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI; + + if (elem->phy_cap_info[2] & + IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US) + cap |= STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI; + + if (elem->phy_cap_info[2] & + IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ) + cap |= STA_REC_HE_CAP_LE_EQ_80M_TX_STBC; + + if (elem->phy_cap_info[2] & + IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ) + cap |= STA_REC_HE_CAP_LE_EQ_80M_RX_STBC; + + if (elem->phy_cap_info[6] & + IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE) + cap |= STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE; + + if (elem->phy_cap_info[7] & + IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI) + cap |= STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI; + + if (elem->phy_cap_info[7] & + IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ) + cap |= STA_REC_HE_CAP_GT_80M_TX_STBC; + + if (elem->phy_cap_info[7] & + IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ) + cap |= STA_REC_HE_CAP_GT_80M_RX_STBC; + + if (elem->phy_cap_info[8] & + IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI) + cap |= STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI; + + if (elem->phy_cap_info[8] & + IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI) + cap |= STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI; + + if (elem->phy_cap_info[9] & + IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK) + cap |= STA_REC_HE_CAP_TRIG_CQI_FK; + + if (elem->phy_cap_info[9] & + IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU) + cap |= STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242; + + if (elem->phy_cap_info[9] & + IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU) + cap |= STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242; + + he->he_cap = cpu_to_le32(cap); + + switch (sta->bandwidth) { + case IEEE80211_STA_RX_BW_160: + if (elem->phy_cap_info[0] & + IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) + he->max_nss_mcs[CMD_HE_MCS_BW8080] = + he_cap->he_mcs_nss_supp.rx_mcs_80p80; + + he->max_nss_mcs[CMD_HE_MCS_BW160] = + he_cap->he_mcs_nss_supp.rx_mcs_160; + /* fall through */ + default: + he->max_nss_mcs[CMD_HE_MCS_BW80] = + he_cap->he_mcs_nss_supp.rx_mcs_80; + break; + } + + he->t_frame_dur = + HE_MAC(CAP1_TF_MAC_PAD_DUR_MASK, elem->mac_cap_info[1]); + he->max_ampdu_exp = + HE_MAC(CAP3_MAX_AMPDU_LEN_EXP_MASK, elem->mac_cap_info[3]); + + he->bw_set = + HE_PHY(CAP0_CHANNEL_WIDTH_SET_MASK, elem->phy_cap_info[0]); + he->device_class = + HE_PHY(CAP1_DEVICE_CLASS_A, elem->phy_cap_info[1]); + he->punc_pream_rx = + HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]); + + he->dcm_tx_mode = + HE_PHY(CAP3_DCM_MAX_CONST_TX_MASK, elem->phy_cap_info[3]); + he->dcm_tx_max_nss = + HE_PHY(CAP3_DCM_MAX_TX_NSS_2, elem->phy_cap_info[3]); + he->dcm_rx_mode = + HE_PHY(CAP3_DCM_MAX_CONST_RX_MASK, elem->phy_cap_info[3]); + he->dcm_rx_max_nss = + HE_PHY(CAP3_DCM_MAX_RX_NSS_2, elem->phy_cap_info[3]); + he->dcm_rx_max_nss = + HE_PHY(CAP8_DCM_MAX_RU_MASK, elem->phy_cap_info[8]); + + he->pkt_ext = 2; +} + +static void +mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta) +{ + struct ieee80211_sta_he_cap *he_cap = &sta->he_cap; + struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem; + struct sta_rec_muru *muru; + struct tlv *tlv; + + tlv = mt7915_mcu_add_tlv(skb, STA_REC_MURU, sizeof(*muru)); + + muru = (struct sta_rec_muru *)tlv; + muru->cfg.ofdma_dl_en = true; + muru->cfg.ofdma_ul_en = true; + muru->cfg.mimo_dl_en = true; + muru->cfg.mimo_ul_en = true; + + muru->ofdma_dl.punc_pream_rx = + HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]); + muru->ofdma_dl.he_20m_in_40m_2g = + HE_PHY(CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G, elem->phy_cap_info[8]); + muru->ofdma_dl.he_20m_in_160m = + HE_PHY(CAP8_20MHZ_IN_160MHZ_HE_PPDU, elem->phy_cap_info[8]); + muru->ofdma_dl.he_80m_in_160m = + HE_PHY(CAP8_80MHZ_IN_160MHZ_HE_PPDU, elem->phy_cap_info[8]); + muru->ofdma_dl.lt16_sigb = 0; + muru->ofdma_dl.rx_su_comp_sigb = 0; + muru->ofdma_dl.rx_su_non_comp_sigb = 0; + + muru->ofdma_ul.t_frame_dur = + HE_MAC(CAP1_TF_MAC_PAD_DUR_MASK, elem->mac_cap_info[1]); + muru->ofdma_ul.mu_cascading = + HE_MAC(CAP2_MU_CASCADING, elem->mac_cap_info[2]); + muru->ofdma_ul.uo_ra = + HE_MAC(CAP3_OFDMA_RA, elem->mac_cap_info[3]); + muru->ofdma_ul.he_2x996_tone = 0; + muru->ofdma_ul.rx_t_frame_11ac = 0; + + muru->mimo_dl.vht_mu_bfee = + !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE); + muru->mimo_dl.partial_bw_dl_mimo = + HE_PHY(CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO, elem->phy_cap_info[6]); + + muru->mimo_ul.full_ul_mimo = + HE_PHY(CAP2_UL_MU_FULL_MU_MIMO, elem->phy_cap_info[2]); + muru->mimo_ul.partial_ul_mimo = + HE_PHY(CAP2_UL_MU_PARTIAL_MU_MIMO, elem->phy_cap_info[2]); +} + static void mt7915_mcu_sta_tlv(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_sta *sta) @@ -1259,6 +1443,14 @@ mt7915_mcu_sta_tlv(struct mt7915_dev *dev, struct sk_buff *skb, vht->vht_rx_mcs_map = sta->vht_cap.vht_mcs.rx_mcs_map; vht->vht_tx_mcs_map = sta->vht_cap.vht_mcs.tx_mcs_map; } + + /* starec he */ + if (sta->he_cap.has_he) + mt7915_mcu_sta_he_tlv(skb, sta); + + /* starec muru */ + if (sta->he_cap.has_he || sta->vht_cap.vht_supported) + mt7915_mcu_sta_muru_tlv(skb, sta); } static void @@ -1460,6 +1652,11 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev, } } + if (sta->he_cap.has_he) { + ra->supp_mode |= MODE_HE; + cap |= STA_CAP_HE; + } + ra->sta_status = cpu_to_le32(cap); switch (BIT(fls(ra->supp_mode) - 1)) { diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h index 85ef1b35b265..cc0e27730aab 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h @@ -658,6 +658,75 @@ struct sta_rec_vht { u8 rsv[3]; } __packed; +struct sta_rec_muru { + __le16 tag; + __le16 len; + + struct { + bool ofdma_dl_en; + bool ofdma_ul_en; + bool mimo_dl_en; + bool mimo_ul_en; + bool rsv[4]; + } cfg; + + struct { + u8 punc_pream_rx; + bool he_20m_in_40m_2g; + bool he_20m_in_160m; + bool he_80m_in_160m; + bool lt16_sigb; + bool rx_su_comp_sigb; + bool rx_su_non_comp_sigb; + bool rsv; + } ofdma_dl; + + struct { + u8 t_frame_dur; + u8 mu_cascading; + u8 uo_ra; + u8 he_2x996_tone; + u8 rx_t_frame_11ac; + u8 rsv[3]; + } ofdma_ul; + + struct { + bool vht_mu_bfee; + bool partial_bw_dl_mimo; + u8 rsv[2]; + } mimo_dl; + + struct { + bool full_ul_mimo; + bool partial_ul_mimo; + u8 rsv[2]; + } mimo_ul; +} __packed; + +struct sta_rec_he { + __le16 tag; + __le16 len; + + __le32 he_cap; + + u8 t_frame_dur; + u8 max_ampdu_exp; + u8 bw_set; + u8 device_class; + u8 dcm_tx_mode; + u8 dcm_tx_max_nss; + u8 dcm_rx_mode; + u8 dcm_rx_max_nss; + u8 dcm_max_ru; + u8 punc_pream_rx; + u8 pkt_ext; + u8 rsv1; + + __le16 max_nss_mcs[CMD_HE_MCS_BW_NUM]; + + u8 rsv2[2]; +} __packed; + struct sta_rec_ba { __le16 tag; __le16 len; @@ -803,9 +872,11 @@ enum { #define MT7915_STA_UPDATE_MAX_SIZE (sizeof(struct sta_req_hdr) + \ sizeof(struct sta_rec_basic) + \ sizeof(struct sta_rec_ht) + \ + sizeof(struct sta_rec_he) + \ sizeof(struct sta_rec_ba) + \ sizeof(struct sta_rec_vht) + \ sizeof(struct tlv) + \ + sizeof(struct sta_rec_muru) + \ sizeof(struct sta_rec_sec) + \ sizeof(struct sta_rec_ra) + \ MT7915_WTBL_UPDATE_MAX_SIZE) @@ -833,6 +904,7 @@ enum { #define MODE_OFDM BIT(1) #define MODE_HT BIT(2) #define MODE_VHT BIT(3) +#define MODE_HE BIT(4) #define STA_CAP_WMM BIT(0) #define STA_CAP_SGI_20 BIT(4) @@ -847,5 +919,33 @@ enum { #define STA_CAP_LDPC BIT(24) #define STA_CAP_HT BIT(26) #define STA_CAP_VHT BIT(27) +#define STA_CAP_HE BIT(28) + +/* HE MAC */ +#define STA_REC_HE_CAP_HTC BIT(0) +#define STA_REC_HE_CAP_BQR BIT(1) +#define STA_REC_HE_CAP_BSR BIT(2) +#define STA_REC_HE_CAP_OM BIT(3) +#define STA_REC_HE_CAP_AMSDU_IN_AMPDU BIT(4) +/* HE PHY */ +#define STA_REC_HE_CAP_DUAL_BAND BIT(5) +#define STA_REC_HE_CAP_LDPC BIT(6) +#define STA_REC_HE_CAP_TRIG_CQI_FK BIT(7) +#define STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE BIT(8) +/* STBC */ +#define STA_REC_HE_CAP_LE_EQ_80M_TX_STBC BIT(9) +#define STA_REC_HE_CAP_LE_EQ_80M_RX_STBC BIT(10) +#define STA_REC_HE_CAP_GT_80M_TX_STBC BIT(11) +#define STA_REC_HE_CAP_GT_80M_RX_STBC BIT(12) +/* GI */ +#define STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI BIT(13) +#define STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI BIT(14) +#define STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI BIT(15) +#define STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI BIT(16) +#define STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI BIT(17) +/* 242 TONE */ +#define STA_REC_HE_CAP_BW20_RU242_SUPPORT BIT(18) +#define STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242 BIT(19) +#define STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242 BIT(20) #endif -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek