Commit 731cddce authored by Miquel Raynal's avatar Miquel Raynal Committed by Stefan Schmidt

net: mac802154: Convert the symbol duration into nanoseconds

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: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Acked-by: default avatarAlexander Aring <aahringo@redhat.com>
Link: https://lore.kernel.org/r/20220201180629.93410-3-miquel.raynal@bootlin.comSigned-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
parent cfa1e01e
...@@ -1075,24 +1075,24 @@ at86rf212_set_channel(struct at86rf230_local *lp, u8 page, u8 channel) ...@@ -1075,24 +1075,24 @@ at86rf212_set_channel(struct at86rf230_local *lp, u8 page, u8 channel)
if (channel == 0) { if (channel == 0) {
if (page == 0) { if (page == 0) {
/* SUB:0 and BPSK:0 -> BPSK-20 */ /* SUB:0 and BPSK:0 -> BPSK-20 */
lp->hw->phy->symbol_duration = 50; lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
} else { } else {
/* SUB:1 and BPSK:0 -> BPSK-40 */ /* SUB:1 and BPSK:0 -> BPSK-40 */
lp->hw->phy->symbol_duration = 25; lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
} }
} else { } else {
if (page == 0) if (page == 0)
/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */ /* 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 else
/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */ /* 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->lifs_period =
lp->hw->phy->symbol_duration; (IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
lp->hw->phy->sifs_period = IEEE802154_SIFS_PERIOD * lp->hw->phy->sifs_period =
lp->hw->phy->symbol_duration; (IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
return at86rf230_write_subreg(lp, SR_CHANNEL, channel); return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
} }
...@@ -1569,7 +1569,7 @@ at86rf230_detect_device(struct at86rf230_local *lp) ...@@ -1569,7 +1569,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->data = &at86rf231_data; lp->data = &at86rf231_data;
lp->hw->phy->supported.channels[0] = 0x7FFF800; lp->hw->phy->supported.channels[0] = 0x7FFF800;
lp->hw->phy->current_channel = 11; 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 = at86rf231_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers); lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers);
lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels; lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels;
...@@ -1582,7 +1582,7 @@ at86rf230_detect_device(struct at86rf230_local *lp) ...@@ -1582,7 +1582,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->hw->phy->supported.channels[0] = 0x00007FF; lp->hw->phy->supported.channels[0] = 0x00007FF;
lp->hw->phy->supported.channels[2] = 0x00007FF; lp->hw->phy->supported.channels[2] = 0x00007FF;
lp->hw->phy->current_channel = 5; 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.lbt = NL802154_SUPPORTED_BOOL_BOTH;
lp->hw->phy->supported.tx_powers = at86rf212_powers; lp->hw->phy->supported.tx_powers = at86rf212_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers); lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
...@@ -1594,7 +1594,7 @@ at86rf230_detect_device(struct at86rf230_local *lp) ...@@ -1594,7 +1594,7 @@ at86rf230_detect_device(struct at86rf230_local *lp)
lp->data = &at86rf233_data; lp->data = &at86rf233_data;
lp->hw->phy->supported.channels[0] = 0x7FFF800; lp->hw->phy->supported.channels[0] = 0x7FFF800;
lp->hw->phy->current_channel = 13; 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 = at86rf233_powers;
lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers); lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers);
lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels; lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels;
......
...@@ -625,24 +625,24 @@ static int hulusb_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel) ...@@ -625,24 +625,24 @@ static int hulusb_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
if (channel == 0) { if (channel == 0) {
if (page == 0) { if (page == 0) {
/* SUB:0 and BPSK:0 -> BPSK-20 */ /* SUB:0 and BPSK:0 -> BPSK-20 */
lp->hw->phy->symbol_duration = 50; lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
} else { } else {
/* SUB:1 and BPSK:0 -> BPSK-40 */ /* SUB:1 and BPSK:0 -> BPSK-40 */
lp->hw->phy->symbol_duration = 25; lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
} }
} else { } else {
if (page == 0) if (page == 0)
/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */ /* 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 else
/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */ /* 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->lifs_period =
lp->hw->phy->symbol_duration; (IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
lp->hw->phy->sifs_period = IEEE802154_SIFS_PERIOD * lp->hw->phy->sifs_period =
lp->hw->phy->symbol_duration; (IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
return atusb_write_subreg(lp, SR_CHANNEL, channel); return atusb_write_subreg(lp, SR_CHANNEL, channel);
} }
...@@ -869,7 +869,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb) ...@@ -869,7 +869,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
chip = "AT86RF230"; chip = "AT86RF230";
atusb->hw->phy->supported.channels[0] = 0x7FFF800; atusb->hw->phy->supported.channels[0] = 0x7FFF800;
atusb->hw->phy->current_channel = 11; /* reset default */ 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 = atusb_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers); atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
hw->phy->supported.cca_ed_levels = atusb_ed_levels; hw->phy->supported.cca_ed_levels = atusb_ed_levels;
...@@ -879,7 +879,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb) ...@@ -879,7 +879,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
chip = "AT86RF231"; chip = "AT86RF231";
atusb->hw->phy->supported.channels[0] = 0x7FFF800; atusb->hw->phy->supported.channels[0] = 0x7FFF800;
atusb->hw->phy->current_channel = 11; /* reset default */ 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 = atusb_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers); atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
hw->phy->supported.cca_ed_levels = atusb_ed_levels; hw->phy->supported.cca_ed_levels = atusb_ed_levels;
...@@ -891,7 +891,7 @@ static int atusb_get_and_conf_chip(struct atusb *atusb) ...@@ -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[0] = 0x00007FF;
atusb->hw->phy->supported.channels[2] = 0x00007FF; atusb->hw->phy->supported.channels[2] = 0x00007FF;
atusb->hw->phy->current_channel = 5; 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.lbt = NL802154_SUPPORTED_BOOL_BOTH;
atusb->hw->phy->supported.tx_powers = at86rf212_powers; atusb->hw->phy->supported.tx_powers = at86rf212_powers;
atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers); atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
......
...@@ -2974,7 +2974,7 @@ static void ca8210_hw_setup(struct ieee802154_hw *ca8210_hw) ...@@ -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.mode = NL802154_CCA_ENERGY_CARRIER;
ca8210_hw->phy->cca.opt = NL802154_CCA_OPT_ENERGY_CARRIER_AND; ca8210_hw->phy->cca.opt = NL802154_CCA_OPT_ENERGY_CARRIER_AND;
ca8210_hw->phy->cca_ed_level = -9800; 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->lifs_period = 40 * ca8210_hw->phy->symbol_duration;
ca8210_hw->phy->sifs_period = 12 * ca8210_hw->phy->symbol_duration; ca8210_hw->phy->sifs_period = 12 * ca8210_hw->phy->symbol_duration;
ca8210_hw->flags = ca8210_hw->flags =
......
...@@ -975,9 +975,9 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp) ...@@ -975,9 +975,9 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)
dev_dbg(printdev(lp), "%s\n", __func__); dev_dbg(printdev(lp), "%s\n", __func__);
phy->symbol_duration = 16; phy->symbol_duration = 16 * NSEC_PER_USEC;
phy->lifs_period = 40 * phy->symbol_duration; phy->lifs_period = (40 * phy->symbol_duration) / NSEC_PER_USEC;
phy->sifs_period = 12 * phy->symbol_duration; phy->sifs_period = (12 * phy->symbol_duration) / NSEC_PER_USEC;
hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | hw->flags = IEEE802154_HW_TX_OMIT_CKSUM |
IEEE802154_HW_AFILT | IEEE802154_HW_AFILT |
...@@ -1006,7 +1006,7 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp) ...@@ -1006,7 +1006,7 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)
phy->current_page = 0; phy->current_page = 0;
/* MCR20A default reset value */ /* MCR20A default reset value */
phy->current_channel = 20; 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 = mcr20a_powers;
phy->supported.tx_powers_size = ARRAY_SIZE(mcr20a_powers); phy->supported.tx_powers_size = ARRAY_SIZE(mcr20a_powers);
phy->cca_ed_level = phy->supported.cca_ed_levels[75]; phy->cca_ed_level = phy->supported.cca_ed_levels[75];
......
...@@ -203,8 +203,8 @@ struct wpan_phy { ...@@ -203,8 +203,8 @@ struct wpan_phy {
/* PHY depended MAC PIB values */ /* PHY depended MAC PIB values */
/* 802.15.4 acronym: Tdsym in usec */ /* 802.15.4 acronym: Tdsym in nsec */
u8 symbol_duration; u32 symbol_duration;
/* lifs and sifs periods timing */ /* lifs and sifs periods timing */
u16 lifs_period; u16 lifs_period;
u16 sifs_period; u16 sifs_period;
......
...@@ -131,10 +131,10 @@ static void ieee802154_setup_wpan_phy_pib(struct wpan_phy *wpan_phy) ...@@ -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. * Should be done when all drivers sets this value.
*/ */
wpan_phy->lifs_period = IEEE802154_LIFS_PERIOD * wpan_phy->lifs_period =
wpan_phy->symbol_duration; (IEEE802154_LIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
wpan_phy->sifs_period = IEEE802154_SIFS_PERIOD * wpan_phy->sifs_period =
wpan_phy->symbol_duration; (IEEE802154_SIFS_PERIOD * wpan_phy->symbol_duration) / 1000;
} }
int ieee802154_register_hw(struct ieee802154_hw *hw) int ieee802154_register_hw(struct ieee802154_hw *hw)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment