From patchwork Mon Jan 28 16:13:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Whitten X-Patchwork-Id: 1032043 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=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LhEsWxvc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43pGDF74w5z9sS0 for ; Tue, 29 Jan 2019 04:03:25 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727227AbfA1RDO (ORCPT ); Mon, 28 Jan 2019 12:03:14 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:38784 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387535AbfA1QN7 (ORCPT ); Mon, 28 Jan 2019 11:13:59 -0500 Received: by mail-wr1-f67.google.com with SMTP id v13so18668851wrw.5; Mon, 28 Jan 2019 08:13:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=cQEg/fY/4fwqAOKXHFbwz+lUp8voIQMkvzv/xUhihWI=; b=LhEsWxvcA8ZKFNzXsM8CAXLOkre80zmk59bJiSD+C/XpA5l9CSJoTAd0prZvVyRjL4 /+I+qiJ544oeVDg+KbjlaReAyMgjfElTe8kDzic+EM041ocHSkii0Hw0mrKAUr7mDb6H 5OwLxQ7cLeWixUT56F05SUmWy+axQ7PUT6OQGkGhXbvp3/M5AARyYzZBwDYZy2C9iAuv qikbphP6R9RHJuy44so1aX+g/m5jcZL8sUnVcX7jjyETQAz99zfm0vEWIBlWEGdSWRaI Xn640JFN/j9UeG0XRBIU7w7JloyZ74vfcR8SduruBEDYLcEsy+7U8nMhI2e4WZrPYASU 5alQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=cQEg/fY/4fwqAOKXHFbwz+lUp8voIQMkvzv/xUhihWI=; b=IZe89kZOzCqDrimDiyQrlg5TifhvTgsl6Oi+BbcZSXEWGxBBmxE0UtP//I6HscA3iL aBiOzE0vz8DnaMwE9wQH2VfY4ES+5Eh+MX4I8mU1iVQNvjmLi9JCNjw8TE6ZdOyWkllx 6YWZkj89nBWVaciLXpZjdEOuk9LNWvkv3Oiti7cIM1dwe9zIbcgs7ARP+fyzn8w37XoA CEVpa0PCpeVRAA23wsYzeJCpQRzKGbRtGHFhZOdyYg4U91rn6n8hAookl4wu+85m0X4x dmrcxjtOELAezYMpH7bMZBJcKsh6ZQoO63pmgyfeJoh/m6v2/WthwFAnNI+Adr0/u8pu Bf1A== X-Gm-Message-State: AJcUukeNSlWdiNNJJ4sW9GPH3z1MQSgAvLhrJxTzEMVCmnCM8JxFR+NE aWgDiADxVlxBqWtW9C+rlnY= X-Google-Smtp-Source: ALg8bN5s7yfAyHgs+ZB4dPMs59FIlB2K5LwQJlwtLnfbJccI+k0i0Sb1E/NqiUNYMBk9eFZPvs9dzw== X-Received: by 2002:a5d:480d:: with SMTP id l13mr23765784wrq.175.1548692037725; Mon, 28 Jan 2019 08:13:57 -0800 (PST) Received: from Sarah.corp.lairdtech.com ([109.174.151.67]) by smtp.gmail.com with ESMTPSA id l20sm246445944wrb.93.2019.01.28.08.13.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Jan 2019 08:13:57 -0800 (PST) From: Ben Whitten X-Google-Original-From: Ben Whitten To: afaerber@suse.de Cc: linux-lpwan@lists.infradead.org, Ben Whitten , "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH lora-next 10/11] net: lora: sx130x: make use of lora address metadata in transmission Date: Mon, 28 Jan 2019 16:13:04 +0000 Message-Id: <20190128161306.27805-11-ben.whitten@lairdtech.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190128161306.27805-1-ben.whitten@lairdtech.com> References: <20190128161306.27805-1-ben.whitten@lairdtech.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We take the metadata encoded in the lora address and apply it to the outgoing transmission. Signed-off-by: Ben Whitten --- drivers/net/lora/sx130x.c | 58 ++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/drivers/net/lora/sx130x.c b/drivers/net/lora/sx130x.c index f96f32d2e1ff..428e82b4ccb8 100644 --- a/drivers/net/lora/sx130x.c +++ b/drivers/net/lora/sx130x.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "sx130x.h" @@ -688,12 +689,13 @@ static int sx130x_agc_init(struct sx130x_priv *priv) return ret; } -static int sx130x_tx(struct sx130x_priv *priv, void *data, int len) +static int sx130x_tx(struct sx130x_priv *priv, struct sk_buff *skb) { int ret, i; u8 buff[256 + 16]; struct sx130x_tx_header *hdr = (struct sx130x_tx_header *)buff; struct net_device *netdev = dev_get_drvdata(priv->dev); + u8 sf; /* TODO general checks to make sure we CAN send */ @@ -722,11 +724,47 @@ static int sx130x_tx(struct sx130x_priv *priv, void *data, int len) hdr->tx_power = 15; /* HACK power entry 15 */ hdr->u.lora.crc16_en = 1; /* Enable CRC16 */ - hdr->u.lora.cr = 1; /* CR 4/5 */ - hdr->u.lora.sf = 7; /* SF7 */ - hdr->u.lora.payload_len = len; /* Set the data len to the skb len */ + + switch (lora_skb_prv(skb)->cr) { + case 5: + hdr->u.lora.cr = 1; /* CR 4/5 */ + break; + case 6: + hdr->u.lora.cr = 2; /* CR 4/6 */ + break; + case 7: + hdr->u.lora.cr = 3; /* CR 4/7 */ + break; + case 8: + hdr->u.lora.cr = 4; /* CR 4/8 */ + break; + default: + return -ENXIO; + } + + sf = lora_skb_prv(skb)->sf; + if ((sf < 6) || (sf > 12)) + return -ENXIO; + + hdr->u.lora.sf = sf; + + hdr->u.lora.payload_len = skb->len; /* Set the data length */ hdr->u.lora.implicit_header = 0; /* No implicit header */ - hdr->u.lora.mod_bw = 0; /* Set 125KHz BW */ + + switch(lora_skb_prv(skb)->bw) { + case 125: + hdr->u.lora.mod_bw = 0; /* 125KHz BW */ + break; + case 250: + hdr->u.lora.mod_bw = 1; /* 250KHz BW */ + break; + case 500: + hdr->u.lora.mod_bw = 2; /* 500KHz BW */ + break; + default: + return -ENXIO; + } + hdr->u.lora.ppm_offset = 0; /* TODO no ppm offset? */ hdr->u.lora.invert_pol = 0; /* TODO set no inverted polarity */ @@ -737,7 +775,7 @@ static int sx130x_tx(struct sx130x_priv *priv, void *data, int len) /* Copy the TX data into the buffer ready to go */ - memcpy((void *)&buff[16], data, len); + memcpy((void *)&buff[16], skb->data, skb->len); /* Reset any transmissions */ ret = regmap_write(priv->regmap, SX1301_TX_TRIG, 0); @@ -749,7 +787,7 @@ static int sx130x_tx(struct sx130x_priv *priv, void *data, int len) if (ret) return ret; ret = regmap_noinc_write(priv->regmap, SX1301_TX_DATA_BUF_DATA, buff, - len + 16); + skb->len + 16); if (ret) return ret; @@ -758,8 +796,8 @@ static int sx130x_tx(struct sx130x_priv *priv, void *data, int len) if (ret) return ret; - netdev_dbg(netdev, "Transmitting packet of size %d: ", len); - for (i = 0; i < len + 16; i++) + netdev_dbg(netdev, "Transmitting packet of size %d: ", skb->len); + for (i = 0; i < skb->len + 16; i++) netdev_dbg(netdev, "%X", buff[i]); return ret; @@ -791,7 +829,7 @@ static void sx130x_tx_work_handler(struct work_struct *ws) netdev_dbg(netdev, "%s\n", __func__); if (priv->tx_skb) { - ret = sx130x_tx(priv, priv->tx_skb->data, priv->tx_skb->len); + ret = sx130x_tx(priv, priv->tx_skb); if (ret) { netdev->stats.tx_errors++; } else {