From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Alexander Aring <alex.aring@gmail.com>,
Stefan Schmidt <stefan@datenfreihafen.org>,
linux-wpan@vger.kernel.org
Cc: netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
David Girault <david.girault@qorvo.com>,
Romuald Despres <romuald.despres@qorvo.com>,
Frederic Blain <frederic.blain@qorvo.com>,
Nicolas Schodet <nico@ni.fr.eu.org>,
Michael Hennerich <michael.hennerich@analog.com>,
Jakub Kicinski <kuba@kernel.org>,
Varka Bhadram <varkabhadram@gmail.com>,
Xue Liu <liuxuenetmail@gmail.com>, Alan Ott <alan@signal11.us>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Miquel Raynal <miquel.raynal@bootlin.com>
Subject: [PATCH v3 08/41] net: mac802154: Convert the symbol duration into nanoseconds
Date: Mon, 17 Jan 2022 12:54:07 +0100 [thread overview]
Message-ID: <20220117115440.60296-9-miquel.raynal@bootlin.com> (raw)
In-Reply-To: <20220117115440.60296-1-miquel.raynal@bootlin.com>
Tdsym is often given in the spec as pretty small numbers in microseconds
and hence was reflected in the code as symbol_duration and was stored as
a u8. Actually, for UWB PHYs, the symbol duration is given in
nanoseconds and are as precise as picoseconds. In order to handle better
these PHYs, change the type of symbol_duration to u32 and store this
value in nanoseconds.
All the users of this variable are updated in a mechanical change.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
drivers/net/ieee802154/at86rf230.c | 22 +++++++++++-----------
drivers/net/ieee802154/atusb.c | 22 +++++++++++-----------
drivers/net/ieee802154/ca8210.c | 2 +-
drivers/net/ieee802154/mcr20a.c | 8 ++++----
include/net/cfg802154.h | 4 ++--
net/mac802154/main.c | 8 ++++----
6 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c
index 1feabeed17fb..e58b0dc64364 100644
--- a/drivers/net/ieee802154/at86rf230.c
+++ b/drivers/net/ieee802154/at86rf230.c
@@ -1066,24 +1066,24 @@ at86rf212_set_channel(struct at86rf230_local *lp, u8 page, u8 channel)
if (channel == 0) {
if (page == 0) {
/* SUB:0 and BPSK:0 -> BPSK-20 */
- lp->hw->phy->symbol_duration = 50;
+ lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
} else {
/* SUB:1 and BPSK:0 -> BPSK-40 */
- lp->hw->phy->symbol_duration = 25;
+ lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
}
} else {
if (page == 0)
/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */
- lp->hw->phy->symbol_duration = 40;
+ lp->hw->phy->symbol_duration = 40 * NSEC_PER_USEC;
else
/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */
- lp->hw->phy->symbol_duration = 16;
+ lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
}
- lp->hw->phy->lifs_period = IEEE802154_LIFS_PERIOD *
- lp->hw->phy->symbol_duration;
- lp->hw->phy->sifs_period = IEEE802154_SIFS_PERIOD *
- lp->hw->phy->symbol_duration;
+ lp->hw->phy->lifs_period =
+ (IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
+ lp->hw->phy->sifs_period =
+ (IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
}
@@ -1563,7 +1563,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->hw->phy->supported.page[0].chunk[0].protocol = IEEE802154_OQPSK_PHY;
lp->hw->phy->supported.page[0].chunk[0].band = IEEE802154_2400_MHZ_BAND;
lp->hw->phy->current_channel = 11;
- lp->hw->phy->symbol_duration = 16;
+ lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
lp->hw->phy->supported.tx_powers = at86rf231_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers);
lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels;
@@ -1595,7 +1595,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->hw->phy->supported.page[2].chunk[1].band = IEEE802154_915_MHZ_BAND;
lp->hw->phy->current_channel = 5;
- lp->hw->phy->symbol_duration = 25;
+ lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
lp->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH;
lp->hw->phy->supported.tx_powers = at86rf212_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
@@ -1610,7 +1610,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->hw->phy->supported.page[0].chunk[0].protocol = IEEE802154_OQPSK_PHY;
lp->hw->phy->supported.page[0].chunk[0].band = IEEE802154_2400_MHZ_BAND;
lp->hw->phy->current_channel = 13;
- lp->hw->phy->symbol_duration = 16;
+ lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
lp->hw->phy->supported.tx_powers = at86rf233_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers);
lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels;
diff --git a/drivers/net/ieee802154/atusb.c b/drivers/net/ieee802154/atusb.c
index 7e8c9d6db7d7..80382919520e 100644
--- a/drivers/net/ieee802154/atusb.c
+++ b/drivers/net/ieee802154/atusb.c
@@ -678,24 +678,24 @@ static int hulusb_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
if (channel == 0) {
if (page == 0) {
/* SUB:0 and BPSK:0 -> BPSK-20 */
- lp->hw->phy->symbol_duration = 50;
+ lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
} else {
/* SUB:1 and BPSK:0 -> BPSK-40 */
- lp->hw->phy->symbol_duration = 25;
+ lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
}
} else {
if (page == 0)
/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */
- lp->hw->phy->symbol_duration = 40;
+ lp->hw->phy->symbol_duration = 40 * NSEC_PER_USEC;
else
/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */
- lp->hw->phy->symbol_duration = 16;
+ lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
}
- lp->hw->phy->lifs_period = IEEE802154_LIFS_PERIOD *
- lp->hw->phy->symbol_duration;
- lp->hw->phy->sifs_period = IEEE802154_SIFS_PERIOD *
- lp->hw->phy->symbol_duration;
+ lp->hw->phy->lifs_period =
+ (IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
+ lp->hw->phy->sifs_period =
+ (IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
return atusb_write_subreg(lp, SR_CHANNEL, channel);
}
@@ -919,7 +919,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
atusb->hw->phy->supported.page[0].chunk[0].protocol = IEEE802154_OQPSK_PHY;
atusb->hw->phy->supported.page[0].chunk[0].band = IEEE802154_2400_MHZ_BAND;
atusb->hw->phy->current_channel = 11; /* reset default */
- atusb->hw->phy->symbol_duration = 16;
+ atusb->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
atusb->hw->phy->supported.tx_powers = atusb_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
hw->phy->supported.cca_ed_levels = atusb_ed_levels;
@@ -932,7 +932,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
atusb->hw->phy->supported.page[0].chunk[0].protocol = IEEE802154_OQPSK_PHY;
atusb->hw->phy->supported.page[0].chunk[0].band = IEEE802154_2400_MHZ_BAND;
atusb->hw->phy->current_channel = 11; /* reset default */
- atusb->hw->phy->symbol_duration = 16;
+ atusb->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
atusb->hw->phy->supported.tx_powers = atusb_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
hw->phy->supported.cca_ed_levels = atusb_ed_levels;
@@ -963,7 +963,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
atusb->hw->phy->supported.page[2].chunk[1].band = IEEE802154_915_MHZ_BAND;
atusb->hw->phy->current_channel = 5;
- atusb->hw->phy->symbol_duration = 25;
+ atusb->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
atusb->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH;
atusb->hw->phy->supported.tx_powers = at86rf212_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
diff --git a/drivers/net/ieee802154/ca8210.c b/drivers/net/ieee802154/ca8210.c
index f42a0b719a33..6bd970d26220 100644
--- a/drivers/net/ieee802154/ca8210.c
+++ b/drivers/net/ieee802154/ca8210.c
@@ -2977,7 +2977,7 @@ static void ca8210_hw_setup(struct ieee802154_hw *ca8210_hw)
ca8210_hw->phy->cca.mode = NL802154_CCA_ENERGY_CARRIER;
ca8210_hw->phy->cca.opt = NL802154_CCA_OPT_ENERGY_CARRIER_AND;
ca8210_hw->phy->cca_ed_level = -9800;
- ca8210_hw->phy->symbol_duration = 16;
+ ca8210_hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
ca8210_hw->phy->lifs_period = 40;
ca8210_hw->phy->sifs_period = 12;
ca8210_hw->flags =
diff --git a/drivers/net/ieee802154/mcr20a.c b/drivers/net/ieee802154/mcr20a.c
index e2c249aef430..34063b7e663e 100644
--- a/drivers/net/ieee802154/mcr20a.c
+++ b/drivers/net/ieee802154/mcr20a.c
@@ -975,9 +975,9 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)
dev_dbg(printdev(lp), "%s\n", __func__);
- phy->symbol_duration = 16;
- phy->lifs_period = 40 * phy->symbol_duration;
- phy->sifs_period = 12 * phy->symbol_duration;
+ phy->symbol_duration = 16 * NSEC_PER_USEC;
+ phy->lifs_period = (40 * phy->symbol_duration) / NSEC_PER_USEC;
+ phy->sifs_period = (12 * phy->symbol_duration) / NSEC_PER_USEC;
hw->flags = IEEE802154_HW_TX_OMIT_CKSUM |
IEEE802154_HW_AFILT |
@@ -1010,7 +1010,7 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)
phy->current_page = 0;
/* MCR20A default reset value */
phy->current_channel = 20;
- phy->symbol_duration = 16;
+ phy->symbol_duration = 16 * NSEC_PER_USEC;
phy->supported.tx_powers = mcr20a_powers;
phy->supported.tx_powers_size = ARRAY_SIZE(mcr20a_powers);
phy->cca_ed_level = phy->supported.cca_ed_levels[75];
diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h
index 03c8008217fb..286709a9dd0b 100644
--- a/include/net/cfg802154.h
+++ b/include/net/cfg802154.h
@@ -253,8 +253,8 @@ struct wpan_phy {
/* PHY depended MAC PIB values */
- /* 802.15.4 acronym: Tdsym in usec */
- u8 symbol_duration;
+ /* 802.15.4 acronym: Tdsym in nsec */
+ u32 symbol_duration;
/* lifs and sifs periods timing */
u16 lifs_period;
u16 sifs_period;
diff --git a/net/mac802154/main.c b/net/mac802154/main.c
index 520cedc594e1..53153367f9d0 100644
--- a/net/mac802154/main.c
+++ b/net/mac802154/main.c
@@ -131,10 +131,10 @@ static void ieee802154_setup_wpan_phy_pib(struct wpan_phy *wpan_phy)
* Should be done when all drivers sets this value.
*/
- wpan_phy->lifs_period = IEEE802154_LIFS_PERIOD *
- wpan_phy->symbol_duration;
- wpan_phy->sifs_period = IEEE802154_SIFS_PERIOD *
- wpan_phy->symbol_duration;
+ wpan_phy->lifs_period =
+ (IEEE802154_LIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
+ wpan_phy->sifs_period =
+ (IEEE802154_SIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
}
int ieee802154_register_hw(struct ieee802154_hw *hw)
--
2.27.0
next prev parent reply other threads:[~2022-01-17 11:55 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-17 11:53 [PATCH v3 00/41] IEEE 802.15.4 scan support Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 01/41] MAINTAINERS: Remove Harry Morris bouncing address Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 02/41] net: ieee802154: hwsim: Ensure proper channel selection at probe time Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 03/41] net: ieee802154: hwsim: Ensure frame checksum are valid Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 04/41] net: ieee802154: Use the IEEE802154_MAX_PAGE define when relevant Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 05/41] net: ieee802154: Improve the way supported channels are declared Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 06/41] net: ieee802154: Give more details to the core about the channel configurations Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 07/41] net: ieee802154: mcr20a: Fix lifs/sifs periods Miquel Raynal
2022-01-17 22:52 ` Alexander Aring
2022-01-18 18:20 ` Miquel Raynal
2022-01-18 22:53 ` Alexander Aring
2022-01-17 11:54 ` Miquel Raynal [this message]
2022-01-17 11:54 ` [PATCH v3 09/41] net: mac802154: Set the symbol duration automatically Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 10/41] net: ieee802154: Drop duration settings when the core does it already Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 11/41] net: ieee802154: Move IEEE 802.15.4 Kconfig main entry Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 12/41] net: mac802154: Include the softMAC stack inside the IEEE 802.15.4 menu Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 13/41] net: ieee802154: Move the address structure earlier Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 14/41] net: ieee802154: Add a kernel doc header to the ieee802154_addr structure Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 15/41] net: ieee802154: Return meaningful error codes from the netlink helpers Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 16/41] net: mac802154: Explain the use of ieee802154_wake/stop_queue() Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 17/41] net: ieee802154: at86rf230: Call the complete helper when a transmission is over Miquel Raynal
2022-01-17 22:58 ` Alexander Aring
2022-01-18 0:34 ` Alexander Aring
2022-01-18 0:36 ` Alexander Aring
2022-01-18 18:22 ` Miquel Raynal
2022-01-19 22:45 ` Miquel Raynal
2022-01-19 22:56 ` Miquel Raynal
2022-01-19 23:34 ` Alexander Aring
2022-01-20 0:19 ` Alexander Aring
2022-01-17 11:54 ` [PATCH v3 18/41] net: ieee802154: atusb: " Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 19/41] net: ieee802154: ca8210: " Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 20/41] net: mac802154: Stop exporting ieee802154_wake/stop_queue() Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 21/41] net: mac802154: Rename the synchronous xmit worker Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 22/41] net: mac802154: Rename the main tx_work struct Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 23/41] net: mac802154: Follow the count of ongoing transmissions Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 24/41] net: mac802154: Hold the transmit queue when relevant Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 25/41] net: mac802154: Create a hot tx path Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 26/41] net: mac802154: Add a warning in the hot path Miquel Raynal
2022-01-17 23:14 ` Alexander Aring
2022-01-18 18:20 ` Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 27/41] net: mac802154: Introduce a tx queue flushing mechanism Miquel Raynal
2022-01-17 22:43 ` Alexander Aring
2022-01-18 18:14 ` Miquel Raynal
2022-01-18 23:16 ` Alexander Aring
2022-01-17 11:54 ` [PATCH v3 28/41] net: mac802154: Introduce a synchronous API for MLME commands Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 29/41] net: ieee802154: Add support for internal PAN management Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 30/41] net: ieee802154: Define a beacon frame header Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 31/41] net: ieee802154: Define frame types Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 32/41] net: ieee802154: Add support for scanning requests Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 33/41] net: mac802154: Handle scan requests Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 34/41] net: ieee802154: Full PAN management Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 35/41] net: ieee802154: Add beacons support Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 36/41] net: mac802154: Handle beacons requests Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 37/41] net: ieee802154: Trace the registration of new PANs Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 38/41] net: mac802154: Add support for active scans Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 39/41] net: mac802154: Add support for processing beacon requests Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 40/41] net: ieee802154: Handle limited devices with only datagram support Miquel Raynal
2022-01-17 11:54 ` [PATCH v3 41/41] net: ieee802154: ca8210: Flag the driver as being limited Miquel Raynal
2022-01-17 23:02 ` [PATCH v3 00/41] IEEE 802.15.4 scan support Alexander Aring
2022-01-18 10:40 ` Miquel Raynal
2022-01-18 23:12 ` Alexander Aring
2022-01-20 0:24 ` Miquel Raynal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220117115440.60296-9-miquel.raynal@bootlin.com \
--to=miquel.raynal@bootlin.com \
--cc=alan@signal11.us \
--cc=alex.aring@gmail.com \
--cc=david.girault@qorvo.com \
--cc=frederic.blain@qorvo.com \
--cc=kuba@kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linux-wpan@vger.kernel.org \
--cc=liuxuenetmail@gmail.com \
--cc=michael.hennerich@analog.com \
--cc=netdev@vger.kernel.org \
--cc=nico@ni.fr.eu.org \
--cc=romuald.despres@qorvo.com \
--cc=stefan@datenfreihafen.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=varkabhadram@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).