From patchwork Mon Mar 22 20:46:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emmanuel Grumbach X-Patchwork-Id: 406446 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.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, 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 14630C433C1 for ; Mon, 22 Mar 2021 20:47:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CABEF619A0 for ; Mon, 22 Mar 2021 20:47:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230045AbhCVUqw (ORCPT ); Mon, 22 Mar 2021 16:46:52 -0400 Received: from mga14.intel.com ([192.55.52.115]:38743 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229692AbhCVUqt (ORCPT ); Mon, 22 Mar 2021 16:46:49 -0400 IronPort-SDR: Hl2EKlsGFC8mx7ELV8TocDP1kWsW/TKR2SOOIcleNSSObU/7HmOZyyz7b7db9AggSFSuQFvmkD 6EdI7zYCoJWA== X-IronPort-AV: E=McAfee;i="6000,8403,9931"; a="189746688" X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="189746688" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 13:46:48 -0700 IronPort-SDR: P4JtOQ00vo6L40kEzsGqTaDcM6yQqzQwXt5sXIXONBVSF9I209E62NssD5QThTHVFQ7rz7zZF7 B7phBPE8PStw== X-IronPort-AV: E=Sophos;i="5.81,269,1610438400"; d="scan'208";a="414640827" Received: from isutskov-mobl.ger.corp.intel.com (HELO egrumbac-mobl1.lan) ([10.251.189.99]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Mar 2021 13:46:46 -0700 From: Emmanuel Grumbach To: kvalo@codeaurora.org Cc: johannes@sipsolutions.net, linux-wireless@vger.kernel.org, luca@coelho.fi, Emmanuel Grumbach Subject: [RESEND PATCH 0/5] Add support for AMT over WLAN Date: Mon, 22 Mar 2021 22:46:28 +0200 Message-Id: <20210322204633.102581-1-emmanuel.grumbach@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org This patch series adds support for AMT over WLAN. Information about Intel Active Management Technology is available on the net, but in a nutshell, it is an application running on an embedded CPU in the chipset. This application can provide remote control to the system even when no OS is, present or not even installed. By control, we mean, KVM, the possibility to attach a remote driver, power up / down / reset the machine and other options. When the host uses wireless, the embedded CPU can't access the wireless device and hence, the traffic for AMT must be routed through the host. The AMT <-> WLAN driver interface is explained at lengh inside the patches. Basically, there is a memory region that is mapped to a PCI devices that can read / write to that memory and sends the data to the embedded CPU. The driver for this PCI device is mei. We needed to add code for that driver, those patches are in this series and need to be routed through wireless-drivers tree as requested by Greg KH. There is also a cfg80211 patch that I should have sent earlier to Johannes. I include this here. Hopefully, it'll not cause trouble. Note about how to use this new feature: In order to fully use this new feature, we need to add a few vendor commands that are not included in this series. The upstream process for those commands will take some more time but it is definitely planned. The motivation to use vendor commands as opposed to regular nl80211 APIs is that we do not expect any other vendor to need similar APIs. We had no control on the AMT APIs and this is why we needed to add vendor commands for flows that differ just a tiny bit from the regular flow. For example, AMT needs to know when we are associated, but it requires to know whether we are associated in WPA or in WPA2. This is not known to the kernel, so we, unfortunately, had to add a vendor command for this. This is just an example. Integration with the connection manager is required to be able to use this new feature. In case the device is controlled by AMT and is actively used by AMT, AMT will not release the device. To properly reflect this state, we report hardware RF-Kill to the stack, but we add a reason saying that we do not own the device. The connection manager can then check what AP AMT is connected to and signal to AMT that it can ensure the connetion to that same AP can be kept. AMT will then release the device allowing the host to connect to that AP. Doing this transition fast enough will allow not to break the TCP connections that AMT maintains. I worked with Ayala Beker on the iwlwifi part of this feature. Please do not apply those patches, they'll be part of a regular pull request from Luca. Johannes, feel free to pick the cfg80211 patch although then, it will require to merge mac80211-next into wireless-drivers-next so maybe it's better to route it through Kalle as well? Alexander Usyskin (1): mei: bus: add client dma interface Emmanuel Grumbach (3): cfg80211: allow to specifying a reason for hw_rfkill iwlwifi: mei: add the driver to allow cooperation with CSME iwlwifi: integrate with iwlmei Tomas Winkler (1): mei: allow map and unmap of client dma buffer only for disconnected client drivers/misc/mei/bus.c | 67 +- drivers/misc/mei/client.c | 20 +- drivers/misc/mei/hw.h | 5 + drivers/net/wireless/intel/iwlwifi/Kconfig | 13 + drivers/net/wireless/intel/iwlwifi/Makefile | 2 + .../wireless/intel/iwlwifi/iwl-nvm-parse.c | 61 + .../wireless/intel/iwlwifi/iwl-nvm-parse.h | 11 +- .../net/wireless/intel/iwlwifi/iwl-trans.h | 2 + .../net/wireless/intel/iwlwifi/mei/Makefile | 8 + .../net/wireless/intel/iwlwifi/mei/internal.h | 20 + .../net/wireless/intel/iwlwifi/mei/iwl-mei.h | 440 ++++ drivers/net/wireless/intel/iwlwifi/mei/main.c | 2026 +++++++++++++++++ drivers/net/wireless/intel/iwlwifi/mei/net.c | 409 ++++ drivers/net/wireless/intel/iwlwifi/mei/sap.h | 736 ++++++ .../wireless/intel/iwlwifi/mei/trace-data.h | 69 + .../net/wireless/intel/iwlwifi/mei/trace.c | 15 + .../net/wireless/intel/iwlwifi/mei/trace.h | 62 + drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 3 +- .../net/wireless/intel/iwlwifi/mvm/mac80211.c | 42 +- drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 70 + drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 208 +- drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 7 +- drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 25 + .../net/wireless/intel/iwlwifi/pcie/trans.c | 16 +- include/linux/mei_cl_bus.h | 3 + include/net/cfg80211.h | 11 +- net/wireless/core.c | 7 +- 27 files changed, 4322 insertions(+), 36 deletions(-) create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/Makefile create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/internal.h create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/iwl-mei.h create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/main.c create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/net.c create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/sap.h create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/trace-data.h create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/trace.c create mode 100644 drivers/net/wireless/intel/iwlwifi/mei/trace.h