From patchwork Mon Nov 7 14:59:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Berg X-Patchwork-Id: 9415349 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C760260585 for ; Mon, 7 Nov 2016 14:59:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BB25228C42 for ; Mon, 7 Nov 2016 14:59:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AFF0C28C4A; Mon, 7 Nov 2016 14:59:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7297428C4F for ; Mon, 7 Nov 2016 14:59:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932291AbcKGO75 (ORCPT ); Mon, 7 Nov 2016 09:59:57 -0500 Received: from s3.sipsolutions.net ([5.9.151.49]:36794 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753178AbcKGO7z (ORCPT ); Mon, 7 Nov 2016 09:59:55 -0500 Received: by sipsolutions.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.87) (envelope-from ) id 1c3lOr-00031L-Bz; Mon, 07 Nov 2016 15:59:53 +0100 From: Benjamin Berg To: Johannes Berg Cc: linux-wireless@vger.kernel.org, sw@simonwunderlich.de, Benjamin Berg Subject: [PATCH 2/8] phy: Use common freqchan helper for setting the operating channel Date: Mon, 7 Nov 2016 15:59:37 +0100 Message-Id: <20161107145943.16761-3-benjamin@sipsolutions.net> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161107145943.16761-1-benjamin@sipsolutions.net> References: <20161107145943.16761-1-benjamin@sipsolutions.net> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Benjamin Berg Simplify code by using the helper which has been introduced earlier. Signed-off-by: Benjamin Berg --- phy.c | 143 ++++++++++++------------------------------------------------------ 1 file changed, 25 insertions(+), 118 deletions(-) diff --git a/phy.c b/phy.c index c57a71f..266de4d 100644 --- a/phy.c +++ b/phy.c @@ -183,140 +183,47 @@ static int handle_name(struct nl80211_state *state, COMMAND(set, name, "", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_name, "Rename this wireless device."); -static int handle_freqs(struct nl_msg *msg, int argc, char **argv) -{ - static const struct { - const char *name; - unsigned int val; - } bwmap[] = { - { .name = "20", .val = NL80211_CHAN_WIDTH_20, }, - { .name = "40", .val = NL80211_CHAN_WIDTH_40, }, - { .name = "80", .val = NL80211_CHAN_WIDTH_80, }, - { .name = "80+80", .val = NL80211_CHAN_WIDTH_80P80, }, - { .name = "160", .val = NL80211_CHAN_WIDTH_160, }, - }; - uint32_t freq; - unsigned int i, bwval = NL80211_CHAN_WIDTH_20_NOHT; - char *end; - - if (argc < 1) - return 1; - - for (i = 0; i < ARRAY_SIZE(bwmap); i++) { - if (strcasecmp(bwmap[i].name, argv[0]) == 0) { - bwval = bwmap[i].val; - break; - } - } - - if (bwval == NL80211_CHAN_WIDTH_20_NOHT) - return 1; - - NLA_PUT_U32(msg, NL80211_ATTR_CHANNEL_WIDTH, bwval); - - if (argc == 1) - return 0; - - /* center freq 1 */ - if (!*argv[1]) - return 1; - freq = strtoul(argv[1], &end, 10); - if (*end) - return 1; - NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ1, freq); - - if (argc == 2) - return 0; - - /* center freq 2 */ - if (!*argv[2]) - return 1; - freq = strtoul(argv[2], &end, 10); - if (*end) - return 1; - NLA_PUT_U32(msg, NL80211_ATTR_CENTER_FREQ2, freq); - - return 0; - nla_put_failure: - return -ENOBUFS; -} - -static int handle_freqchan(struct nl_msg *msg, bool chan, - int argc, char **argv) -{ - char *end; - static const struct { - const char *name; - unsigned int val; - } htmap[] = { - { .name = "HT20", .val = NL80211_CHAN_HT20, }, - { .name = "HT40+", .val = NL80211_CHAN_HT40PLUS, }, - { .name = "HT40-", .val = NL80211_CHAN_HT40MINUS, }, - }; - unsigned int htval = NL80211_CHAN_NO_HT; - unsigned int freq; - unsigned int i; - - if (!argc || argc > 4) - return 1; - - if (!*argv[0]) - return 1; - freq = strtoul(argv[0], &end, 10); - if (*end) - return 1; - - if (chan) { - enum nl80211_band band; - band = freq <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; - freq = ieee80211_channel_to_frequency(freq, band); - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_FREQ, freq); - - if (argc > 2) { - return handle_freqs(msg, argc - 1, argv + 1); - } else if (argc == 2) { - for (i = 0; i < ARRAY_SIZE(htmap); i++) { - if (strcasecmp(htmap[i].name, argv[1]) == 0) { - htval = htmap[i].val; - break; - } - } - if (htval == NL80211_CHAN_NO_HT) - return handle_freqs(msg, argc - 1, argv + 1); - } - - NLA_PUT_U32(msg, NL80211_ATTR_WIPHY_CHANNEL_TYPE, htval); - - return 0; - nla_put_failure: - return -ENOBUFS; -} - static int handle_freq(struct nl80211_state *state, struct nl_msg *msg, int argc, char **argv, enum id_input id) { - return handle_freqchan(msg, false, argc, argv); + struct chandef chandef; + int res; + + res = parse_freqchan(&chandef, false, argc, argv, NULL); + if (res) + return res; + + return put_chandef(msg, &chandef); } -COMMAND(set, freq, " [HT20|HT40+|HT40-]", + +COMMAND(set, freq, + " [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n" + " [5|10|20|40|80|80+80|160] [ []]", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_freq, "Set frequency/channel the hardware is using, including HT\n" "configuration."); -COMMAND(set, freq, " [HT20|HT40+|HT40-]\n" - " [20|40|80|80+80|160] [
] [
]", +COMMAND(set, freq, + " [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]\n" + " [5|10|20|40|80|80+80|160] [ []]", NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_freq, NULL); static int handle_chan(struct nl80211_state *state, struct nl_msg *msg, int argc, char **argv, enum id_input id) { - return handle_freqchan(msg, true, argc, argv); + struct chandef chandef; + int res; + + res = parse_freqchan(&chandef, true, argc, argv, NULL); + if (res) + return res; + + return put_chandef(msg, &chandef); } -COMMAND(set, channel, " [HT20|HT40+|HT40-]", +COMMAND(set, channel, " [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]", NL80211_CMD_SET_WIPHY, 0, CIB_PHY, handle_chan, NULL); -COMMAND(set, channel, " [HT20|HT40+|HT40-]", +COMMAND(set, channel, " [NOHT|HT20|HT40+|HT40-|5MHz|10MHz|80MHz]", NL80211_CMD_SET_WIPHY, 0, CIB_NETDEV, handle_chan, NULL); static int handle_fragmentation(struct nl80211_state *state,