From patchwork Thu Sep 19 10:52:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?SsOpcsO0bWUgUG91aWxsZXI=?= X-Patchwork-Id: 1164524 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="PZM82LLc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46Ytwg29lTz9sP3 for ; Thu, 19 Sep 2019 20:52:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389454AbfISKwt (ORCPT ); Thu, 19 Sep 2019 06:52:49 -0400 Received: from mail-eopbgr730082.outbound.protection.outlook.com ([40.107.73.82]:1632 "EHLO NAM05-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389413AbfISKwp (ORCPT ); Thu, 19 Sep 2019 06:52:45 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L/86TdKzPXoqGoaxwoS8lXFnpl5hMY7qwHNxbY/C2Yw3eE4fHCdkk+kvVM0eJspzrIEl2DFEKgcw5ATxyyT+jXvpzYVSensRHyMwkPccXHo9kGeATTfA2w+ttPLEBvKeSb+l3OMm52SwZA9AF5iURBiCme50w/QOgpwYYpN/gEVygKg5uuY9dCR9mVmoAGslwBXwKOqv1zZQxdo2fFTsUjx6Aym4WWploFoaQ4qax81K0j9uNR2bRESjGUt+1BGeCwU+YbLleDtOPM0EnB+jj4cWAVp2LYPI/DpCKUfuged5RTaQm6yyGdLlgd9Uac/TDY2REeAQ+WB+3+P2kgKxeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RzgzJ2vGlgg9gz0VCTcZn3NVg+4ji2QAhdRHuUkOvS0=; b=W1tCRlYLszNa/Bv+wHl6/PVMzGnRfreejEiFUIYVDd3iVoyJe2LvV8HbnMpsc2fQorwv0SywMKnxOn4YCcSjXkG9xRmDOg4N5aD7X8hDqaXDTVbweBly5YZ6Wd2SHjzwLvI6/1sAKhKba0mlv9fGZdGnfn7rRtpAatGVSozfRyutCULwoPsCKD6tt26D7b7v4ehbK5getOH63aywM0KpsVrrAQNsF/NvH+DO4eVgYMthsdLH98hPENuYWeGxRilJOkyTaJ1q75dbWVccQb3b3NJtCpkCNK+8NCbPj5FgTmQYFgiRs8hKhyI8iMBY5vtw7M2O+qiU0rBOGeug5w3vIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RzgzJ2vGlgg9gz0VCTcZn3NVg+4ji2QAhdRHuUkOvS0=; b=PZM82LLceXlv1uajKyqy7ciql8DfgiVOVnOYarl8l+kuX7BmyFmaAz0prgwzA19RxT2n15g6G72y2NQwUxGMZptYtaahQB+rRgFMDh7x8+5thgpfidE7/0rs+TVUECYq8Oz9r/fOSKbbGqP/S2I0epajvEl3bY79Ce109BQnrec= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB4415.namprd11.prod.outlook.com (52.135.39.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Thu, 19 Sep 2019 10:52:40 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 10:52:40 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH 10/20] staging: wfx: instantiate mac80211 data Thread-Topic: [PATCH 10/20] staging: wfx: instantiate mac80211 data Thread-Index: AQHVbthaie3pdyJ79UymTTaSc7Pj9A== Date: Thu, 19 Sep 2019 10:52:39 +0000 Message-ID: <20190919105153.15285-11-Jerome.Pouiller@silabs.com> References: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8a62c635-1713-48e1-5c83-08d73cef7e48 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:MN2PR11MB4415; x-ms-traffictypediagnostic: MN2PR11MB4415: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:475; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(396003)(366004)(39850400004)(376002)(136003)(189003)(199004)(14454004)(71190400001)(2906002)(81156014)(81166006)(478600001)(316002)(2501003)(64756008)(76176011)(66476007)(256004)(86362001)(66446008)(99286004)(25786009)(8676002)(66556008)(66946007)(11346002)(6512007)(110136005)(5660300002)(54906003)(6436002)(71200400001)(76116006)(3846002)(6506007)(91956017)(1076003)(6116002)(486006)(305945005)(36756003)(2616005)(446003)(4326008)(7736002)(8936002)(66066001)(186003)(107886003)(26005)(476003)(6486002)(102836004); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR11MB4415; H:MN2PR11MB4063.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: aB9cX0EHCmHO1gp294XxESRjWflNIzW1v+dL0nkuqXAdefS6MfxapOdkJ9L3hQkV1iBMT9Chv4aGoM6z+tt/Oy5cYM03g+63fFpV2ReYhcoVEcudVsd1sqyaySmnh6OdTkeQXNUi+sWjoP65+DWP0PVfXOCYiIr4tduKzQi78dM644Lg276TsLDf52jRnIaTpy6YkYZrw9C0lRaFh/0agz5jb39f9tTRJydHrop+YxJs1/xFIqa4e4Cfc4zZMRnt/hyD1QOn+3jCNP0aCcKDXP5at2A+BnxeLex5ucAl1PFQR9CNGlx2izP9S1pZX1IkIIC7+HJoFRyveAvx0nXG44Uct5qMZ3jkzrion/hYe0W6qb3TwFjoVwL58qGTYrBvwTraLGApAh6LrSeg4Zd85rlAKtRctYfGR7eN/qJMs6M= Content-ID: MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a62c635-1713-48e1-5c83-08d73cef7e48 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 10:52:39.3775 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qSXZ5B1lVdmsvJR2SCThGrBT3rUQJS8gvImRUOIW8aS/Cz9HwNSgpaHAJUc8r2RYkGUmsh8tISXZD2cl0gRBAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4415 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jérôme Pouiller Allocate a struct ieee80211_hw but do not yet register it. Signed-off-by: Jérôme Pouiller --- drivers/staging/wfx/Makefile | 1 + drivers/staging/wfx/debug.c | 12 ++++++++++ drivers/staging/wfx/debug.h | 15 ++++++++++++ drivers/staging/wfx/main.c | 41 ++++++++++++++++++++++++++++++-- drivers/staging/wfx/sta.c | 46 ++++++++++++++++++++++++++++++++++++ drivers/staging/wfx/sta.h | 24 +++++++++++++++++++ drivers/staging/wfx/wfx.h | 8 +++++++ 7 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 drivers/staging/wfx/debug.h create mode 100644 drivers/staging/wfx/sta.c create mode 100644 drivers/staging/wfx/sta.h diff --git a/drivers/staging/wfx/Makefile b/drivers/staging/wfx/Makefile index 35670b86c64f..2896a2127c88 100644 --- a/drivers/staging/wfx/Makefile +++ b/drivers/staging/wfx/Makefile @@ -9,6 +9,7 @@ wfx-y := \ fwio.o \ hif_rx.o \ main.o \ + sta.o \ debug.o wfx-$(CONFIG_SPI) += bus_spi.o wfx-$(subst m,y,$(CONFIG_MMC)) += bus_sdio.o diff --git a/drivers/staging/wfx/debug.c b/drivers/staging/wfx/debug.c index bf44c944640d..f28c94d8de89 100644 --- a/drivers/staging/wfx/debug.c +++ b/drivers/staging/wfx/debug.c @@ -5,6 +5,18 @@ * Copyright (c) 2017-2019, Silicon Laboratories, Inc. * Copyright (c) 2010, ST-Ericsson */ +#include + +#include "wfx.h" #define CREATE_TRACE_POINTS #include "traces.h" + +int wfx_debug_init(struct wfx_dev *wdev) +{ + struct dentry *d; + + d = debugfs_create_dir("wfx", wdev->hw->wiphy->debugfsdir); + + return 0; +} diff --git a/drivers/staging/wfx/debug.h b/drivers/staging/wfx/debug.h new file mode 100644 index 000000000000..8bfba1a9fa20 --- /dev/null +++ b/drivers/staging/wfx/debug.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Debugfs interface. + * + * Copyright (c) 2017-2019, Silicon Laboratories, Inc. + * Copyright (c) 2011, ST-Ericsson + */ +#ifndef WFX_DEBUG_H +#define WFX_DEBUG_H + +struct wfx_dev; + +int wfx_debug_init(struct wfx_dev *wdev); + +#endif /* WFX_DEBUG_H */ diff --git a/drivers/staging/wfx/main.c b/drivers/staging/wfx/main.c index 5e7e7225f068..ca0ca873bd7d 100644 --- a/drivers/staging/wfx/main.c +++ b/drivers/staging/wfx/main.c @@ -25,6 +25,9 @@ #include "hwio.h" #include "bus.h" #include "bh.h" +#include "sta.h" +#include "debug.h" +#include "hif_api_cmd.h" #include "wfx_version.h" MODULE_DESCRIPTION("Silicon Labs 802.11 Wireless LAN driver for WFx"); @@ -36,6 +39,13 @@ static int gpio_wakeup = -2; module_param(gpio_wakeup, int, 0644); MODULE_PARM_DESC(gpio_wakeup, "gpio number for wakeup. -1 for none."); +static const struct ieee80211_ops wfx_ops = { + .start = wfx_start, + .stop = wfx_stop, + .add_interface = wfx_add_interface, + .remove_interface = wfx_remove_interface, +}; + bool wfx_api_older_than(struct wfx_dev *wdev, int major, int minor) { if (wdev->hw_caps.api_version_major < major) @@ -79,11 +89,26 @@ struct wfx_dev *wfx_init_common(struct device *dev, const struct hwbus_ops *hwbus_ops, void *hwbus_priv) { + struct ieee80211_hw *hw; struct wfx_dev *wdev; - wdev = devm_kmalloc(dev, sizeof(*wdev), GFP_KERNEL); - if (!wdev) + hw = ieee80211_alloc_hw(sizeof(struct wfx_dev), &wfx_ops); + if (!hw) return NULL; + + SET_IEEE80211_DEV(hw, dev); + + hw->vif_data_size = sizeof(struct wfx_vif); + hw->sta_data_size = sizeof(struct wfx_sta_priv); + hw->queues = 4; + hw->max_rates = 8; + hw->max_rate_tries = 15; + hw->extra_tx_headroom = sizeof(struct hif_sl_msg_hdr) + sizeof(struct hif_msg) + + sizeof(struct hif_req_tx) + + 4 /* alignment */ + 8 /* TKIP IV */; + + wdev = hw->priv; + wdev->hw = hw; wdev->dev = dev; wdev->hwbus_ops = hwbus_ops; wdev->hwbus_priv = hwbus_priv; @@ -96,6 +121,7 @@ struct wfx_dev *wfx_init_common(struct device *dev, void wfx_free_common(struct wfx_dev *wdev) { + ieee80211_free_hw(wdev->hw); } int wfx_probe(struct wfx_dev *wdev) @@ -127,6 +153,11 @@ int wfx_probe(struct wfx_dev *wdev) wdev->hw_caps.firmware_build, wdev->hw_caps.firmware_label, wdev->hw_caps.api_version_major, wdev->hw_caps.api_version_minor, wdev->keyset, *((u32 *) &wdev->hw_caps.capabilities)); + snprintf(wdev->hw->wiphy->fw_version, sizeof(wdev->hw->wiphy->fw_version), + "%d.%d.%d", + wdev->hw_caps.firmware_major, + wdev->hw_caps.firmware_minor, + wdev->hw_caps.firmware_build); if (wfx_api_older_than(wdev, 1, 0)) { dev_err(wdev->dev, "unsupported firmware API version (expect 1 while firmware returns %d)\n", @@ -150,8 +181,14 @@ int wfx_probe(struct wfx_dev *wdev) dev_info(wdev->dev, "MAC address %d: %pM\n", i, wdev->addresses[i].addr); } + err = wfx_debug_init(wdev); + if (err) + goto err2; + return 0; +err2: + ieee80211_free_hw(wdev->hw); err1: wfx_bh_unregister(wdev); return err; diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c new file mode 100644 index 000000000000..fe3ff6536a87 --- /dev/null +++ b/drivers/staging/wfx/sta.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Implementation of mac80211 API. + * + * Copyright (c) 2017-2019, Silicon Laboratories, Inc. + * Copyright (c) 2010, ST-Ericsson + */ +#include + +#include "sta.h" +#include "wfx.h" + +int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +{ + int i; + struct wfx_dev *wdev = hw->priv; + struct wfx_vif *wvif = (struct wfx_vif *) vif->drv_priv; + + for (i = 0; i < ARRAY_SIZE(wdev->vif); i++) { + if (!wdev->vif[i]) { + wdev->vif[i] = vif; + wvif->id = i; + break; + } + } + if (i == ARRAY_SIZE(wdev->vif)) + return -EOPNOTSUPP; + wvif->vif = vif; + wvif->wdev = wdev; + + return 0; +} + +void wfx_remove_interface(struct ieee80211_hw *hw, + struct ieee80211_vif *vif) +{ +} + +int wfx_start(struct ieee80211_hw *hw) +{ + return 0; +} + +void wfx_stop(struct ieee80211_hw *hw) +{ +} diff --git a/drivers/staging/wfx/sta.h b/drivers/staging/wfx/sta.h new file mode 100644 index 000000000000..f17b4d1511d7 --- /dev/null +++ b/drivers/staging/wfx/sta.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Implementation of mac80211 API. + * + * Copyright (c) 2017-2019, Silicon Laboratories, Inc. + * Copyright (c) 2010, ST-Ericsson + */ +#ifndef WFX_STA_H +#define WFX_STA_H + +#include + +struct wfx_sta_priv { + int link_id; + int vif_id; +}; + +// mac80211 interface +int wfx_start(struct ieee80211_hw *hw); +void wfx_stop(struct ieee80211_hw *hw); +int wfx_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif); +void wfx_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif); + +#endif /* WFX_STA_H */ diff --git a/drivers/staging/wfx/wfx.h b/drivers/staging/wfx/wfx.h index f5f9a337d828..a7e571e0da30 100644 --- a/drivers/staging/wfx/wfx.h +++ b/drivers/staging/wfx/wfx.h @@ -22,6 +22,8 @@ struct hwbus_ops; struct wfx_dev { struct wfx_platform_data pdata; struct device *dev; + struct ieee80211_hw *hw; + struct ieee80211_vif *vif[2]; struct mac_address addresses[2]; const struct hwbus_ops *hwbus_ops; void *hwbus_priv; @@ -32,4 +34,10 @@ struct wfx_dev { struct wfx_hif hif; }; +struct wfx_vif { + struct wfx_dev *wdev; + struct ieee80211_vif *vif; + int id; +}; + #endif /* WFX_H */