net: mac802154: Convert the symbol duration into nanoseconds
authorMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 1 Feb 2022 18:06:27 +0000 (19:06 +0100)
committerStefan Schmidt <stefan@datenfreihafen.org>
Thu, 10 Feb 2022 14:41:58 +0000 (15:41 +0100)
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 way.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Acked-by: Alexander Aring <aahringo@redhat.com>
Link: https://lore.kernel.org/r/20220201180629.93410-3-miquel.raynal@bootlin.com
Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
drivers/net/ieee802154/at86rf230.c
drivers/net/ieee802154/atusb.c
drivers/net/ieee802154/ca8210.c
drivers/net/ieee802154/mcr20a.c
include/net/cfg802154.h
net/mac802154/main.c

index 4f5ef8a9a9a8796db21f270bbb707eb5204e10f1..0264e43a1080b0d0b9c49c4fa567f1762b1a34e3 100644 (file)
@@ -1075,24 +1075,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);
 }
@@ -1569,7 +1569,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
                lp->data = &at86rf231_data;
                lp->hw->phy->supported.channels[0] = 0x7FFF800;
                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;
@@ -1582,7 +1582,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
                lp->hw->phy->supported.channels[0] = 0x00007FF;
                lp->hw->phy->supported.channels[2] = 0x00007FF;
                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);
@@ -1594,7 +1594,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
                lp->data = &at86rf233_data;
                lp->hw->phy->supported.channels[0] = 0x7FFF800;
                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;
index 07bafbf946802a2590ba068d9417c1cdf9549291..abe27d1c51ca404999a238f838d029e37fb0e0ea 100644 (file)
@@ -625,24 +625,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);
 }
@@ -869,7 +869,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
                chip = "AT86RF230";
                atusb->hw->phy->supported.channels[0] = 0x7FFF800;
                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;
@@ -879,7 +879,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
                chip = "AT86RF231";
                atusb->hw->phy->supported.channels[0] = 0x7FFF800;
                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;
@@ -891,7 +891,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
                atusb->hw->phy->supported.channels[0] = 0x00007FF;
                atusb->hw->phy->supported.channels[2] = 0x00007FF;
                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);
index 2bc730fd260ebb0f386ef9d4f7cc4630a6dbbe43..e88cdbf6673b00111ab18f6a7e30b46091b2cbfd 100644 (file)
@@ -2974,7 +2974,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->symbol_duration;
        ca8210_hw->phy->sifs_period = 12 * ca8210_hw->phy->symbol_duration;
        ca8210_hw->flags =
index 383231b85464252a9dfc6a20f938247e5b546959..c925e629ddf33365c0ea2d9ac071fad38153cc70 100644 (file)
@@ -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 |
@@ -1006,7 +1006,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];
index 833672d6fbe483232e62b59d144b8d830b6ef07f..92d4f178cacada7debfb356a0c24ef832ef0fdc3 100644 (file)
@@ -203,8 +203,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;
index 520cedc594e1e4f8ba4b89b6b57e7e52787dad50..53153367f9d0565b96db27f7211cdbcd199ff4e4 100644 (file)
@@ -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)